2012-08-15 53 views
0

我有一個Django安裝在企業內部網上,使用mod_wsgi在Apache上運行。 Apache服務器設置了SSL,當用戶點擊CGI頁面時,一切都按預期工作,但是我的django應用程序似乎沒有選擇任何與SSL相關的環境變量(ssl_client_s_dn等),無論它們是否轉到我的django頁面http://或https://。Django不認識ssl相關os.environ

我認爲主要的問題是我不明白django從哪裏拉它的os.environ,以及如何改變它。我瀏覽過官方的django文檔和'django'和'ssl'上的其他帖子,但是這些看起來似乎需要處理有時需要http,有時需要https的視圖。我只是想獲得ssl相關信息,並在os.environ中顯示出來,而我不知道下一步要看哪裏。

你需要知道什麼? httpd.conf wsgi配置設置?我的項目settings.py或wsgi.py中的行?

任何幫助,非常感謝。

+0

您是否嘗試過'application()'函數的'environ'參數? – 2012-08-15 14:36:32

回答

2

如果您正在使用mod_wsgi內Apache和您(使用SetEnv)設置Apache中的環境變量,那麼你的運氣了:mod_wsgi的環境變量是從這些在Apache中分離。

許多人遇到類似的問題,當在Apache中使用SetEnv設置變量在嘗試訪問Django中的os.environ時完全不可見。

然而有一些解決方案。據上市here,基本上涉及到你的WSGI腳本這些行(調整到您的需要):

def application(environ, start_response): 
    os.environ['ssl_client_s_dn'] = environ['ssl_client_s_dn'] 
    return _application(environ, start_response) 

這基本上會將您的WSGI應用程序的第一個參數爲os.environ字典。有關詳情,請參閱上面鏈接的帖子。

+0

是的,那篇文章讓我走向正確的方向,謝謝Tadeck,Ignacio。 – Kafonek 2012-08-15 15:09:04