nginx 密码保护不起作用

nginx 密码保护不起作用

我在网站登录页面上设置密码时遇到问题。我看到这个问题被问过几次,并尝试了每篇帖子中得到支持的修复方法。到目前为止,我已经尝试更改 .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块,因此如果多个块匹配相同的路径,则始终使用locationwith 。=location

相关内容