我在 AWS 的 Linux 上使用 ELB 运行 Apache 2.2.15。
我的目标是提供两个功能:
1)我的 ELB 的心跳页面,用于检查 Apache 是否正在运行(/healthcheck.html)
2)对于所有其他请求,通过 ProxyPass 发送到下一层中的 ELB
我在 /var/www/html 中放置了一个名为 healthcheck.html 的简单 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>
答案1
您可以在 locationmatch 块中使用负向前瞻来代理除 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 应该位于 locationmatch 之外)