Nginx作为Web文件服务器:新增托管文件无法访问问题求助
Nginx作为Web文件服务器:新增托管文件无法访问问题求助
这种问题我之前用Docker部署Nginx托管文件时也碰到过,大概率是权限或者挂载相关的问题,咱们一步步来排查:
文件权限不匹配:linuxserver/nginx镜像默认用
abc用户(UID/GID一般是911/911)运行Nginx进程。如果你的Python脚本是用root或者Pi用户创建的新文件,容器里的abc用户可能没有读取权限。- 先在宿主机用
ls -l查看新文件的权限和所属用户组; - 可以给文件添加全局读权限应急:
chmod o+r /path/to/new-audio-file.mp3; - 更稳妥的方法是让Python脚本创建文件时指定权限,比如用
os.chmod(file_path, 0o644),或者修改脚本运行的用户为和容器abc匹配的UID/GID。
- 先在宿主机用
Docker挂载路径不一致:确认你的Python脚本是不是把新文件写到了Nginx容器挂载的宿主机目录里。比如如果容器启动命令里是
-v /home/pi/youtube-audio:/config/www,那脚本必须把文件输出到/home/pi/youtube-audio下,不然容器根本看不到这些文件。- 可以用
docker inspect <你的Nginx容器名> | grep Mounts查看挂载的具体路径; - 进入容器直接检查文件是否存在:
docker exec -it <你的Nginx容器名> ls /config/www
- 可以用
Nginx目录列表缓存或配置问题:如果是用Nginx的autoindex功能展示文件列表,偶尔会出现目录列表缓存的情况(虽然linuxserver的默认配置一般不会开缓存),可以先重启容器试试:
docker restart <你的Nginx容器名>,看新文件能不能显示出来。宿主机安全模块限制:Raspberry Pi默认可能没开SELinux,但如果有配置AppArmor,可能会阻止容器访问新创建的文件。可以临时关闭试试
sudo setenforce 0,如果关闭后能访问,再去配置对应的权限规则。
先从权限和挂载路径这两个最常见的点查起,应该能快速定位到问题~
备注:内容来源于stack exchange,提问作者BlueFrog
相关产品推荐
相关产品推荐

