2015-10-13 24 views
8

Ho creato un'applicazione web Django (1.7) con uno stack Nginx, Gunicorn, Django e recentemente ho iniziato a ricevere un numero di errori:Django ERRORE (IP ESTERNO): header HTTP_HOST non valido: '* .domain.com'

[Django] ERRORE (IP ESTERNO): Intestazione HTTP_HOST non valida: '*. dominio.com'. Il nome di dominio fornito non è valido secondo la RFC 1034/1035.

Dopo la ricerca intorno, ho trovato diversi risposta che suggerisce di mettere il carattere jolly come i padroni di casa consentite, cioè

ALLOWED_HOSTS = ['*'] 

Comunque sto ancora ricevendo questo errore.

Ecco il messaggio di errore completo:

Request repr(): 
<WSGIRequest 
path:/, 
GET:<QueryDict: {}>, 
POST:<QueryDict: {}>, 
COOKIES:{}, 
META:{'HTTP_ACCEPT_ENCODING': 'none', 
'HTTP_CONNECTION': 'close', 
'HTTP_HOST': '*.domain.com', 
'HTTP_USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)', 
'HTTP_X_FORWARDED_FOR': '11.111.111.11', 
'HTTP_X_FORWARDED_HOST': 'subdomain.domain.com', 
'HTTP_X_REAL_IP': '11.111.111.11', 
'PATH_INFO': u'/', 
'QUERY_STRING': '', 
'RAW_URI': '/', 
'REMOTE_ADDR': '127.0.0.1', 
'REMOTE_PORT': '51349', 
'REQUEST_METHOD': 'GET', 
'SCRIPT_NAME': u'', 
'SERVER_NAME': '127.0.0.1', 
'SERVER_PORT': '9000', 
'SERVER_PROTOCOL': 'HTTP/1.0', 
'SERVER_SOFTWARE': 'gunicorn/19.1.1', 
'gunicorn.socket': <socket._socketobject object at 0x3877fa0>, 
'wsgi.errors': <gunicorn.http.wsgi.WSGIErrorsWraper object at 0x37e6050>, 
'wsgi.file_wrapper': <class 'gunicorn.http.wsgi.FileWrapper'>, 
'wsgi.input': <gunicorn.http.body.Body object at 0x396cc50>, 
'wsgi.multiprocess': False, 
'wsgi.multithread': False, 
'wsgi.run_once': False, 
'wsgi.url_scheme': 'http', 
'wsgi.version': (1, 0)}> 

E 'questo qualcosa che dovrei essere preoccupato? Mi sto perdendo qualcosa qui? Ho pensato inserendo il jolly negli host consentiti, eliminerei questo problema, ma non sembra essere il caso.

Qualsiasi aiuto sarebbe molto apprezzato.

+0

non avrei jolly host autorizzati, invece di utilizzare un elenco dei padroni di casa davvero consentite come [www.domain.com, domain.com]. Configura anche il tuo Nginx per accettare queste richieste tramite nome_server. – Jingo

+0

@Jingo grazie per il vostro aiuto e una rapida risposta. Ho avuto i domini aggiunti in precedenza ma ho riscontrato lo stesso errore, motivo per cui ho aggiunto il carattere jolly nella sua posizione. Strano. Lo rimetterò come hai detto e vedrò se riscontro ancora questi problemi. – tdsymonds

+0

Ora ho rimosso gli host consentiti con caratteri jolly e continuo a ricevere questo errore ?! – tdsymonds

risposta

2

Il cliente che sta facendo una richiesta al server ha inviato il seguente HTTP Host intestazione:

Host: *.domain.com 

Questo è valido secondo le specifiche HTTP - * non è consentito nell'intestazione - da qui Django risponde con una risposta HTTP 400 e registra l'errore.

Questo non è correlato a ciò che si mette nel vostro ambiente ALLOWED_HOSTS, dove * è consentito e dice Django ad accettare le richieste di qualsiasi nome host (valido) (sarà ancora rifiutare nomi host non validi come *.domain.com).

Come altri hanno sottolineato nei commenti, tuttavia, è necessario configurare nginx solo per accettare connessioni per host specifici (server_name) in modo che tali richieste non raggiungano nemmeno Django.

1

NUMERO: gunicorn (il tuo server di applicazione Django) riceve un nome host non valido.

quando viene effettuata una richiesta al server (Nginx) e HTTP Host (o agente utente) è vuota, nginx imposta l'host HTTP alla calza gunicorn.


Soluzione: Aggiungere/aggiornare una direttiva in conf nginx (nginx.conf o sites-enabled/<your-site>.conf) da:

proxy_set_header Host $http_host; 

a (se non lo avete impostato, basta aggiungere il in seguito),

proxy_set_header Host $host; 

può mettere dentro la location, al di sopra della direttiva proxy_pass:

server { 
    listen 8000; 
    server_name 0.0.0.0; 

    location/{ 
      proxy_set_header Host $host; 
      include proxy_params; 
      proxy_pass http://unix:/<your-path>/yourproject.sock; 

    } 
}