我一直在尝试在 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 文件不在预期位置,此时它会告诉你。