I am setting up Nginx on a new server running Ubuntu 12.04. Here's what I've done so far:
Installed nginx:
aptitude -y install nginx
Removed the default vhost config:
rm /etc/nginx/sites-enabled/*
Added my own vhost config:
mv myapp.conf /etc/nginx/sites-enabled/
Started nginx:
service nginx start
The vhost file looks something like this:
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;
}
}
I can confirm that Nginx is running:
service nginx status
* nginx is running
However, I can't seem to access it:
curl 123.456.789.0 # example IP
curl: (7) couldn't connect to host
I have not yet started the unicorn server, but that should not be a problem. I would expect to see a 502 error if Unicorn isn't running. There is no output in the error or access logs. What steps should I take to troubleshoot the issue?
The only thing really unusual about this configuration you've posted is the use of
deferred
in yourlisten
directive.It seems some web sites provide this in their sample configurations and "recommend" it but don't actually explain what it does. (Which is not very much, unless it's set on both ends, and if it isn't, then things get really weird really fast, since this technically subtly breaks the TCP protocol.)
The absolute first thing I would do would be to remove this
deferred
option from yourlisten
directive.Even if this does not solve the problem, I would not put it back. If you want to investigate its supposed performance benefits later, you can do so in a carefully controlled test environment.
nginx -t
on the config fileFirewall on your server blocking connection to 80 port? Try doing 'curl localhost' on server to check if it is locally reachable.