我在网站登录页面上设置密码时遇到问题。我看到这个问题被问过几次,并尝试了每篇帖子中得到支持的修复方法。到目前为止,我已经尝试更改 .htpasswd 的权限、更改 .htpasswd 的位置、使用 .htpasswd 的绝对路径位置以及将 auth_basic 和 auth_basic_user_file 指令放在“location”之外和主“server”块中,但当我转到我的 URL 时,要求输入用户名和密码的弹出窗口仍然没有显示。我希望当我浏览到我的主 URL 时弹出密码提示,而不是任何特定的目录或文件。我查看并遵循了许多教程,并使用 htpasswd 命令创建了 .htpasswd 文件。据我所知,这是 /etc/nginx/sites-enabled/default 的正确配置。我在这里做错了什么?
这是我的配置文件:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name example.com www.example.com;
return 310 https://$server_name$request_uri;
location / {
try_files $uri $uri/ =404;
auth_basic "Under Construction";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
答案1
您的return
声明优先于该location
声明。
您需要有如下配置:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name example.com www.example.com;
location = / {
try_files $uri $uri/ =404;
auth_basic "Under Construction";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location / {
return 310 https://$server_name$request_uri;
}
}
因此,该location = /
语句恰好匹配一条路径,这里它是站点的根 URI。
然后location /
匹配网站上的所有其他路径。
nginx 解析location
块,因此如果多个块匹配相同的路径,则始终使用location
with 。=
location