Django没有认识到与ssl相关的os.environ

时间:2012-08-15 14:34:12

标签: python django

我在企业内部网上安装了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中的行?

非常感谢任何帮助。

1 个答案:

答案 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字典。有关详细信息,请参阅上面链接的帖子。