0

我在公司 Intranet 上安装了 Django,使用 mod_wsgi 在 Apache 上运行。Apache 服务器设置了 SSL,当用户点击 CGI 页面时,一切都按预期工作,但是我的 django 应用程序似乎没有获取任何与 SSL 相关的环境变量(ssl_client_s_dn 等),无论它们是否使用我的 django 页面http:// 或 https://。

我认为主要问题是我不明白 django 从哪里提取 os.environ 以及如何改变它。我查看了官方 django 文档和其他关于“django”和“ssl”的帖子,但这些似乎处理的视图有时需要是 http,有时是 https。我只是想获得 ssl 相关信息以显示在 os.environ 中,我不知道下一步该往哪里看。

你需要了解什么?httpd.conf wsgi 配置设置?我的项目 settings.py 或 wsgi.py 中的行?

任何帮助深表感谢。

4

1 回答 1

2

如果您在 Apache 中使用mod_wsgi,并且在 Apache 中设置环境变量(使用SetEnv),那么您就不走运了:mod_wsgi的环境变量与 Apache 中的环境变量是分开的。

很多人都遇到了类似的问题,在 Apache 中设置变量时使用在 DjangoSetEnv中访问时完全不可见。os.environ

然而,有一些解决方案。它在此处列出,并且基本上出现在您的 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字典。有关详细信息,请参阅上面链接的帖子。

于 2012-08-15T14:38:29.733 回答