You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2部署Rails7+Nginx+Passenger遇异常响应问题排查

部署异常排查方案

针对你在Ubuntu 22.04 EC2上部署Rails 7 + Nginx + Passenger遇到的三个阶段问题,逐一排查解决:

1. 初始配置返回Nginx默认页面

  • 可能原因:新站点配置未正确启用,或Nginx未重新加载配置;也可能是server_name localhost仅匹配localhost请求,用EC2公网IP/域名请求时匹配到了Nginx隐含的默认 fallback 配置。
  • 解决步骤:
    • 确认新站点已启用:执行sudo ln -s /etc/nginx/sites-available/my_app /etc/nginx/sites-enabled/(若未执行过)
    • 重新加载Nginx配置:sudo systemctl reload nginx
    • 修改server_name为你的EC2公网IP或域名,比如server_name xxx.xxx.xxx.xxx;,避免仅匹配localhost请求。

2. 添加root路径后返回403 Forbidden

  • 核心原因:
    1. 路径拼写错误:你实际应用目录是/var/www/my_app/code,但配置里写的是/var/www/myapp/code/public(少了下划线_),导致Nginx找不到正确目录。
    2. 目录权限问题:my_app用户对/var/www/my_app/code/public无读权限;或Nginx运行用户(已设为my_app)无法访问父目录。
    3. 未启用Passenger时,Nginx尝试列出public目录索引,但Rails默认无index.html,且Nginx默认禁止目录索引。
  • 解决步骤:
    • 修正路径:将root改为/var/www/my_app/code/public(与实际目录完全一致)
    • 修复权限:
      sudo chown -R my_app:my_app /var/www/my_app/code
      sudo chmod -R 755 /var/www/my_app/code/public
      
    • 若暂时未启用Passenger,可临时添加index index.html;(Rails部署建议直接启用Passenger,无需此配置)

3. 启用Passenger后返回301重定向到HTTPS

  • 可能原因:
    1. Rails配置强制HTTPS:config/environments/production.rb中config.force_ssl = true,导致Rails发送301跳转。
    2. Nginx配置中存在HTTPS跳转规则(可能是之前配置残留或Passenger默认规则)。
  • 解决步骤:
    • 检查Rails生产环境配置:打开/var/www/my_app/code/config/environments/production.rb,若暂未配置HTTPS,将config.force_ssl改为false,然后重启Passenger:sudo passenger-config restart-app /var/www/my_app/code
    • 检查Nginx站点配置:确保没有类似return 301 https://$server_name$request_uri;的跳转规则。
    • 后续若要配置HTTPS,需申请SSL证书(如Let's Encrypt)并配置Nginx的443端口,同时保留config.force_ssl = true。

额外验证步骤

  • 确认Passenger与Ruby关联正常:执行passenger-config about ruby-command,输出的Ruby路径需与mod-http-passenger.conf中指定的一致。
  • 查看Passenger应用日志:/var/log/passenger.log,若301跳转由Rails触发,这里会有相关记录。

内容的提问来源于stack exchange,提问作者hyperrjas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:33:27