4

我正在使用 apache 2.4 并尝试在 conf 文件中使用环境变量进行代理传递。有一个线程[ Apache proxypass using a variable URL with interpolate ]谈论这个:

RewriteEngine on
RewriteMap lowercase int:tolower

#This sets the variable to env:
RewriteRule ^ - [E=SERVER_NAME:${lowercase:%{SERVER_NAME}}]

#Now interpolate makes variables available for proxypass & proxypassreverse:
ProxyPassInterpolateEnv On
ProxyPass / ajp://${SERVER_NAME}:8009/ interpolate
ProxyPassReverse / ajp://${SERVER_NAME}:8009/ interpolate

但是当我自己尝试时,我收到“AH00111:未定义配置变量 ${SERVER_NAME}”错误。这意味着 Apache2.4 将 ${SERVER_NAME} 视为配置变量,而不是环境变量。

我还尝试对变量使用 mod_rewrite 语法,像这样,

ProxyPass / ajp://%{ENV:SERVER_NAME}:8009/ interpolate
ProxyPassReverse / ajp://%{ENV:SERVER_NAME}:8009/ interpolate

但是 %{ENV:SERVER_NAME} 被视为纯文本字符串,并创建了一个错误,因为它不是有效的 URL 传递。

配置变量在服务器启动时使用“定义”块定义。我想要的是使用 mod_rewrite 在运行时更改 SERVER_NAME。我不能使用 mod_rewrite [P] 参数,因为我还需要让 ProxyPassReverse 块与变量一起使用。mod_rewrite 无法处理重写响应,因此无法模仿 ProxyPassReverse 的功能。

关于如何在 interpolate proxypass conf 指令中使用环境变量的任何想法?

4

1 回答 1

2

事实证明,即使有警告,Apache 仍然可以加载并正常工作,使用以下语法:

ProxyPassReverse / ajp://${SERVER_NAME}:8009/ interpolate

此邮件列表线程中发现了此问题。讨论是关于另一个问题,但他们提到了这个问题,并讨论了向 ProxyPass 等添加第二个插值语法的想法。但是,我还没有找到错误报告,似乎从 Apache 2.4.10 开始,mod_proxy 代码仍然只支持${varname}语法,这与整体 httpd.conf 插值冲突。

我还没有找到禁用这些特定警告的方法,但是如果您愿意忍受这些警告,Apache 应该仍然为您工作。

一个警告是,如果在加载 Apache 时存在同名的系统环境变量,它将覆盖您在运行时尝试插入的值。

于 2014-08-21T14:08:28.550 回答