使用.htpasswd密码保护Nginx文件夹中的文件

时间:2016-06-18 22:59:57

标签: nginx .htpasswd

我尝试使用.htpasswd来保护我的域名上的/ admin /部分。

我能够使用此配置成功保护根index.php文件:

    location /admin/ {
            try_files $uri $uri/ =404;
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/.htpasswd;
    }

但该文件夹中的相关文件仍可查看。例如,在http://domain.com/admin/whatever.php - 页面加载,然后出现Nginx密码身份验证,但您可以简单地取消它并仍然查看该页面。

经过一些研究后,我尝试使用regex wildcards失败。

Doesn't work:

    location "~^/admin/.$" {
            try_files $uri $uri/ =404;
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/.htpasswd;
    }

Doesn't work:

    location "~^/admin/*\$" {
            try_files $uri $uri/ =404;
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/.htpasswd;
    }

如何密码保护根索引以及任何子文件夹和文件?过去/ admin /的所有内容都应该无法访问。

1 个答案:

答案 0 :(得分:5)

你的正则表达式语法几乎是好的,你实际上必须混合你所做的两次尝试:

location "~^/admin/.*" {
        try_files $uri $uri/ =404;
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
}

这是因为在正则表达式中,语法.表示任何字符(单个),*表示先前“某事”的任何数量(可以为零)。混合两个(.*)将意味着任何数量的任何字符。

这是正则表达式的基础之一,所以我建议你多了解一下它们。 Learning Regular Expressions包含有关您接下来的步骤的指南。它还包含有关处理换行符时.通配符的一些限制的注释,但这不适用于URL。