我在AWS OpsWorks Nginx / Unicorn Rails层上运行了Rails应用程序。我希望我的应用程序只处理对api.mydomain.com的请求,并且如果使用服务器的IP地址发出任何请求,我的Web服务器将直接返回404。
我已经实现了一个自定义菜谱,它覆盖了unicorn / templates / default / nginx_unicorn_web_app.erb(来自opsworks-cookbooks repo:https://github.com/aws/opsworks-cookbooks)。我复制了此存储库中存在的模板文件,并在模板顶部添加了一个新的服务器块:
server {
listen 80;
server_name <%= @instance[:ip] %>;
return 404;
}
我停止并启动我的服务器以确保使用自定义模板文件,但是当我使用服务器的IP地址发出请求时,它仍会被路由到我的Rails应用程序。
这是&lt;%= @instance [:ip]%&gt;不正确?有没有办法从这个模板文件中记录,以便我可以更容易地调试出错的地方?我尝试使用Chef :: Log.info,但我的消息似乎没有被记录。
谢谢!
编辑:对于其他有此问题的人...以下关于设置默认服务器块的答案修复了我的一个问题。我的另一个问题与我的菜谱更新甚至没有进入我的实例并需要手动刷新菜谱缓存的事实有关:http://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-installingcustom-enable-update.html
答案 0 :(得分:1)
EC2实例具有私有(通常为RFC-1918)IP地址。 Internet网关将流量从公共地址转换为该地址。如果该私有地址是地址<%= @instance[:ip] %>
返回,那么显然,这种配置不会做你想要的。
即使不是,这也不是正确的做法。
相反,您应该定义Nginx的默认行为 - 这是第一个server
块 - 抛出错误,稍后在配置中声明一个服务器块api DNS主机名以及正常操作所需的行为。
答案 1 :(得分:0)
尝试在return语句周围添加位置块“location /”指的是root
server {
listen 80;
server_name <%= @instance[:ip] %>;
location / {
return 404;
}
}