迁移Ubuntu VPS后无配置变更触发Passenger权限错误,如何修复?
将运行Ubuntu 20.04的VPS数据迁移至全新Ubuntu 24.04 VPS,未修改任何配置,但浏览器访问页面时触发Passenger错误。Nginx错误日志如下:
2024/12/18 16:47:18 [alert] 82522#82522: *299 Error opening '/home/deploy/app/current/Passengerfile.json' for reading: Permission denied (errno=13); This error means that the Nginx worker process (PID 82522, running as UID 33) does not have permission to access this file. Please read this page to learn how to fix this problem: https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/?a=upon-accessing-the-web-app-nginx-reports-a-permission-denied-error; ; Extra info, client: [...], server: app.2ld.com, request: "GET /config.json HTTP/1.1", host: "app.2ld.com"
注:所有应用中均不存在Passengerfile.json,错误提示的权限放宽建议存在误导性。当前Nginx与Passenger进程已正常启动,相关Nginx配置片段如下:
server_name app.2ld.com; root /home/deploy/app/current/public; passenger_enabled on; passenger_app_env production; location /cable { passenger_app_group_name app_websocket; passenger_force_max_concurrent_requests_per_process 0; }
- 强制指定Passenger运行用户:在Nginx站点配置中添加
passenger_user deploy;,让Passenger以应用目录所属用户运行,避免权限不匹配:server_name app.2ld.com; root /home/deploy/app/current/public; passenger_enabled on; passenger_user deploy; # 新增该行 passenger_app_env production; location /cable { passenger_app_group_name app_websocket; passenger_force_max_concurrent_requests_per_process 0; } - 修复目录遍历权限:Passenger进程需要能遍历从根目录到应用目录的所有层级,执行以下命令开放必要权限:
# 给其他用户添加目录执行权限(若需更安全可改用用户组方式) chmod o+x /home/deploy/ /home/deploy/app/ /home/deploy/app/current/ # 安全替代方案:将Nginx用户加入deploy组 usermod -aG deploy www-data chmod g+x /home/deploy/ /home/deploy/app/ /home/deploy/app/current/ - 重启服务生效:修改配置和权限后,重启Nginx服务:
systemctl restart nginx
内容的提问来源于stack exchange,提问作者Jerome

