Amazon Linux下Rails API应用Nginx配置403错误求可用示例
解决Rails API应用Nginx 403错误的配置方案
看起来你的API应用Nginx配置踩了几个导致403的小坑,我帮你梳理下核心问题并给出可直接运行的配置方案:
核心问题拆解
- 路由匹配正则错误:原配置的
location ~ ^api/v1/(.+)$缺少了开头的斜杠/,而HTTP请求的URL是从根路径开始的(比如/api/v1/users),这个正则根本匹配不到你的API请求,导致Nginx尝试访问root目录下的文件,进而触发403。 - 权限配置缺失:Nginx运行用户需要对Rails应用的
public目录以及Puma socket文件有读写权限,否则也会返回403。 - 静态文件/默认请求处理逻辑缺失:当访问非API路径时,Nginx会尝试读取root目录的index文件,如果文件不存在或权限不足,同样会返回403。
修正后的Nginx配置
upstream cb_api { server unix:///var/www/html/counterpoint-api/shared/sockets/puma.sock; # 可选:添加上游连接优化配置,提升API响应效率 keepalive 32; } server { listen 80 ; listen [::]:80; server_name cb-api.ariki.online; # 设置Rails应用的静态文件根目录 root /var/www/html/counterpoint-api/public; index index.html index.htm; # 优先处理静态文件(如果API应用有需要访问的静态资源) location / { try_files $uri $uri/index.html @api_fallback; } # 匹配所有/api/v1/开头的API请求,修正正则确保正确匹配 location ~ ^/api/v1/ { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto $scheme; # 后续配置HTTPS时会用到 proxy_pass http://cb_api; proxy_redirect off; # 配置代理超时,适配Rails应用的处理速度 proxy_connect_timeout 30s; proxy_send_timeout 30s; proxy_read_timeout 30s; } # 非API且非静态文件的请求,转发给Rails应用处理 location @api_fallback { proxy_pass http://cb_api; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } }
额外排查步骤
- 检查Nginx错误日志:执行
tail -f /var/log/nginx/error.log,查看具体的403触发原因(是权限问题还是文件不存在)。 - 验证Socket文件权限:执行
ls -l /var/www/html/counterpoint-api/shared/sockets/puma.sock,确保Nginx运行用户(通常是nginx或www-data)对该socket有读写权限。可以通过调整Puma的socket权限为775,或者将Nginx用户加入到Puma运行用户的用户组来解决。 - 重启服务:修改配置后,执行
sudo systemctl restart nginx和重启你的Rails API应用(确保Puma socket正常生成)。
内容的提问来源于stack exchange,提问作者Peter Van de Put
相关产品推荐
相关产品推荐

