Заголовки mod_proxy_ajp и Location - PullRequest
0 голосов
/ 29 июня 2010

Недавно мне пришлось установить приложение Java для клиента, использующего Tomcat6. Приложение должно было запускаться из корня их домена, поэтому я также установил apache2 и mod_proxy_ajp, чтобы настроить прокси-сервер для этой работы. После небольшого массажа и поиска в Google, чтобы иметь дело с Заголовками Местоположения, включая оригинальный путь сервлетов, а не корня прокси. Я придумал это.

<VirtualHost *:80>
        ServerName myclientssite.com
        ErrorLog /var/log/apache2/ajp.error.log
        CustomLog /var/log/apache2/ajp.log combined

        <Proxy *>
                AddDefaultCharset Off
                Order deny,allow
                Allow from all
        </Proxy>

        ProxyRequests Off
        ProxyPass / ajp://localhost:8009/appname/
        ProxyPassReverse / http://localhost:8080/appname/
        ProxyPassReverseCookiePath /appname/ /

        Header edit Location ^([^/]*//[^/]*)?/appname/(.*)$ $1/$2
</VirtualHost>

Мой вопрос: это лучшее решение? Похоже, что без mod_headers и строки редактирования заголовка, заголовки обычно включают подкаталог appname.

1 Ответ

0 голосов
/ 29 июня 2010

Создает ли Java-приложение свои Location заголовки из информации в запросе (а не из какой-то явной конфигурации)?В этом случае он должен получить правильное расположение, если вы используете ProxyPreserveHost On.

. В случае, когда вам нужно изменить заголовок, это если ваш внешний интерфейс Apache Httpd использует HTTPS и соединение с Apache Httpdк контейнеру Java более простой HTTP или AJP.Не то чтобы в теории (и это не всегда так на практике) заголовок Location требует абсолютного URI , поэтому вам может не понадобиться такое сложное выражение, если вы уже знаете имя хоста.

Я бы также предложил использовать обратный прокси-сервер HTTP, а не AJP (в конце концов он довольно похож, но, похоже, имеет большую поддержку).

ProxyRequests Off
ProxyPass /appname/ http://localhost:8080/appname/
ProxyPassReverse /appname/ http://localhost:8080/appname/
ProxyPreserveHost On

# If you're using HTTPS
Header edit Location ^http://www.example/appname/ https://www.example/appname/
...