Rocky Linux部署Wagtail(Django)站点,Nginx无法加载静态文件
解决Rocky Linux上Nginx部署Wagtail时静态文件403权限问题
1. 修正Nginx配置的语法错误
你的location块缺少开头的斜杠,导致匹配规则失效,同时可以优化静态文件的配置:
server { listen 80; server_name 10.4.0.189; root /home/wagtail/apps/my_site; charset UTF-8; error_log /home/wagtail/apps/my_site/nginx-error.log; # 处理favicon,添加root确保能找到文件 location = /favicon.ico { root /home/wagtail/apps/my_site; access_log off; log_not_found off; } # 修正静态文件location的匹配规则,添加斜杠 location /static/ { root /home/wagtail/apps/my_site/; expires 30d; # 添加缓存优化 add_header Cache-Control "public, immutable"; } location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://unix:/run/gunicorn.sock; } }
修改后重启Nginx:
systemctl restart nginx
2. 检查上层目录的执行权限
Linux需要目录有执行权限才能进入,你仅检查了/home/wagtail/apps/my_site的权限,但上层的/home/wagtail和/home/wagtail/apps权限可能限制了Nginx访问:
# 查看上层目录权限 ls -ld /home/wagtail /home/wagtail/apps
确保这些目录的权限至少是drwxr-xr-x或者drwxrwxr-x,允许nginx组读取和进入。如果权限不足,执行:
chmod g+rx /home/wagtail /home/wagtail/apps
3. 强制设置SELinux上下文
即使setroubleshoot没报错,静态文件的SELinux上下文可能仍未正确配置,执行以下命令给静态文件设置HTTP服务允许的上下文:
# 临时生效 chcon -Rv --type=httpd_sys_content_t /home/wagtail/apps/my_site/static/ # 永久生效(需要先安装policycoreutils-python-utils) yum install -y policycoreutils-python-utils semanage fcontext -a -t httpd_sys_content_t "/home/wagtail/apps/my_site/static(/.*)?" restorecon -Rv /home/wagtail/apps/my_site/static/
4. 验证Nginx运行用户
确认Nginx进程的运行用户是nginx,并且该用户有权限访问文件:
# 查看Nginx运行用户 ps aux | grep nginx
如果Nginx用的是nginx用户,确保该用户属于nginx组(默认已加入),同时文件的组权限是nginx且有读权限(你的文件权限已经满足)。
内容的提问来源于stack exchange,提问作者tony_ray
相关产品推荐
相关产品推荐

