Nginx密码保护目录不适用于更深层次的链接

时间:2017-03-27 20:21:55

标签: nginx passwords nginx-location

我有一个Nginx密码保护目录,如果你去mydomain.com/protected_folder/就可以正常工作。但是,如果我去mydomain.com/protected_folder/index.php,页面加载就好了...它不应该。

如何设置我的位置块以完全阻止通过受保护目录的所有访问?

我的阻止:

location /protected_folder {
        try_files $uri $uri/ =404;
        auth_basic "Protected Folder Login";
        auth_basic_user_file /etc/nginx/my_pass;
         }

作为旁注。当我保护整个站点密码时,这不是问题。

1 个答案:

答案 0 :(得分:1)

问题是此位置块不处理.php个文件。它们由位置块处理,例如location ~ \.php$

如果使用^~修饰符,则会强制此位置块具有比正则表达式位置块更高的优先级。有关详细信息,请参阅this document

这当然会阻止//mydomain.com/protected_folder/index.php正确执行。要更正此问题,您需要一个嵌套的location ~ \.php$块来处理.php下的/protected_folder个文件。

例如:

root /path/to/root;

location ^~ /protected_folder {
    try_files $uri $uri/ =404;
    auth_basic "Protected Folder Login";
    auth_basic_user_file /etc/nginx/my_pass;

    location ~ \.php$ {
        ...
    }
}

location ~ \.php$ {
    ...
}

嵌套location ~ \.php$块与location ~ \.php$块中现有server块的副本。