背景
笔者用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用户对这些文件及目录拥有访问权限。