19

我正在尝试在 Ubuntu Jaunty 中使用 nginx 进行基本身份验证。在 nginx.conf 中,我在服务器上下文下添加了这两行:

server {
   ...
   auth_basic "Restricted Access";
   auth_basic_user_file /etc/nginx/.htpasswd;
   ...
}

然后我 apt-get'ed apache2-utils 来获取 htpasswd,我用它来创建 htpasswd 文件:

htpasswd -d -c /etc/nginx/.htpasswd joe

当我尝试访问该站点时,身份验证对话框按预期出现,但是当我输入用户名和密码时,它只是刷新了对话框。它似乎不喜欢我提供的密码。我尝试使用和不使用 -d 选项运行 htpasswd,但仍然没有运气。它拒绝进行身份验证。任何想法我做错了什么?

任何帮助,将不胜感激。

4

4 回答 4

29

我要检查的事情:

  • `/etc/nginx/.htpasswd` 上的权限 - 运行 nginx 的帐户可以读取文件吗?您可以暂时尝试使用 `chmod 644` 来确保每个人都可以阅读它。如果可行,那么您可以整理出适当的 `chown` 和 `chmod` 设置组合,以便 nginx 和您/root 可以读取它,但其他用户不能(出于安全考虑)。
  • 确保 `htpasswd` 以正确的形式生成哈希;它通常是大约 13 个字母数字字符(例如 `username:wu.miGq/e3nro`)。该命令也可以生成 MD5 哈希,这看起来更像是 `username:$apr1$hzB2K...$b87zlCYMKufOxn9ol5QV4/` 这些不适用于 nginx。
  • 考虑增加 nginx 的调试输出并检查错误日志以获取线索。
于 2011-07-05T09:15:23.440 回答
10

旧线程,但没有答案,在 Google 上有很好的参考。

如果您收到此错误并尝试了其他建议,请检查 .htpasswd 文件的父文件夹的权限:nginx 用户(默认为 www-data)应该具有读取和执行权限(这已为我修复)。

于 2015-04-21T13:26:23.947 回答
7

我在 bash 上遇到的另一个问题。我没有通过提示输入密码,而是使用了在线输入密码的-b选项htpasswd

$ htpasswd -nb admin test123$secure

我不明白为什么我一直遇到密码不匹配错误,尝试不同的加密算法。我用 curl 验证了它的工作原理:

$ curl -u admin:test123$secure https://example.com

最后,问题暴露了echo

$ echo test123$secure
test123

我犯了在 bash 中使用美元符号 ($)的错误,它被解释为一个空变量,因此省略了其他所有内容。可以通过删除该-b选项并仅使用提示输入密码来避免这种情况。

于 2015-10-12T18:03:15.547 回答
0

nginx 将 401 响应识别为注销,确保您的站点没有返回 401 并再次重定向,它将陷入无限登录循环,登录 -> 401 -> 注销 -> 重定向到同一页面 -> 重复

于 2022-01-17T04:40:50.637 回答