Ubuntu环境下Nginx无法连接Puma上游,Rails应用访问404求助
Nginx反向代理Puma 404问题排查方案
检查Nginx重写/路由规则
通过nginx -T查看完整生效配置,重点关注kapelner.com对应的server块:- 确认是否存在
rewrite ^/$ /kapelner这类强制重写根路径的规则,这类规则会让Nginx直接去静态文件目录查找/kapelner路径,跳过反向代理流程。如果有,直接删除或注释该规则。 - 检查
location /块的逻辑,确保静态文件查找与反向代理的顺序正确,避免因规则错误导致请求找不到静态文件后直接返回404,而非转发给Puma。
- 确认是否存在
修正Nginx代理配置
针对Rails+Puma的标准反向代理场景,参考以下结构调整配置:server { listen 80; server_name kapelner.com; # 替换为你的Rails项目静态文件实际路径 root /var/www/kapelner/current/public; # 优先匹配静态文件,匹配失败则转发给Puma处理动态请求 location / { try_files $uri $uri/ @puma_proxy; } # Puma代理处理块 location @puma_proxy { proxy_pass http://localhost:9292; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 静态资源缓存优化(可选配置) location ~ ^/assets/ { expires 1y; add_header Cache-Control public; break; } }验证配置并重启Nginx
执行nginx -t检查配置语法是否正确,确认无错误后运行systemctl restart nginx重启服务。之后访问域名,同时通过tail -f /var/log/nginx/access.log /var/log/nginx/error.log查看日志,确认请求是否进入@puma_proxy块。确认Rails路由与静态文件权限
- 如果业务确实需要
/kapelner路径,登录服务器进入Rails项目目录,运行rails routes确认路由表中存在对应规则; - 检查Rails public目录权限,确保Nginx运行用户(通常为www-data)拥有读取权限,可执行
chown -R www-data:www-data /var/www/kapelner/current/public(替换为实际路径)修正权限。
- 如果业务确实需要
内容的提问来源于stack exchange,提问作者Adam Kapelner
相关产品推荐
相关产品推荐

