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

Docker+Nginx反向代理环境下React访问Express API的URL配置问题

解决React浏览器端调用Docker容器中API的路由问题

问题核心

React应用运行在用户浏览器中,所有API请求从用户设备直接发起,无法访问Docker内部的容器域名(如api:3001),必须通过对外暴露的Nginx反向代理中转请求。你的Nginx已配置/api路径转发到API容器,只需调整API调用路径并修正Nginx配置细节即可。

具体解决方案

1. 修正Nginx配置

原配置中upstream client定义不完整,补充完整并优化/api转发规则:

upstream client {
  server client:3000;
}

upstream api {
  server api:3001;
}

server {
  listen 80;

  location / {
      proxy_pass http://client;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location /sockjs-node {
      proxy_pass http://client;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
      proxy_set_header Host $host;
  }

  location /api {
      proxy_pass http://api;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

2. 修改React应用的API调用路径

在React代码中,所有API请求使用相对路径:

// 正确写法:浏览器自动拼接当前网站的域名/IP
fetch('/api/books')
  .then(res => res.json())
  .then(data => console.log(data))

用户浏览器会发起类似http://你的服务器IP/api/books的请求,Nginx自动转发到api:3001容器。

3. 确认Docker Compose配置有效性

你的docker-compose配置已满足要求:

  • Nginx容器映射主机80端口,对外提供服务
  • client和api容器仅通过expose暴露端口,仅Docker内部可访问
  • Nginx可通过服务名(client、api)直接访问对应容器(Docker Compose默认创建内部网络,服务名可作为域名解析)

验证步骤

  • 重启所有容器:docker-compose down && docker-compose up --build
  • 访问服务器80端口,确认React应用正常加载
  • 触发API请求后,查看浏览器开发者工具「网络」标签,确认请求路径为/api/xxx且返回正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:18:11