0

我刚刚继承了一个在 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?
4

2 回答 2

3

Apachemod_ssl可以配置为设置HTTPS环境变量,但出于性能原因,默认情况下不这样做。

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

于 2013-02-24T08:02:19.217 回答
0

使用 CGI、WSGI 或 SSI 时,您需要建议 Apache 发送HTTPS标头,否则它将为空。您可以使用配置中的mod_env或 .htaccess执行此操作

<IfModule mod_env.c>
   SetEnv HTTPS on
</IfModule>
于 2013-02-24T07:58:08.220 回答