Route 53绑定ALB后无法访问EC2上的Rails应用问题排查求助
问题根因
最核心的问题是Nginx站点配置的server_name不匹配,且存在语法错误:
- 你当前
ruby_gems_bootcamp.conf里的server_name仅配置了旧EC2公网IP,未添加你绑定的自定义域名,通过域名访问时请求会命中Nginx默认服务块,无法正确转发到Rails应用 - 配置中
server_name 54.248.194.243行末尾缺失分号,属于Nginx语法错误,可能导致配置未生效
其他潜在问题:
- ALB绑定的ACM证书未覆盖你的自定义域名,导致HTTPS访问报错
- DNS缓存未更新,域名仍解析到旧EC2IP而非ALB
- Rails未信任ALB的转发头,开启强制HTTPS后出现重定向循环
修复步骤
- 修改Nginx站点配置
ruby_gems_bootcamp.conf:
# 将原来的server_name行替换为以下内容,替换为你实际使用的自定义域名,末尾补加分号 server_name 你的自定义域名 54.248.194.243; # 在location @app块中添加X-Forwarded-Proto头配置,完整块如下 location @app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; proxy_pass http://app_server; }
- 验证Nginx配置语法并重载服务:
# 检查配置语法是否正确 nginx -t # 重载Nginx使配置生效 systemctl reload nginx
- 验证ALB证书配置:确认HTTPS监听器绑定的ACM证书已包含你使用的自定义域名,证书域名不匹配会直接导致HTTPS访问报错
- 验证DNS解析:本地执行
nslookup 你的自定义域名,确认返回的IP属于ALB的IP段,若仍解析到旧EC2IP,可等待DNS TTL到期后测试,或清理本地DNS缓存 - 配置Rails信任代理:若Rails生产环境开启了
config.force_ssl = true,需在config/environments/production.rb中添加ALB的IP段到信任代理列表,避免无限重定向:
config.action_dispatch.trusted_proxies = /^10\./ # 匹配AWS VPC默认内网段,可根据你的实际VPC网段调整
内容的提问来源于stack exchange,提问作者Yoshihisa Okada
相关产品推荐
相关产品推荐

