我正在尝试使用 nginx 在子文件夹上设置基本身份验证。
location ^~ /Docs/ {
auth_basic "Restricted Area";
auth_basic_user_file /var/www/Docs/.htpasswd; //also tried the path in quotes
}
我尝试过多种方法来生成密码(例如 apache 的htpasswd
),但我无法使用 .htpasswd 中指定的用户名和密码登录 /Docs。我看到带有“限制区域”的身份验证对话框,但密码不被接受。
我已经尝试过这些方法这里:
答案1
事实证明,这是由 Squid 缓存代理未正确传递身份验证标头引起的。通过运行类似以下内容可以证明这一点:
curl -i --user qqq:qqq http://target.server/Docs/dump.php |grep AUTH
dump.php 包含<php phpinfo();
对于 squid 后面的服务器,该命令的输出为空,我希望看到_SERVER["HTTP_AUTHORIZATION"]
答案2
您是否尝试过使用绝对位置路径?
location /Docs { auth_basic "Restricted Area"; auth_basic_user_file /var/www/Docs/.htpasswd; }
如果这能让你进一步了解,你可能需要(A)将密码文件移到 Web 根目录之外,或者(B)保护密码文件不被提供:
location ~ /\. { deny all; }
您是否确定所创建的文件可被 nginx 所运行的用户读取?