如何确定我的mod_wsgi应用程序是否在HTTPS上运行?

时间:2013-02-24 07:06:27

标签: python https apache2 mod-wsgi

我刚刚继承了一个在Apache 2.4,mod_wsgi 3.4和Python 2.7下运行的Python应用程序。同一个应用程序同时提供HTTP和HTTPS请求。

在现有代码中,它试图通过检查环境来确定请求是否为HTTPS:

if context.environ.get('HTTPS') not in ['on', '1']:

即使连接实际上是HTTPS,此检查也会失败。在查看显示环境变量的扩展回溯时,我看到HTTPS实际上并不在从Apache传递的环境中。

所以我的问题是:

  • 这是Apache配置问题吗?
  • 此检查是否完全错误,应该重写以检查其他内容?如果是的话,是什么?
  • 或者我应该放弃并用nginx替换Apache,就像我真的想做的那样?

2 个答案:

答案 0 :(得分:3)

Apache mod_ssl可以配置为设置HTTPS环境变量,但doesn't do so by default出于性能原因。

您可以明确启用它,但由于您使用的是WSGI应用程序,因此检查wsgi.url_scheme环境变量可能更好。 WSGI规范保证了它的存在,如果你最终转移到nginx,它不会要求对你的应用程序进行任何进一步的更改。

答案 1 :(得分:0)

当使用CGI,WSGI或SSI时,您需要建议Apache发送HTTPS标题,否则它将是空的。您可以使用配置中的mod_env或.htaccess

执行此操作
<IfModule mod_env.c>
   SetEnv HTTPS on
</IfModule>