2011-09-13 100 views
20

我們已經有了一些Django設置,它們通過代理(Apache和Nginx),最終實現了實際的Django運行時。在https上運行gunicorn?

即使它在我們的網絡中,我們也需要端到端的HTTPS。由於我們在其他設置中的成功和性能,我們一直在重新審視Gunicorn,但需要使用HTTPS進行端到端測試以保持一致。

我們的拓撲結構是這樣的:

https://foo.com - > [面向公衆的代理] - >(HTTPS) - > [內部服務器https://192...:8001]

一個人如何配置Gunicorn對HTTPS聽用自簽名證書?

回答

10

大量遲到的回覆,但對於任何其他人遇到此問題,還有另一種選擇使用nginx作爲上面的「[公共代理代理]」。

配置nginx以處理端口443上的傳入SSL流量,然後proxy_pass對內部端口上的gunicorn進行處理。外部流量是加密的,nginx和gunicorn之間的流量不會暴露。我覺得這很容易管理。

+0

你怎麼知道它沒有暴露? –

+1

由於您將gunicorn綁定到127.0.0.1,因此只有本地主機才能訪問它 – mafrosis

48

Gunicorn現在支持SSL,as of version 17.0。你可以配置它來監聽這樣的https:

$ gunicorn --certfile=server.crt --keyfile=server.key test:app 

如果您正在使用--bind爲偵聽端口80,記得要改變端口443(用於HTTPS連接的默認端口)。例如:

$ gunicorn --certfile=server.crt --keyfile=server.key --bind 0.0.0.0:443 test:app 
+1

您可以在相關文檔中指出我如何執行此操作?我正在部署heroku,所以我不確定我的「server.crt」是什麼。 –

+1

@DrewV如果您在heroku上部署,則無需自己支持SSL - heroku會爲您提供支持。請參閱[他們的文檔](https://devcenter.heroku.com/articles/ssl-endpoint)尋求幫助。您將需要配置gunicorn以履行heroku的安全標頭配置。我在配置文件中使用類似這樣的東西: 'forwarded_allow_ips ='*'' 和 'secure_scheme_headers = {'X-FORWARDED-PROTO':'https',}' – GregM

+0

'test:app'部分是什麼最後? – Mikeumus