nginx senza nome_server e usando solo un indirizzo IP statico?


34

questa è la mia prima distribuzione di app Web e ho riscontrato problemi di ogni genere.

Attualmente sto per un'implementazione nginx + gunicorn per l'app Django, ma soprattutto questa domanda riguarda le configurazioni nginx. Per alcuni contesti - nginx riceverebbe connessioni e proxy al server locale gunicorn.

nelle configurazioni nginx, dove dice server_nameche devo fornire uno? Non intendo utilizzare nomi di dominio di alcun tipo, solo attraverso l'ip esterno della mia rete (è statico) e il numero di porta da ascoltare.

Il mio desiderio è che quando accedo a qualcosa di simile http://xxx.xxx.xxx.xxx:9050sarei in grado di ottenere il sito.

Di seguito è riportato il codice di esempio su cui baserò le configurazioni per riferimento.

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

Risposte:


31

server_nameil valore predefinito è una stringa vuota, che va bene; puoi escluderlo completamente.

Un altro approccio comune per la necessità "Non voglio dare un nome a questo" è l'uso server_name _;

Il tuo http://xxx.xxx.xxx.xxx:9050URL non funzionerà con questa configurazione, comunque; stai solo ascoltando sulla porta 80. Dovresti aggiungere anche un listen 9050;.


ehi, puoi dare un'occhiata a questo serverfault.com/questions/678521/…
Muhammad Umer,

in qualche modo correlato
Muhammad Umer del

5

nome del server _; non è un carattere jolly vedi qui:

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

specifica semplicemente la direttiva default_server per l'accesso solo ip (vedi http://nginx.org/en/docs/http/request_processing.html )

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

2
È sconsigliato semplicemente il collegamento a un'informazione utile e non includerla nella risposta, in questo caso si server_name _;tratta di una non corrispondenza.
BE77Y,

1
"non è un carattere jolly" == "non corrisponde". Sono sicuro che lo capiranno.
Joe,

2
I due non sono uguali; la non corrispondenza è ciò che viene servito quando nient'altro corrisponde, mentre un carattere jolly corrisponde a tutto. Il punto qui è tuttavia che le informazioni utili dovrebbero essere nella risposta, non collegate su qualche altro sito (comunque ben presentato su quel sito), come dettagliato qui
BE77Y

E il punto è che questa non è una "buona risposta" ma è una risposta. Scusa, non c'è tempo. Se desideri modificarlo / riscriverlo, ti autorizzo a farlo. Altrimenti, sapranno esattamente cosa fare ed è utile. Sentiti libero di riscriverlo, altrimenti la risposta è valida.
Joe,

3
Se non hai avuto "tempo" per includere una riga aggiuntiva con le informazioni pertinenti, onestamente non so perché ti sei preso la briga di rispondere a un post di 3 anni con una risposta accettata!
BE77Y,

4

Se vuoi che la tua app risponda sulla porta 9050 senza un nome host specifico, puoi semplicemente saltare nome_server, non è richiesto poiché Nginx risolve prima la voce di ascolto e quindi nome_server se presente:

server {
   listen 9050;

   .....
}

Maggiori dettagli qui: Nginx nome_server e come funziona

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.