我需要设置Apache,以便任何site.com/ ANYTHING / servlet / ANYTHING都能通过ajp进入tomcat,但是普通文件仍然会通过apache。
我一直在搞这个无济于事
<LocationMatch "./*/servlet/*"> Order Allow,Deny Allow from all ProxyPass ajp://localhost:8009/ ProxyPassReverse / </LocationMatch>
这在将所有内容引导到我们的tomcat insance中起作用。
ProxyPass / ajp://localhost:8009/
编辑 :我可以validation正则expression式是正确的,但它仍然没有发送到代理ajp。 我也只是重新validation了ProxyPass / ajp:// localhost:8009 /仍然有效,所以我知道ajp是好的,我知道正则expression式是好的,但为什么它仍然不工作:\
RewriteRule ^(.*)/servlet/(.*)$ ajp://localhost:8009/$1 [P]
我倾向于将mod_rewrite用于这样的事情,这允许您将正则expression式应用于传入的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]是一个标志,表示请求被代理,而不是redirect。
为了简单起见,使用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
等等。
这不仅可以简化您的configuration,还可以为您提供所需的确切function。