Nginx搭配Phusion Passenger无法在80端口提供服务,请求超时
问题排查与解决方案
1. 修复Nginx配置拼写错误
你的Nginx配置中存在明显拼写错误,可能干扰请求处理流程:
# 错误写法 location ~ ^/(asets|packs) {
修改为正确的静态资源路径:
location ~ ^/(assets|packs) { expires max; gzip_static on; }
修改后执行sudo nginx -t验证配置合法性,再重启Nginx:sudo systemctl restart nginx。
2. 验证Passenger Ruby路径与Nginx权限
Nginx默认以www-data用户运行,你指定的Ruby路径/home/deploy/.rbenv/shims/ruby需要确保该用户能正常访问:
- 检查deploy用户主目录权限:执行
ls -ld /home/deploy,确保权限为drwxr-xr-x(755),若为700则执行sudo chmod 755 /home/deploy。 - 测试www-data用户能否调用指定Ruby:执行
sudo -u www-data /home/deploy/.rbenv/shims/ruby -v,若报错则需调整rbenv目录权限,或配置Nginx以deploy用户运行(需谨慎修改nginx.conf中的user指令)。
3. 修正应用目录与文件权限
确保www-data对应用目录有足够的读写权限:
- 调整应用根目录、current目录、public目录权限:
sudo chmod -R 755 /home/deploy/myapp sudo chown -R deploy:deploy /home/deploy/myapp
- 给tmp目录添加读写权限(Rails启动依赖该目录):
sudo chmod -R 775 /home/deploy/myapp/current/tmp sudo chown -R deploy:www-data /home/deploy/myapp/current/tmp
4. 分析Passenger详细日志
你已开启passenger_log_level 6,直接查看/var/log/nginx/passenger.log,重点关注以下错误:
- 生产环境依赖缺失:比如某个gem未安装,可执行
cd /home/deploy/myapp/current && sudo -u www-data bundle install --without development test补全依赖。 - 缺少RAILS_MASTER_KEY:确保
config/master.key存在,或在Nginx配置中添加环境变量:
server { # 其他配置... passenger_env_var RAILS_MASTER_KEY "你的密钥内容"; }
- 数据库连接失败:检查
config/database.yml生产环境配置,执行cd /home/deploy/myapp/current && sudo -u www-data bundle exec rails db:migrate RAILS_ENV=production验证连接。
5. 确认Passenger模块已加载
执行sudo nginx -V,查看输出中是否包含Passenger模块的编译参数(如--add-module=/usr/lib/ruby/vendor_ruby/phusion_passenger),若缺失则需重新安装Passenger的Nginx模块。
6. 检查Rails生产环境配置
- 确保
config/environments/production.rb中config.public_file_server.enabled = true(Passenger会处理静态资源,该配置作为兜底)。 - 临时关闭
config.force_ssl = false,排除HTTPS跳转导致的超时问题(后续再配置SSL)。
7. 验证Passenger应用状态
执行sudo passenger-status,查看是否有应用实例被启动。若显示无实例,说明Passenger未能成功拉起应用,结合passenger.log的错误信息进一步定位。
内容的提问来源于stack exchange,提问作者Daniel Grenier
相关产品推荐
相关产品推荐

