访问时NGINX返回404错误,切换至Dropbox路径后出现
刚遇到这种切换目录后出现的404,大概率是权限或者路径配置的问题,咱们一步步来排查:
先确认NGINX的运行用户
运行ps -ef | grep nginx,看输出里worker进程的所属用户(一般是www-data、nginx或者nobody)。比如输出里如果有nginx 12345 1234 0 10:00 ? 00:00:00 nginx: worker process,那NGINX就是用nginx用户跑的。检查Dropbox目录及文件的权限
执行ls -l /home/dev/Dropbox/www/和ls -l /home/dev/Dropbox/www/index.php,重点看:- 目录的所有者、组权限:要保证NGINX运行用户有**读取+执行(rx)**权限才能进入目录
index.php的权限:至少要有**读取(r)**权限给NGINX用户
Dropbox默认的目录权限经常会设成只有当前用户能访问(比如700),这时候NGINX用户根本进不去,自然返回404。
调整权限(两种可选方案)
- 方案一:修改目录组权限(适合不想动ACL的情况)
chgrp -R www-data /home/dev/Dropbox/www chmod -R g+rx /home/dev/Dropbox/www - 方案二:用ACL单独给NGINX用户加权限(更灵活,不影响Dropbox同步设置)
setfacl -R -m u:www-data:rx /home/dev/Dropbox/www setfacl -R -m u:www-data:r /home/dev/Dropbox/www/index.php
- 方案一:修改目录组权限(适合不想动ACL的情况)
核对NGINX配置的根目录
打开你的NGINX server配置块,确认root指令是不是精准指向/home/dev/Dropbox/www,比如:server { listen 80; server_name your-site.com; root /home/dev/Dropbox/www; # 这里路径不能错 index index.php index.html; # 其他配置... }改完配置记得重启NGINX:
systemctl restart nginx开启NGINX debug日志找细节
如果错误日志没明确原因,可以临时调高日志级别到debug(用完记得改回去,避免日志暴增):
在NGINX主配置或对应server块里添加:error_log /var/log/nginx/error.log debug;重启NGINX后再访问一次网站,看debug日志里有没有类似“permission denied”的具体报错信息。
检查Dropbox同步状态
有时候Dropbox可能没完全同步完,index.php还没落地到本地,NGINX找不到文件也会404。看看Dropbox客户端的同步标识,确保所有文件都同步完成了。
内容的提问来源于stack exchange,提问作者Lee Nelson

