Подстановочные знаки 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

И так далее.

Это не только упростит ваши настройки, но и предоставит вам именно ту функциональность, которая вам требуется.

Другие вопросы по тегам