这是我的子域名 dev.mypage.com 的配置:
server {
listen 80;
server_name dev.mypage.com;
root /home/user/web/dev;
index index.html index.htm index.php;
access_log /home/user/logs/dev/access.log;
error_log /home/user/logs/dev/error.log;
location / {
try_files $uri $uri/ /index.html;
allow xxx.xxx.xxx.xxx;
deny all;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm/dev.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
我想禁止访问所有文件和子目录在/除了我之外(xxx.xxx.xxx.xxx)。
运行此配置并
- 访问dev.mypage.com与其他 IP 变成403 错误。
- 访问dev.mypage.com/subdir与其他 IP 变成403 错误。
- 访问dev.mypage.com/index.php与其他 IP返回页面。
- 访问dev.mypage.com/subdir/index.php与其他 IP返回页面。
因此,情况 3 和 4 并未按预期发挥作用。我曾假设
location / {}
意味着所有文件和目录。我该怎么做才能阻止此子域中所有内容的所有其他 IP?
答案1
我相信 nginx 将使用 php location 块处理 php 地址并忽略 root location 块。我相信allow 127.0.0.1
在使用deny all
语句时包含它也是很好的做法。
尝试添加到您的 php 位置块,作为前四个条目:
try_files $uri =404;
allow xxx.xxx.xxx.xxx;
allow 127.0.0.1;
deny all;
编辑:我的说法不太正确,至少根据我的理解,nginx 将处理与请求匹配的位置块。因此,对 php 地址的请求将根据该块的配置进行处理。同样,如果为特定子目录创建了位置块,则将应用这些规则,而不是根目录位置块。