Апач проксировать запросы корень поддомена
Описание
Внутренний сервер Tomcat, на котором прослушиваются веб-приложения 8080:
"http://internal:8080/foo-webservice/"
"http://internal:8080/foo-website/"Внешний сервер Apache проксирует запросы для поддомена:
"http://foo.domain.com/"-
Любые запросы корня поддомена будут проксированы на веб-приложение foo-website на Tomcat.
-
Любые другие запросы будут перенаправляться по соответствующему пути / webapp
Случай Использования A
Запрос:
"http://foo.domain.com/index.html"Проксируется до:
"http://internal:8080/foo-website/index.html"
Пример Использования B
Request:
"http://foo.domain.com/webservice/listener.html?param1=foo¶m2=bar"Проксированный чтобы:
"http://internal:8080/foo-webservice/listener.HTML-код?param1=foo¶m2=bar"
Определение виртуального хоста
-
Текущее определение виртуального хоста, удовлетворяющее случаю использования B:
<VirtualHost *:80> ServerName foo.domain.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ErrorLog /var/log/apache2/foo_error.log LogLevel warn CustomLog /var/log/apache2/foo_access.log combined # RewriteRules # ? # ProxyPass ProxyPreserveHost On ProxyPass / http://internal:8080/ ProxyPassReverse / http://internal:8080/ </VirtualHost>
Попытка 1
# RewriteRules
RewriteEngine On
RewriteRule ^/(.*) http://internal:8080/foo-website/$1 [P]
- случай использования A удовлетворен
- случай использования B терпит неудачу
Попытка 2
# RewriteRules
RewriteEngine On
RewriteRule ^/$ http://internal:8080/foo-website/$1 [P]
- Вариант использования B удовлетворяется
- Вариант использования A не полностью удовлетворен
- индекс.формат html в foo-сайт загружается, но ни один из файлов в папках js, img или css.
3 ответа:
Правила ProxyPass совпадают по порядку
ProxyPass /webservice/ http://internal:8080/foo-webservice/ ProxyPassReverse /webservice/ http://internal:8080/foo-webservice/ ProxyPass /website/ http://internal:8080/foo-website/ ProxyPassReverse /website/ http://internal:8080/foo-website/ ProxyPass / http://internal:8080/foo-website/ ProxyPassReverse / http://internal:8080/foo-website/
Нет правила перезаписи. Разве этого недостаточно ?
Я думаю, что вам нужно использовать первую попытку, но включить флаг QSA (query string append) в квадратные скобки в конце каждой директивы
RewriteRule
.
Я думаю, что проблема с попыткой 2 (ни один из файлов в папках js, img или css не сопоставляется) была признаком того, что мой подход был неправильным.
Мое решение теперь состоит в том, чтобы перенаправлять любые запросы в корневой каталог, в веб-приложениеfoo-website .
<VirtualHost *:80> ServerName foo.domain.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ErrorLog /var/log/apache2/foo_error.log LogLevel warn CustomLog /var/log/apache2/foo_access.log combined # RewriteRules RewriteEngine On RewriteRule ^/$ /foo-website/ [R] # ProxyPass ProxyPreserveHost On ProxyPass / http://internal:8080/ ProxyPassReverse / http://internal:8080/ </VirtualHost>
Это было не то, что я изначально хотел, но я думаю, что это решение.