如何判断我的mod_wsgi应用是否在HTTPS上运行?
我刚接手一个Python应用,它是在Apache 2.4、mod_wsgi 3.4和Python 2.7下运行的。这个应用同时处理HTTP和HTTPS请求。
在现有的代码中,它试图通过检查环境变量来判断请求是否是HTTPS:
if context.environ.get('HTTPS') not in ['on', '1']:
这个检查失败了,即使连接实际上是HTTPS。查看详细的错误追踪信息后,我发现HTTPS
并没有出现在Apache传递过来的环境变量中。
所以我有几个问题:
- 这是Apache的配置问题吗?
- 这个检查完全错误吗?应该改成检查其他东西吗?如果是的话,应该检查什么?
- 还是我应该放弃,像我想的那样换成nginx?
2 个回答
0
当你使用CGI、WSGI或SSI的时候,你需要告诉Apache服务器发送HTTPS
这个头信息,否则它会是空的。你可以通过在配置文件或者.htaccess文件中使用mod_env来做到这一点。
<IfModule mod_env.c>
SetEnv HTTPS on
</IfModule>
3
Apache的mod_ssl
可以设置HTTPS
这个环境变量,但出于性能考虑,默认情况下并不会这样做。
你可以手动开启这个功能,但如果你在使用WSGI应用,检查一下wsgi.url_scheme
这个环境变量可能更好;因为WSGI规范保证这个变量一定存在,而且如果你将来换成nginx,也不需要对你的应用做额外的修改。