我需要设置 apache,以便任何 site.com/任何事物/servlet/任何事物通过 ajp 进入 tomcat,但是常规文件仍然会通过 apache。
我一直在努力解决这个问题,但毫无成果
<LocationMatch "./*/servlet/*">
Order Allow,Deny
Allow from all
ProxyPass ajp://localhost:8009/
ProxyPassReverse /
</LocationMatch>
这有助于将所有内容导向我们的 tomcat 实例。
ProxyPass / ajp://localhost:8009/
编辑:我可以验证正则表达式是否正确,但它仍然没有将其发送到代理 ajp。我还重新验证了 ProxyPass / ajp://localhost:8009/ 仍然有效,所以我知道 ajp 很好,我也知道正则表达式很好,但为什么它仍然不起作用:\
RewriteRule ^(.*)/servlet/(.*)$ ajp://localhost:8009/$1 [P]
答案1
我倾向于使用mod_rewrite
类似这样的方法,它允许你将正则表达式应用于传入的 URI。例如:
RewriteRule ^/((kaptcha|barcode)/view/(.*))$ ajp://0.0.0.0:9019/media-webapp/$1 [P]
这代理/kaptcha/view/nnnn
到ajp://0.0.0.0:9019/media-webapp/kaptcha/view/nnnn
。[P]
末尾的是一个标志,表示请求将被代理,而不是重定向。
答案2
为了简单起见,使用mod_jk
。它允许您“挂载”特定目录,以便您将获得类似以下内容:
LoadModule jk_module modules/mod_jk.so
<IfModule mod_jk.c>
JKMount /some_context/* ajp13
JKMount /another_context/* ajp13
</IfModule>
Alias /images /some/directory/served_by_apache
等等。
这不仅可以简化您的配置,还可以为您提供所需的精确功能。