我正在运行 Ubuntu 12.04 的新服务器上设置 Nginx。这是我到目前为止所做的:
安装的nginx:
aptitude -y install nginx
删除了默认的虚拟主机配置:
rm /etc/nginx/sites-enabled/*
添加了我自己的虚拟主机配置:
mv myapp.conf /etc/nginx/sites-enabled/
启动nginx:
service nginx start
vhost 文件如下所示:
upstream unicorn_server {
server unix:/tmp/APP_NAME.sock fail_timeout=0;
}
server {
listen 80 default deferred;
client_max_body_size 4G;
server_name _;
keepalive_timeout 5;
access_log /var/log/nginx/APP_NAME.access.log;
root /var/www/APP_NAME/current/public;
# auth
try_files $uri/index.html $uri.html $uri @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn_server;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/www/APP_NAME/current/public;
}
}
我可以确认 Nginx 正在运行:
service nginx status
* nginx is running
但是,我似乎无法访问它:
curl 123.456.789.0 # example IP
curl: (7) couldn't connect to host
我还没有启动独角兽服务器,但这应该不是问题。如果 Unicorn 没有运行,我预计会看到 502 错误。错误或访问日志中没有输出。我应该采取哪些步骤来解决问题?
您发布的此配置唯一真正不寻常的是
deferred
在您的listen
指令中使用。似乎有些网站在他们的示例配置中提供了这个并“推荐”它,但实际上并没有解释它的作用。(这不是很多,除非它在两端都设置,如果不是,那么事情会很快变得非常奇怪,因为这在技术上巧妙地破坏了 TCP 协议。)
我要做的第一件事就是
deferred
从你的listen
指令中删除这个选项。即使这不能解决问题,我也不会把它放回去。如果您想稍后研究其假定的性能优势,您可以在仔细控制的测试环境中进行。
nginx -t
在配置文件上运行服务器上的防火墙阻止连接到 80 端口?尝试在服务器上执行“curl localhost”以检查它是否可以在本地访问。