我在/var/www中有一组debugging脚本,它们显示有用的信息,有助于调查服务器上的问题,但同样的信息可能是敏感的,所以我不希望它公开。
DocumentRoot是/var/www/ ,看起来像这样:
$ ls -1 /var/www/ apc.php index.php linux-dash opcache.php phpinfo.php
为了保证这个信息,我试图configurationApache只接受来自我的IP地址(为了这个例子是192.168.33.1 )的请求。
复杂的是,我希望www.example.com和www.example.com/index.php请求以200响应,而不pipe它们来自哪个IP。
我的status.conf虚拟主机configuration目前看起来像这样:
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>
这是部分工作,因为它允许响应一个200请求www.example.com和www.example.com/index.php从任何请求的IP地址,但它是不正确的响应与403所有其他请求即使请求来自列入白名单的IP地址:
$ 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"
为了达到所需的行为,我需要对我的Apacheconfiguration做些什么改变?
你的configuration看起来不错 – 尝试重新加载Apache,以防configuration更改没有生效。
这是因为你只是为index.php插入LocationMatch 。 LocationMatch可以像正则expression式那样定义,所以你可以尝试为所有需要的文件添加正则expression式。
像这样的东西:
<LocationMatch ^/(index.php|phpinfo.php|opcache.php)?$> Require all granted </LocationMatch>