Я запускаю Apache 2.2.15 на Linux в AWS с использованием ELB.
Моя цель - предоставить две функции:
1) Страница Heartbeat для моего ELB, чтобы проверить, работает ли Apache (/healthcheck.html)
2) Все остальные запросы отправляйте в ELB следующего уровня через ProxyPass.
Я поместил простой html-файл в / var / www / html с именем healthcheck.html.
Вот мой конфиг:
<VirtualHost *:80>
<Directory "/var/www/html">
allow from all
</Directory>
ProxyRequests Off
ProxyPass / http://bigassawsdomainname.com:80/
ProxyPassReverse / http://bigassawsdomainname.com:80/
ProxyPreserveHost On
</VirtualHost>
Функциональность прокси-сервера, похоже, работает нормально. Однако при нажатии localhost / healthcheck.html возвращается 404.
Я совершенно уверен, что моя конфигурация настроена неправильно. Как мне это настроить? Я безуспешно экспериментировал с местоположением и каталогом.
Обновить:
Решение:
NameVirtualHost *:80
<VirtualHost *:80>
ProxyRequests Off
<LocationMatch "^(?!/healthcheck.html)">
ProxyPassMatch http://bigassawsdomainname.com:80/
</LocationMatch>
ProxyPassReverse / http://bigassawsdomainname.com:80/
ProxyPreserveHost On
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html
<LocationMatch /healthcheck.html>
RewriteEngine On
RewriteRule ^/$ /healthcheck.html [L]
</LocationMatch>
</VirtualHost>
Вы можете использовать отрицательный просмотр вперед в блоке сопоставления местоположения, чтобы проксировать все, кроме healthcheck.html:
https://stackoverflow.com/questions/8545680/how-to-tell-apache-to-locationmatch-opposite-of-this
<LocationMatch "^(?!/healthcheck.html)">
ProxyPassMatch http://bigassawsdomainname.com:80/
</LocationMatch>
(proxypassreverse должен находиться за пределами соответствия местоположения)