始终出现403禁止访问错误,使用Nginx .htpasswd。

6

从诸如此类教程中可以看出,设置.htpasswd身份验证相对容易。

以下是我的HTTPS块,用于访问我的网站:

 server {
      listen 443;
      server_name potato;
      root /var/www/html;
      ssl on; 
      ssl_certificate      /srv/ssl/cert.pem;
      ssl_certificate_key  /srv/ssl/key.pem;  

      location / {
        auth_basic "Restricted Content";
        auth_basic_user_file /usr/local/nginx/.htpasswd;
      }

  } 

我从这里收集了以下的代码片段,用于创建.htpasswd文件:

 USERNAME=admin
 PASSWORD=password
 sudo printf "$USERNAME:$(openssl passwd -crypt $PASSWORD)\n" >> .htpasswd

这最初失败,出现了权限拒绝的错误。我通过首先创建一个空的.htpasswd文件,然后通过sudo chown max:max .htpasswd授予自己权限来解决这个问题。
当我访问网站时,我确实看到了认证提示,但是即使我输入正确的密码,仍会出现403错误。
我一直在尝试调整设置,并持续通过谷歌搜索进行挖掘。但我会感激任何有关可能源的技巧。如果有人能向我展示一种可靠的方法来诊断认证失败的原因,那就太好了。
在我的access.log文件中,我有如下条目:
73.170.238.232 - admin [05/Sep/2016:12:03:34 -0700] "GET /musicker/dist/ HTTP/1.1" 403 571 "-" "Mozilla/5.0 (X11; CrOS x86_64 8350.68.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"

但我在这里看不到太多有用的信息。你可以看到,我正在尝试访问网站/musicker/dist/,在Nginx中我的location /块正在捕获它并添加auth_basic。
2个回答

17

幸运的是,我在发布问题后不久就解决了这个问题,但我认为以下信息对于其他想要解决类似问题的人会很有用:

相关日志不在 access.log 中,而是在 error.log 中。

运行该命令可以显示 .htaccess 文件未在预期位置中。然后我将其移动到正确的位置,就能够成功进行身份验证。


1
同样的问题在这里!谢谢 - Jose A
我也犯了类似的错误,只不过我使用的是 Docker 容器,其中 htpasswd 文件是一个 Docker 密钥,但该密钥尚未在容器内创建。 - Joe Heffer

1
虽然答案已经在这里了,但我会尝试更详细地解释一下,以便于那些不理解上面内容的人。
我也遇到了403 Forbidden错误,并检查了日志:

2020/01/02 07:46:19 [error] 21521#21521: *258843 open() "/etc/ngnix/.htpasswd" failed (2: No such file or directory), client: 10.3.11.168, server: localhost, request: "GET /reports/ HTTP/1.0", host: "www.example.com"

虽然我确实将.htpasswd保存在/etc/nginx/.htpasswd的位置,但它找不到它。
然后我将.htpasswd移动到/var/www/html/.htpasswd,这解决了我的错误。
谢谢!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接