我有一个 Apache 实例和两个 Tomcat 实例。Apache 是面向公众的https://public_url/app1和https://public_url/app2并应将每个上下文传递给相应的 Tomcat 实例。
其中一个 Tomcat 实例没有上下文,即https://ip 地址:端口我无法使用 AJP13 或 HTTP/S 正确地让流量代理。
<Location /app1>
ProxyPass ajp://127.0.0.1:8009/app1 nocanon
ProxyPassReverse ajp://127.0.0.1:8009/app1
</Location>
<Location /app2>
ProxyPass ajp://127.0.0.2:8009/ nocanon
ProxyPassReverse ajp://127.0.0.2:8009/
</Location>
在上述情况下,app1 可以工作,但 app2 不能,因为它删除了 app2 公共上下文,即直接访问后端将https://url/login/login所以我希望它应该出现https://public_url/app2/login/login但 404 却https://public_url/login/login
我尝试用 mod_jk 替换上述 app2 规则,因为它支持更复杂的场景,但并没有取得更好的成功。
worker.list=app2_ajp
worker.app2_ajp.port=8009
worker.app2_ajp.host=127.0.0.2
worker.app2_ajp.type=ajp13
LoadModule jk_module modules/mod_jk.so
JKWorkersFile /etc/httpd/conf.d/workers.properties
JkLogFile /var/log/httpd/mod_jk_log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardURICompatUnparsed +ForwardKeySize +ForwardURICompat +ForwardDirectories
JKMountCopy All
JKMount /app2 app2_ajp
JKMount /app2/* app2_ajp
是否可以通过 AJP13 代理到 Tomcat 实例而无需上下文?我在 AJP13 的配置中哪里出错了,或者有没有使用 HTTPS 代理的方法?