nginx和auth_basic

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

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

然后我apt-get'ed apache2-utils得到htpasswd,我用它来创buildhtpasswd文件:

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

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

任何帮助,将不胜感激。

我会检查的事情:

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

旧的线程,但没有答案,并很好地引用了谷歌。

如果出现这个错误,并尝试了其他建议,请检查.htpasswd文件的父文件夹的权限:nginx用户(默认情况下是www-data)应具有读取和执行权限(这为我解决了这个问题)。

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

 $ htpasswd -nb admin test123$secure 

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

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

最后,这个问题通过echo证实

 $ echo test123$secure test123 

我犯了在bash中使用dolar标志($)的错误,它被解释为一个空变量,从而省略了其他所有的东西。 这可以通过删除-b选项并仅使用提示输入密码来避免。