2012-04-16 17 views
10

Ich habe Nginx konfiguriert Proxy-HTTPS-Verkehr zu einem HTTP-Server läuft auf dem gleichen Rechner.Nginx Proxy https zu http auf Nicht-Standard-Port?

Alles funktioniert gut, wenn ich Nginx auf/Proxy von https Port 443 zu hören konfigurieren. Aber ich möchte wirklich auf einem nicht standard-Port hören. Wenn ich einen nicht standardmäßigen Port konfiguriere, empfängt nginx die Anfrage und sendet sie an meinen HTTP-Server, so wie es sein sollte, aber der Server antwortet mit einer HTTP-Weiterleitung zurück zum Browser, die ihn an 'https: // server weiterleitet. com/someurl ". Ich meine, die Weiterleitungs-URL sieht gut aus, bis auf den richtigen Port. Vermisse ich einen HTTP-Header, den ich im Proxy festlegen muss?

Insbesondere ich führe eine http-Instanz von Tracks . http://getontracks.org Wenn es darauf ankommt

Meine (Arbeits auf Standard-Port) nginx-Server-Konfiguration:

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

Antwort

1

Th. Dies ist eher ein Problem der Anwendung, die auf dem Upstream-Host (Tracks) ausgeführt wird, nicht der Webserver-Konfiguration (außer Ihre Upstream-Webserver-Konfiguration enthält natürlich Rewrite-Regeln). Verschiedene Anwendungen behandeln diese Situationen unterschiedlich: einige erfordern einen expliziten Konfigurationsparameter, der ihnen die tatsächliche URL mitteilt, unter der die Anwendung erreichbar ist, einige verwenden bestimmte HTTP-Header, andere verwenden andere HTTP-Header.

Da Tracks eine Rails-Anwendung ist, erhalten Sie möglicherweise mehr sachkundige Antworten, wenn Sie ein entsprechendes Tag zu Ihrer Frage hinzufügen.

+0

Danke. Ich habe einige Forenbeiträge gefunden, in denen vorgeschlagen wurde, einen HTTP X-Forwarded-Port-Header zu setzen, auch wenn das noch mehr als ein nicht standardmäßiger "Nicht-Standard" -Header erscheint. Ich habe versucht, das in der Nginx-Konfiguration ohne Glück zu setzen. Ich vermute sowieso, wie Sie sagen, dass die Anwendung, die auf dem Upstream-Host ausgeführt wird, sich dessen bewusst sein und etwas unternehmen muss. – kenen

24

Die Ausgabe von der Linie stammt -

proxy_set_header Host $host; 

Ihr Webserver (WEBrick) wiederum wird dies auch dann, wenn die Umleitungsantwort ausgibt.

Sie können es ändern, um die Nicht-Standard-Port schließen -

proxy_set_header Host $host:$server_port; 

, die dieses Problem lösen soll.

+0

Sehr gut. Dies löste mein Problem mit der Flask-Anwendung, die hinter dem Nginx-Reverse-Proxy lief und versuchte, eine korrekte URL inkl. Nicht-Stern-Port, wie in [flaskschnipsel 35] (http://flask.pocoo.org/snippets/35/) beschrieben, ohne dass dieses Snippet berührt werden muss. –