nginx sin server_name y usando solo una dirección IP estática?

34

Esta es mi primera implementación de aplicaciones web y me encuentro con todo tipo de problemas.

Actualmente estoy buscando una implementación nginx + gunicorn para la aplicación Django, pero principalmente esta pregunta se relaciona con las configuraciones nginx. Para algún contexto, nginx recibiría conexiones y proxy para el servidor local gunicorn.

en las configuraciones nginx, donde dice server_name¿tengo que proporcionar una? No planeo usar nombres de dominio de ningún tipo, solo a través de la IP externa de mi red (es estática) y el número de puerto para escuchar.

Mi deseo es que cuando accedo a algo así http://xxx.xxx.xxx.xxx:9050pueda obtener el sitio.

El siguiente es el código de muestra en el que basaré las configuraciones como referencia.

   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;
     }
golpetazo-
fuente

Respuestas:

31

server_nameel valor predeterminado es una cadena vacía, que está bien; Puedes excluirlo por completo.

Otro enfoque común para la necesidad de "No quiero ponerle un nombre a esto" es usar server_name _;

http://xxx.xxx.xxx.xxx:9050Sin embargo, su URL no funcionará con esta configuración; solo está escuchando en el puerto 80. También necesitaría agregar un listen 9050;.

Shane Madden
fuente
oye, ¿puedes echar un vistazo a este serverfault.com/questions/678521/…
Muhammad Umer
algo relacionado
Muhammad Umer
5

nombre del servidor _; no es un comodín ver aquí:

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

solo especifique la directiva default_server para el acceso de solo IP (consulte http://nginx.org/en/docs/http/request_processing.html )

server {
    listen 1.2.3.4:80 default_server;
    ... 
    }
Joe
fuente
2
Se desaconseja simplemente vincular a la información útil y no incluirla en su respuesta; en este caso, server_name _;no coincide.
BE77Y
1
"no es un comodín" == "no coincide". Estoy seguro de que lo conseguirán.
Joe
2
Los dos no son iguales; no coincidencia es lo que se sirve cuando nada más coincide, mientras que un comodín coincide con todo. El punto aquí, sin embargo, es que la información útil debe estar en la respuesta, no vinculada en ningún otro sitio (sin embargo, bien presentada en ese sitio), como se detalla aquí
BE77Y
Y el punto es que esta no es una 'buena respuesta' sino una respuesta. Lo siento, no hay tiempo. Si desea editarlo / reescribirlo, le doy permiso completo para hacerlo. De lo contrario, sabrán exactamente qué hacer, y es útil. Siéntase libre de reescribirlo, de lo contrario la respuesta se mantiene.
Joe
3
Si no tuvo "tiempo" para incluir una línea adicional con la información pertinente, ¡sinceramente, no sé por qué se molestó en responder una publicación de 3 años con una respuesta aceptada!
BE77Y
4

Si desea que su aplicación responda en el puerto 9050 sin un nombre de host específico, puede omitir server_name, no es necesario ya que Nginx primero resuelve la entrada de escucha y luego server_name si está presente:

server {
   listen 9050;

   .....
}

Más detalles aquí: Nginx server_name y cómo funciona

Gansbrest
fuente