gpt4 book ai didi

apache - 如何使用 mod_rewrite 中的环境变量在 httpd.conf 中插入 proxypass

转载 作者:行者123 更新时间:2023-12-04 10:40:15 27 4
gpt4 key购买 nike

我正在使用 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 的功能。

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

最佳答案

事实证明,即使有警告,Apache 仍然可以加载并正常工作,使用以下语法:
ProxyPassReverse / ajp://${SERVER_NAME}:8009/ interpolate
此问题已在 this mailing list thread 中确定。讨论是关于另一个问题,但他们提到了这个问题,并讨论了向 ProxyPass 等添加第二个插值语法的想法。但是,我还没有找到错误报告,而且似乎从 Apache 2.4.10 开始,mod_proxy code 仍然存在仅支持 ${varname} 语法,这与整体 httpd.conf 插值冲突。

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

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

关于apache - 如何使用 mod_rewrite 中的环境变量在 httpd.conf 中插入 proxypass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19669465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com