![如何将重写规则中的秘密传递给 AJP 协议](https://linux22.com/image/750989/%E5%A6%82%E4%BD%95%E5%B0%86%E9%87%8D%E5%86%99%E8%A7%84%E5%88%99%E4%B8%AD%E7%9A%84%E7%A7%98%E5%AF%86%E4%BC%A0%E9%80%92%E7%BB%99%20AJP%20%E5%8D%8F%E8%AE%AE.png)
我有一个运行 2.4.6 的 Apache 服务器,以及运行 lucee 的 Tomcat 8.5.33。
我们有代理到端口 8009 上的 AJP 的重写规则。
ProxyPassReverse / ajp://localhost:8009/ timeout=3600
RewriteEngine On
# Rewrite sitemap
RewriteRule ^/sitemap\.txt$ ajp://localhost:8009/sitemap/index.cfm?format=txt [P]
RewriteRule ^/sitemap\.xml$ ajp://localhost:8009/sitemap/index.cfm [P]
我需要实现这个秘密,并且能够在 server.xml 中毫无问题地进行设置,但是很难找出如何通过重写规则传递这个秘密???
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" maxThreads="400" requiredSecret="PasswordGoesHere!" />
有人知道我如何传递这个秘密吗?
谢谢格兰特
答案1
不幸的是,答案是:你不能,除非你升级到某个支持 mod_proxy_ajp 中的秘密标志的 Apache2 更高版本,即使那样,我也不太明白如何使用 RewriteRule 传递标志。
我有一些机器安装了 Debian 9、Apache2 2.4.25-3+deb9u9 和 Tomcat8 8.5.54-0+deb9u。Debian 错误列表中有一个缺陷(请参阅https://www.mail-archive.com/[电子邮件保护]/msg561495.html),但是由于它按预期工作,所以它被关闭了 - 他们不会将补丁反向移植到 2.4.25,因此使用 2.4.6,你肯定无法让这个组合与秘密集合一起工作。
解决该问题的唯一方法是在 Tomcat 的 server.xml 的连接器配置中设置 secretRequired="false"。
答案2
使用 mod_proxy_ajp (参见https://httpd.apache.org/docs/trunk/mod/mod_proxy_ajp.html)您只需将“?secret=XXX”添加到 ProxyPass 指令的重写路径中。我从未使用过重写规则来处理 Tomcat。
警告:?secret 0x0C 字符串自 2.4.42 起受支持