Apache 配置用于将心跳和代理传递到 ELB

Apache 配置用于将心跳和代理传递到 ELB

我在 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 之外)

相关内容