Apache-2.4 服务器监听两个端口 80 和 81。
根据请求进入的端口设置环境变量的最简单方法是什么?特别是,如果使用端口 81,我想设置 HTTPS=on。
以下两种方法均无效:
SetEnvIf SERVER_PORT 81 HTTPS=on
SetEnvIf %{SERVER_PORT} 81 HTTPS=on
这文档指定环境变量可以使用,但前提是它们与请求相关联(例如使用 SetEnv 设置)。SERVER_PORT 似乎不起作用。或者也许我没有使用正确的语法。
最后,经过大量的谷歌搜索,我发现可以使用 mod_rewrite:
RewriteEngine On
RewriteCond %{SERVER_PORT} 81
RewriteRule ".*" "-" [E=HTTPS:on]
但是使用 mod_rewrite 似乎有点过头了。有没有更简单的解决方案?
编辑:我为什么需要这个:
我们的 Apache 位于终止 HTTPS 的防火墙后面。所有 HTTP 流量都转发到 Apache 的端口 80。HTTPS 流量以纯 HTTP 形式转发到端口 81。防火墙无法添加任何自定义 HTTP 标头(如 X-Forwarded-Proto)。因此,确定是否使用 HTTPS 的唯一方法是检测连接来自哪个端口。