Nginx .htpasswd 总是 403 禁止

问题描述 投票:0回答:3

从诸如this之类的教程来看,设置 .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;
      }

  } 

我从here收集了以下代码片段来创建 .htpasswd 文件:

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

这最初因权限被拒绝错误而失败,我通过首先创建一个空的 .htpasswd 然后通过

sudo chown max:max .htpasswd
授予自己权限来解决该问题。

当我访问该网站时,我确实看到了 Auth 提示,但即使我输入了正确的密码,我也会收到 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。

nginx
3个回答
17
投票

幸运的是,我在发布问题后不久就发现了这一点,但我认为以下信息可供其他寻求解决类似问题的人使用:

相关日志不在

access.log
,而是在
error.log

运行此命令表明

.htaccess
文件不在预期位置。然后我将其移动到正确的位置并能够进行身份验证。


1
投票

虽然答案已经在这里,但我会尝试为那些没有得到上述答案的人多解释一点。

好吧,我也得到了

403 Forbidden
并检查日志:

2020/01/02 07:46:19 [错误] 21521#21521: *258843 open() “/etc/ngnix/.htpasswd”失败(2:没有这样的文件或目录),客户端: 10.3.11.168,服务器:localhost,请求:“GET /reports/ HTTP/1.0”,主机:“www.example.com”

虽然我已经将

.htpasswd
保存在
/etc/nginx/.htpasswd
的位置,但找不到它。

然后我将 .htpasswd 移至

/var/www/html/.htpasswd
,它解决了我的错误。

谢谢!


0
投票

这里有类似的问题,但文件需要位于 /config/nginx/

所以,基本上,步骤是:

1.) 查找日志/日志位置 位于/config/log/nginx/error.log

2.) 请参阅失败的登录尝试在 /config/nginx 中查找 .htpasswd 文件的错误

3.) 将现有的 .htpasswd 文件移动到该位置 对我来说'mv /var/www/html/.htpasswd /config/nginx/.htpasswd'

4.) 重新启动赃物

5.) ???

6.) 利润!

© www.soinside.com 2019 - 2024. All rights reserved.