2011-12-21 4 views
7

Ho un progetto django impostato con nginx + apache. La porta http per l'accesso esterno è 20111 che viene quindi inoltrata alla macchina server (che ha un IP interno) alla porta 80. Quindi nginx ascolta sulla porta 80 (e passa richieste pertinenti ad apache sulla porta 5000).admin di django reindirizza alla porta errata al salvataggio

Ora il login iniziale può essere raggiunto dall'esterno tramite http://externalip:20111 - ma quando ho completare un'azione di amministrazione, come il salvataggio di un ingresso, vengo reindirizzato a http://externalip/path/to/model - senza la porta 20111. Il risultato è un timeout. Come posso dire a django di utilizzare un nome host/porta specifico (ad esempio http://externalip:20111) per tutti i reindirizzamenti di amministratore?

+0

Penso che il tuo sito (http: // externalip: 20111/admin/siti/site /) non lo fa avere la porta nel suo campo di dominio. Il dominio del sito sembra essere "externalip" anziché "externalip: 20111". È corretto ? – jpic

+0

Non sto usando il framework del sito. Stai dicendo che se lo abilito, renderà automaticamente il framework admin utilizzare Site.domain su tutti i reindirizzamenti? – pholz

+0

OK, ho provato ad utilizzare il framework del sito ora, sto includendo la porta nel campo del dominio e ho impostato SITE_ID sull'ID corretto, ma l'amministratore continua a reindirmi all'URL di base senza la porta 20111. – pholz

risposta

3

Quando si distribuiscono applicazioni dietro un proxy o un servizio di bilanciamento del carico, è normale fare affidamento sull'intestazione X-Forwarded-Host. Django ha support per questo

Prima di tutto, devi configurare nginx per inviare le intestazioni corrette. Aggiungi alla tua configurazione host nginx (all'interno della vostra sezione location):

proxy_set_header X-Forwarded-Host $host:20111; 

In secondo luogo, aggiungere alla vostra settings.py:

USE_X_FORWARDED_HOST = True 

Permetterà Django fidarsi X-Forwarded-Host intestazioni da una richiesta.

Dovrebbe farlo funzionare per voi. Per motivi di sicurezza, non si dovrebbe fidare di ogni valore inviato in X-Forwarded-Host, quindi aggiungere i domini trusted/IPS per ALLOWED_HOSTS in settings.py