我在 AWS 应用程序负载均衡器后面有一个 EC2 实例,运行 apache 2.4
健康检查配置为对 /health/ 执行 GET
我已经配置了虚拟主机和两个 vhost 条目 - 一个带有服务器名称,另一个用于直接处理传入到 IP 地址的请求。aaa_first 应该首先加载,因此是默认设置。
但是,当我直接访问实例的公共 IP 时,我得到默认的 apache 欢迎页面,并且健康检查得到 403:
"GET /health/ HTTP/1.1" 403 199 "-" "ELB-HealthChecker/2.0"
aaa_first.conf 包含:
<VirtualHost *:80>
ServerName aaa
<Location /var/www/html>
Require all denied
</Location>
<Location /var/www/html/health>
Require ip 10.151.0.0/20
Require all denied
</Location>
CustomLog logs/0000_access.log combined-elb-host
</VirtualHost>
default.conf 包含:
<VirtualHost *:80>
ServerName host.example.com
DocumentRoot /var/www/html
DirectoryIndex index.html
ErrorLog logs/error.log
CustomLog logs/access.log combined-elb-host
<Directory "/var/www/html">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
除了来自 ELB 的健康检查之外,我还需要做什么来确保对 IP 的请求被阻止?
答案1
更改<Location /var/www/html/health>
为<Location /health>
.Location
匹配 URL 而不是文件系统路径。从文档:
该指令通过 URL 限制了所包含指令的范围...部分完全在文件系统之外运行。这会带来多种后果。最重要的是,不应使用指令来控制对文件系统位置的访问。