我在企业内部网上安装了Django,使用mod_wsgi在Apache上运行。 Apache服务器已经设置了SSL,当用户访问CGI页面时,一切都按预期工作,但我的django应用程序似乎没有获取任何与SSL相关的环境变量(ssl_client_s_dn等),无论它们是否转到我的django页面http://或https://。
我认为主要问题是我不明白django从哪里拉出它的os.environ,以及如何改变它。我查看了关于'django'和'ssl'的官方django文档和其他帖子,但这些似乎处理的视图有时需要http,有时候是https。我只是试图让ssl相关信息显示在os.environ中,我不知道下一步该在哪里。
你需要知道什么? httpd.conf wsgi配置设置?我的项目settings.py或wsgi.py中的行?
非常感谢任何帮助。
答案 0 :(得分:2)
如果你在Apache中使用mod_wsgi
,并在Apache中设置环境变量(使用SetEnv
),那么你就不走运了:mod_wsgi
的环境变量是分开的来自Apache的这些。
许多人遇到类似的问题,在使用SetEnv
在Apache中设置变量时,在尝试访问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
字典。有关详细信息,请参阅上面链接的帖子。