nginx auth_basic 可以通过 HTTPS 工作吗?

nginx auth_basic 可以通过 HTTPS 工作吗?

我一直在尝试在 SSL 网站中设置受密码保护的目录,如下所示:

/etc/nginx/站点可用/默认

server {
    listen 443:
    ssl on;
    ssl_certificate /usr/certs/server.crt;
    ssl_certificate_key /usr/certs/server.key;

    server_name server1.example.com;

    root /var/www/example.com/htdocs/;
    index index.html;

    location /secure/ {
        auth_basic "Restricted";
        auth_basic_user_file /var/www/example.com/.htpasswd;
    }
}

问题是,当我尝试访问该 URL 时https://server1.example.com/secure/,出现“404:未找到”错误页面。

我的 error.log 显示以下错误:

011/11/26 03:09:06 [error] 10913#0: *1 no user/password was provided for basic authentication,
client: 192.168.0.24, server: server1.example.com, request: "GET /secure/ HTTP/1.1",
host: "server1.example.com"

但是,我能够为普通 HTTP 虚拟主机设置受密码保护的目录,没有任何问题。

是配置问题还是其他问题?

答案1

可能是 auth_basic_user_file 的路径问题,其中您的绝对路径让 nginx 感到困惑:

http://wiki.nginx.org/HttpAuthBasicModule#auth_basic_user_file

从 0.6.7 版本开始,文件名路径是相对于 nginx 配置文件 nginx.conf 的目录,而不是相对于 nginx 前缀目录。

我不确定在其他情况下你如何让它工作。文档中的引文表明你应该有类似的东西:

auth_basic_user_file htpasswd/www.example.com

如果您的服务器配置文件是“/etc/nginx/nginx.conf”,则密码文件应该是“/etc/nginx/htpasswd/www.example.com”。

你可以通过运行“sudo nginx -t”来检查 nginx 配置。如果出现配置错误,即 auth 文件不在预期位置,此时它会告诉你。

相关内容