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

在Nginx同域名下部署React与NodeJS API的方案咨询

同域名整合React应用与Node API的最优方案

核心结论

不需要为同域名开放两个端口,基于路径前缀的Nginx转发是最优方案:将meuapp.com的根路径请求直接服务React静态文件,meuapp.com/api路径的请求转发到NodeJS API服务(端口3001)。这种方式既符合Web开发最佳实践,又能避免跨域问题,同时简化对外端口管理。

具体Nginx配置示例

以下是包含SSL、SPA路由处理和API转发的完整配置(替换为你的实际路径和证书信息):

server {
    listen 80;
    server_name meuapp.com;
    # HTTP强制跳转HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name meuapp.com;

    # SSL证书配置(替换为你的证书文件路径)
    ssl_certificate /etc/nginx/ssl/meuapp.crt;
    ssl_certificate_key /etc/nginx/ssl/meuapp.key;

    # React静态文件目录(build后的产物)
    root /var/www/meuapp-react/build;
    index index.html;

    # 处理React SPA路由:刷新页面时不会返回404
    location / {
        try_files $uri $uri/ /index.html;
    }

    # API请求转发到Node服务
    location /api/ {
        # 如果Node API的路由不带/api前缀,通过rewrite去除路径前缀
        rewrite ^/api/(.*)$ /$1 break;
        
        proxy_pass http://localhost:3001;
        
        # 传递客户端真实信息给Node服务
        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;

        # 跨域配置:允许其他应用访问API(生产环境建议指定具体域名)
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods GET, POST, PUT, DELETE, OPTIONS;
        add_header Access-Control-Allow-Headers Content-Type, Authorization;

        # 快速响应OPTIONS预检请求
        if ($request_method = OPTIONS) {
            return 204;
        }
    }
}

关键配置说明

  • 端口安全:仅需在AWS安全组开放80(HTTP)和443(HTTPS)端口,3000、3001端口仅在服务器本地监听,无需对外暴露,大幅降低攻击面。
  • SPA路由兼容:try_files指令确保React前端路由刷新时不会返回404,让前端路由接管页面跳转逻辑。
  • API转发细节:rewrite指令用于去除/api前缀(如果Node API本身不带该前缀),避免API收到无效路径;代理头配置让Node服务能正确获取客户端IP、协议等信息。
  • 跨域支持:若API需要被其他域名的应用访问,添加CORS相关头即可;生产环境建议将Access-Control-Allow-Origin设置为具体允许的域名(而非*),提升安全性。

为什么不开放两个端口?

直接通过meuapp.com:3001暴露API存在以下问题:

  • URL不美观,开发者需要额外记忆端口号;
  • 非443端口的HTTPS请求需手动指定端口,易引发配置错误;
  • 额外开放端口增加服务器安全风险;
  • 不同端口视为不同域,跨域问题更突出,需额外复杂配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:42:42