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

Nginx配置异常:/api请求被Node.js SSR拦截,无法转发至Rails API

解决Nginx中/api请求被Node.js SSR拦截的问题

你的核心问题是Nginx未优先将/api路径转发到Rails API,反而被Node.js SSR的/location拦截。结合你的配置,问题出在全局Passenger配置和location匹配优先级上,以下是具体修复方案:

修改后的Nginx配置

listen 80;
server_name didsomeonesayfrankerz.com;

passenger_friendly_error_pages on;
passenger_app_group_name didsomeonesayfrankerz;
passenger_min_instances 15;
passenger_max_request_queue_size 200;
passenger_app_env production;
client_max_body_size 10M;

# API server - 优先匹配/api路径
location ^~ /api {
  passenger_enabled on;
  passenger_app_type ruby;
  passenger_ruby /home/ost/.rvm/gems/ruby-3.0.0/wrappers/ruby;
  root /home/ost/didsomeonesayfrankerz/server/public;
  passenger_app_root /home/ost/didsomeonesayfrankerz/server;
}

# SSR 服务
location / {
  passenger_enabled on;
  root /home/ost/didsomeonesayfrankerz/client/dist/ssr;
  passenger_app_type node;
  passenger_nodejs /home/ost/.nvm/v18.16.0;
  passenger_startup_file /home/ost/didsomeonesayfrankerz/client/dist/ssr/index.js;
}

charset utf-8;

location ~ /\.(?!well-known).* {
  deny all;
}

关键修改说明

  • 移除全局passenger_enabled on:原全局开启会让所有location默认继承Passenger配置,导致不同应用的Passenger设置冲突,改为在每个需要的location单独启用。
  • 给/api location添加^~前缀:这个标记会让Nginx优先匹配所有以/api开头的请求,直接跳过后面的/location,彻底避免被SSR服务拦截。
  • 添加passenger_app_root:Passenger需要该参数明确Rails项目的根目录,确保正确加载Rails应用。
  • 保持/api location在/之前:虽然^~已保证优先级,这样的顺序让配置逻辑更清晰。

后续检查步骤

  1. 重启Nginx服务生效配置:
sudo systemctl restart nginx
  1. 验证Rails应用目录权限:确保Nginx进程用户(通常是www-data)能访问/home/ost/didsomeonesayfrankerz/server目录及文件。
  2. 查看错误日志排查问题:如果仍有异常,检查/var/log/nginx/error.log中的具体报错信息。

内容的提问来源于stack exchange,提问作者OST

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:24:57