使用Puma、Nginx、Capistrano部署ROR应用到EC2无报错但访问异常
RoR部署EC2访问异常排查方案
1. 核查Nginx与Puma的对接配置
- 对比Nginx配置文件中
upstream块指向的socket路径,和Puma实际监听的socket路径(你提供的Puma监听路径为unix://nnnn/nnn/current/tmp/sockets/puma.sock)是否完全一致,排查路径拼写、软链接失效类问题。 - 核查socket文件权限:执行
ls -l <替换为实际puma.sock路径>,确认运行Nginx的用户(通常为www-data或nginx)对该socket有读写权限。若权限不足,可修改Puma配置中socket的权限参数,或将Nginx运行用户加入deployer用户组。 - 验证Nginx配置合法性:执行
sudo nginx -t确认配置语法正确后,执行sudo nginx -s reload重载配置生效。
2. 本地验证Puma服务可用性
- 直接在EC2实例内通过socket请求Puma服务:执行
curl --unix-socket <替换为实际puma.sock路径> http://localhost,若能返回应用响应则说明Puma服务正常,问题出在Nginx转发环节;若无法返回响应,需核查Puma绑定配置、Rails运行环境参数(如secret_key_base未配置导致进程假活)。 - 核查Rails日志目录权限:确认
deployer用户对current/log/目录有读写权限,避免Puma进程无法写入日志导致无请求记录。
3. 核查网络与端口规则
- 确认EC2实例安全组的入站规则已开放你访问使用的端口(通常为80/443),允许你所在的公网IP或全IP段访问。
- 检查EC2本地防火墙规则:执行
sudo ufw status查看ufw规则,若80/443端口未开放,执行sudo ufw allow 80/tcp、sudo ufw allow 443/tcp开启端口。
4. 核对Nginx访问日志
- 除错误日志外,查看Nginx访问日志(默认路径
/var/log/nginx/access.log),确认你发起的请求是否抵达Nginx:- 无对应请求记录:问题出在网络链路、安全组/防火墙配置环节
- 有502/503状态码记录:回到第一步核查Nginx到Puma的转发配置与权限
- 有403/404状态码记录:核查Nginx配置中
root参数是否正确指向Rails应用的public目录
内容的提问来源于stack exchange,提问作者Semen Shekhovtsov
相关产品推荐
相关产品推荐

