Подстановочные знаки proxy_ajp
Мне нужно настроить apache так, чтобы любой site.com/NYTHING / servlet / ANYTHING перешёл 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]
2 ответа
Я склонен использовать 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
И так далее.
Это не только упростит ваши настройки, но и предоставит вам именно ту функциональность, которая вам требуется.