Мне нужно настроить apache, чтобы любой site.com/ЧТО-НИБУДЬ/ сервлет /ЧТО-НИБУДЬ переходит через ajp в tomcat, но обычные файлы по-прежнему будут проходить через apache.
Я возился с этим безрезультатно
<LocationMatch "./*/servlet/*">
Order Allow,Deny
Allow from all
ProxyPass ajp://localhost:8009/
ProxyPassReverse /
</LocationMatch>
Это работает, направляя все на нашу безопасность кота.
ProxyPass / ajp://localhost:8009/
редактировать: Я могу проверить правильность регулярного выражения, но он все еще не отправляет его на прокси-сервер ajp. Я также только что подтвердил, что ProxyPass / ajp: // localhost: 8009 / все еще работает, поэтому я знаю, что ajp хорош, и я знаю, что регулярное выражение хорошее, но почему оно все еще не работает: \
RewriteRule ^(.*)/servlet/(.*)$ ajp://localhost:8009/$1 [P]
Я обычно использую 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]
в конце - флаг, указывающий, что запрос должен быть проксирован, а не перенаправлен.
Для простоты используйте 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
И так далее.
Это не только упростит ваши конфигурации, но и предоставит вам точную функциональность, которая вам нужна.