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

Password protecting files in a folder in Nginx using .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/ 之后的所有内容都应该无法访问。

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

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

这是因为在正则表达式语法中,.表示任意字符(单个),而*表示前面"something"的任意数量(可以为零)。将两者混合 (.*) 将意味着任意数量的任意字符。

这是正则表达式的基础知识之一,所以我建议您多了解一些。 Learning Regular Expressions 包含有关您的后续步骤的指南。它还包含有关处理换行符时 . 通配符的一些限制的说明,尽管这不适用于 URL。