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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:33:31