nginx和auth_basic

KP.*_*KP. 18 nginx basic-authentication .htpasswd

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

server {
   ...
   auth_basic "Restricted Access";
   auth_basic_user_file /etc/nginx/.htpasswd;
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

htpasswd -d -c /etc/nginx/.htpasswd joe
Run Code Online (Sandbox Code Playgroud)

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

任何帮助,将不胜感激.

Nic*_*ick 26

我要检查的事情:

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

  • 根据http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html上的文档"现在支持基于MD5的密码算法(apr1)的Apache变体" (5认同)

Kon*_*che 7

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

$ htpasswd -nb admin test123$secure
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我不断遇到密码不匹配错误,尝试不同的加密算法。我用 curl 验证它有效:

$ curl -u admin:test123$secure https://example.com
Run Code Online (Sandbox Code Playgroud)

最后,问题通过 echo

$ echo test123$secure
test123
Run Code Online (Sandbox Code Playgroud)

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


per*_*000 6

旧线程,但没有答案,并在谷歌上很好地引用.

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