2016-12-31 22 views
0

我有一個cherrypy webapp,它託管在一個帶有ssl的nginx反向代理之後。Cherrypy應用程序重定向到http而不是https後面nginx

nginx的位置被設置爲這樣的:當我加載了https://myaddress.com/webapp

location /webapp { 
     proxy_pass http://127.0.0.1:8642; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 

一切正常。頁面加載正常。

但是當我點擊任何鏈接時,它會打開http://myaddress.com/webapp/page,它不會在使用ssl後面加載nginx時加載。

的鏈接是一個簡單的

<a href='/webapp/page'>Page</a> 

我可以手動打開https://myaddress.com/webapp/page它加載的罰款。

我想不通爲什麼瀏覽器在踢它到http://,而不是停留在https://開頭

編輯:

我想通了這一點(種)一段時間之前和忘了這篇文章。

將主要方法名稱從index()更改爲default()已修復此問題。我無法弄清楚爲什麼,我在CherryPy文檔中找不到任何內容。

因此,當去mysite.com/news Cherrypy現在返回News.default()而不是News.index(),並且這不會更改URI。

+0

你有沒有檢查'Page'是否真的進入瀏覽器?你有任何JS點擊處理程序,這可能會改變這種行爲?你使用的是什麼瀏覽器? – webKnjaZ

+0

這發生在Chrome和Firefox上。我沒有測試過其他人。 沒有JavaScript處理鏈接。 我發現將cherrypy中的方法名稱從index()更改爲default()並不會將目標更改爲http,但是當我執行HTTPRedirect()時,會將其發送到http://而不是https: // – user1220109

+0

哦..我明白了。問題是cherrypy正在聽HTTP,並不知道有關nginx的任何信息。如果在提升'HTTPRedirect'時使用相對URI,它會嘗試使用可用信息構建完整的URL。或者,您可以使用'cherrypy.url()'函數自己生成一個絕對URL。 – webKnjaZ

回答

1

您是否啓用反向代理工具?

您可以通過添加到您的配置文件,這樣做的:

tool.proxy.on = True

或裝飾。的該工具的功能

@cherrypy.tools.proxy

部分是通過調節從協議到httphttps調整應用基礎。

+0

我不確定這會有幫助。需要測試。它在過去並沒有提供給我正確的FQDN。 – webKnjaZ

相關問題