Отображение пользовательских страниц ошибок на разных VirtualHosts в Apache
У меня есть обратный прокси-сервер Apache, который перемещает запрос к сервлету Tomcat. Конфигурация на виртуальном хосте в Apache:
<VirtualHost 10.10.10.10:80>
ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1
ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1
</VirtualHost>
По сути, если речь идет о 10.10.10.10
и запросы /Site1/ServLet1
Направьте его в /Site1/ServLet1
,
если я добавлю
<VirtualHost 10.10.10.10:80>
ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1
ErrorDocument 404 /customerrors/site1/404.html
ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1
</VirtualHost>
так что он покажет пользовательскую ошибку для site1
(Я установил ErrorDocument), он будет подан обоим.
Как я могу иметь различную страницу ошибки 404 для сайта, поддерживающего такую конфигурацию?
Поблагодарить
Редактировать:
если я изменю конфигурацию, основываясь на комментариях ниже, например:
<Location /Site1/ServLet1/>
ProxyPass http://1.1.1.1/Site1/ServLet1
ProxyPassReverse http://1.1.1.1/Site1/ServLet1
ErrorDocument 404 /customerrors/site1/404.html
</Location>
Тогда я все еще могу добраться до http://1.1.1.1/Site1/ServLet1
но страница ошибок не отображается вообще
2 ответа
Я не уверен, что вы подразумеваете под "различными виртуальными хостами", поскольку они находятся в одном и том же... но я думаю, что вы захотите сделать что-то подобное (и рассмотреть возможность перемещения ProxyPass
заявления в <Location>
блоки тоже, если можно)
<VirtualHost 10.10.10.10:80>
ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
ProxyPassReverse /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
<Location /Site1>
ErrorDocument 404 /customerrors/site1/404.html
</Location>
ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
<Location /Site2>
ErrorDocument 404 /customerrors/site2/404.html
</Location>
</VirtualHost>
Редактировать:
Иметь Proxy
операторы находятся в блоках местоположения:
<VirtualHost 10.10.10.10:80>
<Location /Site1>
ErrorDocument 404 /customerrors/site1/404.html
</Location>
<Location /Site1/ServLet1>
ProxyPass http://1.1.1.1/Site1/ServLet1
ProxyPassReverse http://1.1.1.1/Site1/ServLet1
</Location>
<Location /Site2>
ErrorDocument 404 /customerrors/site2/404.html
</Location>
<Location /Site2/ServLet2>
ProxyPass http://2.2.2.2/Site2/ServLet2
ProxyPassReverse http://2.2.2.2/Site2/ServLet2
</Location>
</VirtualHost>
Сделайте так, чтобы у каждого vhost было свое собственное определение VirtualHost.
<VirtualHost 10.10.10.10:80>
Servername site1.tld
ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1
ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1
ErrorDocument 404 /customerrors/site2/404.html
</VirtualHost>
<VirtualHost 10.10.10.10:80>
ServerName site2.tld
ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2
ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1
ErrorDocument 404 /customerrors/site2/404.html
</VirtualHost>
Вам также необходимо убедиться, что у вас есть подходящее определение NameVirtualHost.