2012-04-16 153 views
10

我有nginx配置爲代理https流量到同一臺機器上運行的http服務器。當我配置nginx的上/代理監聽來自HTTPS端口443,但我真的想聽聽非標準端口上Nginx代理https到非標準端口上的http?

,一切工作正常。當我配置一個非標準端口,nginx的接收請求,並將其發送到我的http服務器,因爲它應該,但服務器使用HTTP響應重定向回,告訴它重定向到「HTTPS瀏覽器://服務器。 com/someurl「。我的意思是重定向url看起來不錯,除了它缺少正確的端口。我是否缺少一個需要在代理中設置的HTTP標頭?

具體來說,我正在運行一個跟蹤實例; http://getontracks.org如果它的事項

我(標準端口上的工作)的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; 
} 

回答

1

釷。更多的是在上游主機(Tracks)上運行的應用程序的問題,而不是Web服務器配置的問題(當然,除非您的上游Web服務器配置包含重寫規則)。不同的應用程序處理這些情況的方式不同:有些需要顯式配置參數,告訴他們應用程序可以到達的實際URL,有些使用某些HTTP標頭,有些使用其他HTTP標頭。

至於曲目是如果你添加相應的標籤你的問題,你可能最終得到更多的知識淵博的答案Rails應用程序。

+0

謝謝。我發現一些論壇帖子建議設置一個HTTP X-Forwarded-Port頭,即使這看起來更像是一個非標準的「非標準」頭。我嘗試在nginx配置中設置,但沒有運氣。正如你所說,無論如何,我認爲在上游主機上運行的應用程序需要注意並採取相應措施。 – kenen 2012-04-16 16:58:37

24

問題從線莖 -

proxy_set_header Host $host; 

反過來你的Web服務器(使用WEBrick)發出重定向響應時,包括這個。

您可以將其更改爲包括非標準端口 -

proxy_set_header Host $host:$server_port; 

這應該解決這個問題。

+0

非常好。這解決了我的問題,使用運行在nginx反向代理後面的瓶子應用程序嘗試生成正確的url incl。如[flask片段35](http://flask.pocoo.org/snippets/35/)中所描述的非星型端口,而不需要觸摸該片段。 – 2014-11-10 22:43:31