我已成功在 Apache 上安装了反向代理。它运行良好。我使用它将 https 请求代理到 http。我的问题是我需要将变量 SERVER_HTTPS 转发到我的终端服务器,以指示用户是使用 ssl 连接还是仅使用 http。我找到了一种方法:我可以转发 HTTP_X_FORWARDED_PROTO 变量并检查终端服务器:
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';
但是这个变体对我来说并不好,因为我无法编辑终端服务器脚本。可以说我甚至无法访问它。但我知道如何检查它是否被转发。所以,一般来说我的问题是:有什么方法可以转发这个变量吗?我见过另一个变体,带有重写引擎,但它对我不起作用,也没有详细信息。也许如果我将我的服务器设置为 Nginx + apache,这会发送这个标头变量?
答案1
问题在于变量描述了接收请求的服务器的环境。当连接到后端 HTTP 服务器时,它将设置自己的变量来描述自己的环境。您无法强迫服务器更改其自身对其所处环境的描述;您能做的最好的事情就是转发一个标头,服务器可以选择使用该标头来更改自己的环境。
我不清楚您是否有权访问后端服务器配置。如果可以,您可能能够在那里使用SetEnv
或SetEnvIf
指令。以下是一些文档apache.org 上的 mod_env 页面。