nginx without server_name and using only static ip address?

this is my first web app deployment and am running into all sorts of issues.

I am currently going for a nginx + gunicorn implementation for the Django app, but mostly this question relates to nginx configurations. For some context - nginx would receive connections and proxy to the gunicorn local server.

in the nginx configurations, where it says server_name do I have to provide one? I don't plan to use domain names of any kind, just through my network's external ip (it is static) and the port number to listen to.

My desire is that when I access something like http://xxx.xxx.xxx.xxx:9050 I would be able to get the site.

The following is the sample code that I will base the configurations on for reference.

   server {
        listen   80;
        server_name WHAT TO PUT HERE?;

    root /path/to/test/hello;

    location /media/ {
        # if asset versioning is used
        if ($query_string) {
            expires max;
        }
    }
    location /admin/media/ {
        # this changes depending on your python version
        root /path/to/test/lib/python2.6/site-packages/django/contrib;
    }
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    }
        # what to serve if upstream is not available or crashes
        error_page 500 502 503 504 /media/50x.html;
     }

Solution 1:

server_name defaults to an empty string, which is fine; you can exclude it completely.

Another common approach for the "I don't want to put a name on this" need is to use server_name _;

Your http://xxx.xxx.xxx.xxx:9050 URL won't work with this config, though; you're only listening on port 80. You'd need to add a listen 9050; as well.

Solution 2:

server_name _; is not a wildcard see here:

http://blog.gahooa.com/2013/08/21/nginx-how-to-specify-a-default-server

just specify the default_server directive for ip-only access (see http://nginx.org/en/docs/http/request_processing.html)

server {
    listen 1.2.3.4:80 default_server;
    ... 
    }

Solution 3:

If you want your app to respond on port 9050 without specific hostname then you can just skip server_name, it's not required since Nginx first resolves listen entry and then server_name if present:

server {
   listen 9050;

   .....
}

More details here: Nginx server_name and how it works