Назад | Перейти на главную страницу

Обратный прокси-сервер Apache с VirtualHost не обслуживает страницу

У меня установлен обратный прокси-сервер Apache для перемещения запросов в апплет Tomcat. Конфиг похож на:

<VirtualHost 100.100.100.100:80>
    ProxyPass /AppName/App http://1.1.1.1/AppName/App
    ProxyPassReverse /AppName/App http://1.1.1.1/AppName/App
</VirtualHost>

У меня также есть страница под названием summary.html что существует на 1.1.1.1 так как:

http://1.1.1.1/AppName/summary.html

Когда я просматриваю его напрямую, у меня нет проблем с его просмотром, однако, если я пытаюсь попасть туда через обратный прокси-сервер, я получаю пустую страницу. Wireshark показывает мне 503, но этот исходит от обратного прокси-сервера Apache (IP 100.100.100.100), а не Tomcat (IP 1.1.1.1).

Я должен добавить http://1.1.1.1/AppName/ в конфиг? Как? Я пробовал, но получаю пустую страницу, однако на этой странице в строке URL-адреса браузера отображается внутренний IP-адрес Tomcat, так что ничего страшного.

Помощь приветствуется.

Спасибо.

РЕДАКТИРОВАТЬ: это дамп из Wireshark:

GET /AppName/ HTTP/1.1
Host: 100.100.100.100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Cache-Control: max-age=0
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive

HTTP/1.1 404 Not Found
Date: Tue, 30 Jan 2012 09:08:51 GMT
Server: Apache
Content-Length: 1
Connection: close
Content-Type: text/html; charset=iso-8859-1

Я подозреваю, что вы забыли "ProxyPreserveHost On".

Без этой директивы ваше приложение связывается с HTTP-заголовком «Host: 1.1.1.1», тогда как при прямом просмотре оно будет видеть «Host: the.domain.com».

Вместо этого я бы использовал правило перезаписи.

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule

пытаться:

<VirtualHost 100.100.100.100:80>
    RewriteRule ^/AppName/(.*) http://1.1.1.1/AppName$1 [P]
</VirtualHost>

Добавление этого должно работать нормально:

<VirtualHost 100.100.100.100:80>
    ProxyPass /AppName/ http://1.1.1.1/AppName/
    ProxyPassReverse /AppName/ http://1.1.1.1/AppName/
</VirtualHost>

Или даже:

<VirtualHost 100.100.100.100:80>
    ProxyPass /AppName/summary.html http://1.1.1.1/AppName/summary.html
    ProxyPassReverse /AppName/summary.html http://1.1.1.1/AppName/summary.html
    ProxyPass /AppName/App http://1.1.1.1/AppName/App
    ProxyPassReverse /AppName/App http://1.1.1.1/AppName/App
</VirtualHost>

Не могли бы вы прояснить, какая проблема возникает, когда у вас есть такая конфигурация? Я не совсем понимаю, что вы имеете в виду, говоря «этот показывает в строке URL браузера внутренний IP-адрес Tomcat».