2013-12-22 70 views
0

我在nginx後面運行CherryPy並需要處理重定向。在我的開發機器上運行127.0.0.1:8080,這將正確重定向到127.0.0.1:8080/login。cherrypy.HTTPRedirect使用abs路徑重定向到IP而不是主機名

但是,當通過cherrypy.mydomain.com(端口80)上的nginx運行時,重定向仍將轉到127.0.0.1:8080/login而不是cherrypy.mydomain.com/login。 127.0.0.1:8080是應用程序的正確本地地址,但nginx中的應用程序服務器設置爲偵聽端口80,並向127.0.0.1:8080上的本地cherrypy服務器發送管道請求,但不應直接公開此內容。

相關的代碼行中我的應用程序是:

身份驗證失敗:

raise cherrypy.HTTPRedirect("/login") 

,並在我的控制器:

cherrypy.config.update({ 
    'tools.encode.on': True, 'tools.encode.encoding': 'utf-8', 
    'tools.decode.on': True, 
    'tools.trailing_slash.on': True, 
    'server.socket_host' : '127.0.0.1', 
    'server.socket_port' : 8080, 
}) 

我在想,如果有額外的CherryPy配置項服務器/主機名稱以及套接字主機,但我正努力在Docs中找到它。

本質上,我需要的僅僅是cherrypy重定向到cherrypy.mydomain.com主機名而不是內部IP。

謝謝!

回答

3

嘗試tools.proxy配置設置:

'tools.proxy.on': True, 

此外,您可能需要

'tools.proxy.local': 'X-Forwarded-Host', 

設置到適當的頭。當使用NGINX,頭會

'tools.proxy.local': 'Host', 

情況下,Lighttpd的這頭將是適當的:

'tools.proxy.local': 'X-Host' 
+0

我使用你的''tools.proxy.on'來實現這個工作:True,'與'tools.proxy.base'結合使用:'cherrypy.mydomain.com','。 tools.proxy.local似乎沒有做到這一點(無論是由我的錯誤還是紅鯡魚,我不知道!謝謝你的回答:) –

+0

事實上,你的解決方案是完整的。問題是標題不正確(正如你所提到的)。我錯誤地提到了Apache文檔(習慣的力量)。 nginx頭部是「主機」。我已經更新了您的答案以反映nginx特定的標題。謝謝:) –

+0

我收到了關於評論的電子郵件通知,但現在我無法在此處看到它。不知道它是否被刪除?無論如何,我的問題是:爲什麼你會使用uWSGI而不是CherryPy的內置WSGI兼容服務器? –

0

我不能評論添加到https://stackoverflow.com/a/20730038/1115187,但我知道,Lighttpd發送X-Host標題,所以對於Lighttpd代理使用:

'tools.proxy.local': 'X-Host' 
+1

如何獲得+2代表:對帖子進行建議修改。然後你可以正確評論。 – Mogsdad

+0

謝謝,@Mogsdad,編輯完成)) – maxkoryukov

+0

Tada。你現在可以刪除它。 – Mogsdad

相關問題