2012-04-16 20 views
10

Ho nginx configurato per proxy del traffico https su un server http in esecuzione sulla stessa macchina.Nginx proxy https su http su porta non standard?

Tutto funziona correttamente quando configuro nginx per l'ascolto su/proxy dalla porta https 443. Ma voglio davvero ascoltare su una porta non standard. Quando configuro una porta non standard, nginx riceve la richiesta e la invia al mio server http, come dovrebbe, ma il server risponde con un reindirizzamento HTTP al browser che gli dice di reindirizzare a 'https: // server. com/someurl. "Voglio dire che l'url di reindirizzamento sembra buono, tranne che manca la porta corretta. Mi manca un'intestazione HTTP che ho bisogno di essere impostato nel proxy?

In particolare sto eseguendo un'istanza http di Tracce .; http://getontracks.org Se è importante

mio (lavorando sulla porta standard) configurazione del server nginx:

location /{ 
    proxy_pass http://localhost:50000; 
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto https; 
    proxy_redirect off; 
} 

risposta

1

Th. è più un problema dell'applicazione in esecuzione sull'host upstream (Tracks), non sulla configurazione del server Web (a meno che la configurazione del server Web upstream non contenga regole di riscrittura, ovviamente). Diverse applicazioni gestiscono queste situazioni in modo diverso: alcune richiedono un parametro di configurazione esplicito che indica loro l'URL effettivo a cui l'applicazione può essere raggiunta, alcuni utilizzano determinate intestazioni HTTP, altre utilizzano altre intestazioni HTTP.

Poiché Tracce è un'applicazione Rails, è possibile che si ottengano risposte più competenti se si aggiunge un tag corrispondente alla domanda.

+0

Grazie. Ho trovato alcuni post sul forum che suggeriscono di impostare un'intestazione HTTP X-Forwarded-Port anche se sembra un'intestazione "non standard" non standard. Ho provato a impostarlo nella configurazione di nginx senza fortuna. Suppongo comunque, come dici tu, che l'applicazione in esecuzione sull'host upstream debba essere consapevole e agire su qualcosa di simile. – kenen

24

Il problema deriva dalla linea -

proxy_set_header Host $host; 

Il server web (WEBrick) a sua volta compreso questo momento del rilascio della risposta di reindirizzamento.

È possibile modificarlo per includere la porta non standard -

proxy_set_header Host $host:$server_port; 

che dovrebbe risolvere il problema.

+0

Molto buono. Questo ha risolto il mio problema con l'applicazione di flask in esecuzione dietro reverse proxy nginx cercando di generare URL corretti incl. porta non-starndard come descritto in [flask snippet 35] (http://flask.pocoo.org/snippets/35/) senza che sia necessario toccare lo snippet. –

Problemi correlati