我有一组调试脚本,其中/var/www
显示有用的信息,有助于调查服务器上的问题,但相同的信息可能很敏感,所以我不希望公开它。
是DocumentRoot
,/var/www/
看起来像这样:
$ ls -1 /var/www/
apc.php
index.php
linux-dash
opcache.php
phpinfo.php
为了保护这些信息的安全,我尝试将 apache 配置为仅接受来自我的 IP 地址(为了本示例的目的,该 IP 地址为192.168.33.1
)的请求。
复杂的是,无论请求来自哪个 IP,我都希望以 200 进行响应www.example.com
。www.example.com/index.php
我的status.conf
虚拟主机配置目前如下所示:
ServerName www.example.com
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www
<Directory /var/www>
Options FollowSymLinks
AllowOverride All
Require ip 192.168.33.1
</Directory>
<LocationMatch ^/(index.php)?$>
Require all granted
</LocationMatch>
<Location /server-status>
SetHandler server-status
</Location>
</VirtualHost>
这部分是有效的,因为它允许使用 来响应来自任何请求 IP 地址的200
请求,但是它错误地使用 来响应所有其他请求,即使是从白名单 IP 地址发出的请求:www.example.com
www.example.com/index.php
403
$ curl -I -H 'Host: www.example.com' 192.168.33.10
HTTP/1.1 200 OK
$ curl -I -H 'Host: www.example.com' 192.168.33.10/index.php
HTTP/1.1 200 OK
$ curl -I -H 'Host: www.example.com' 192.168.33.10/phpinfo.php
HTTP/1.1 403 Forbidden
$ curl -I -H 'Host: www.example.com' 192.168.33.10/opcache.php
HTTP/1.1 403 Forbidden
$ curl -I -H 'Host: www.example.com' 192.168.33.10/server-status
HTTP/1.1 403 Forbidden
从access.log
:
192.168.33.1 - - [15/Jun/2015:09:59:13 +0000] "HEAD / HTTP/1.1" 200 148 "-" "curl/7.37.1"
192.168.33.1 - - [15/Jun/2015:09:59:32 +0000] "HEAD /index.php HTTP/1.1" 200 148 "-" "curl/7.37.1"
192.168.33.1 - - [15/Jun/2015:09:59:47 +0000] "HEAD /phpinfo.php HTTP/1.1" 403 139 "-" "curl/7.37.1"
192.168.33.1 - - [15/Jun/2015:10:00:03 +0000] "HEAD /opcache.php HTTP/1.1" 403 139 "-" "curl/7.37.1"
192.168.33.1 - - [15/Jun/2015:10:00:22 +0000] "HEAD /server-status HTTP/1.1" 403 139 "-" "curl/7.37.1"
为了实现所需的行为,我需要对 Apache 配置进行哪些更改?
答案1
您的配置看起来不错 - 如果配置更改尚未生效,请尝试重新加载 Apache。
答案2
这是因为您插入的LocationMatch
只是为了index.php
。LocationMatch
可以像正则表达式一样定义,因此您可以尝试为所需的所有文件添加正则表达式。
类似于:
<LocationMatch ^/(index.php|phpinfo.php|opcache.php)?$>
Require all granted
</LocationMatch>