使用 nginx 拒绝访问所有文件的正确方法是什么?

使用 nginx 拒绝访问所有文件的正确方法是什么?

这是我的子域名 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)。

运行此配置并

  1. 访问dev.mypage.com与其他 IP 变成403 错误
  2. 访问dev.mypage.com/subdir与其他 IP 变成403 错误
  3. 访问dev.mypage.com/index.php与其他 IP返回页面
  4. 访问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 地址的请求将根据该块的配置进行处理。同样,如果为特定子目录创建了位置块,则将应用这些规则,而不是根目录位置块。

相关内容