我正在使用 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 指令中使用环境变量的任何想法?