疑难杂症 · 27 10 月, 2024 0

Nginx无法访问htpasswd文件导致出现错误500

背景

笔者用Nginx搭建WebDAV服务器,通过nginx.conf启用了认证:

auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;

但在用浏览器测试时,在弹出的登陆界面输入完用户名和密码后,服务器并没有按照预期返回文件列表,而是出现了错误500。

问题排查

查看/var/log/nginx/error.log,发现在访问WebDAV服务器时出现如下错误:

*253 open() "/etc/nginx/htpasswd" failed (13: Permission denied)

判断为权限问题。这里的htpasswd使用了到/root/webdav/htpasswd的软链,虽然不知为何Nginx没有访问权限,但解决办法也很简单:不使用软链,直接把htpasswd文件复制到/etc/nginx/目录下就好了。

其他发现

即使是用root用户启动的Nginx,其生成的worker process依然是以nobody用户运行。而访问htpasswd以及各种页面根目录的进程是worker process,因此需要确保nobody用户对这些文件及目录拥有访问权限。