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

生产环境React HTTP请求无法抵达Node.js后端问题求助

问题:生产环境React前端无法通过Nginx代理访问Node后端API

本地开发时,React项目package.json中的proxy配置可正常转发请求到Node.js后端,但部署到生产服务器后,前端请求/api/posts返回404,Nginx日志显示该请求触发404。通过curl http://127.0.0.1:5500/api/posts可正常获取数据,推测Nginx代理未生效。

关键代码/配置片段

前端React请求代码

export default function SinglePost() {
  const [posts, setPosts] = useState([]);

  useEffect(() => {
    const fetchPosts = async () => {
      try {
        const response = await axios.get('/api/posts');
        setPosts(response.data);
      } catch (error) {
        console.error('Error fetching posts:', error);
      }
    };

    fetchPosts();
  }, []);
}

后端路由配置(postsTest.js)

app.get('/api/posts', (req, res) => {
    const singlePostId = req.query.postId;

    if (singlePostId) {
      const matchPost = posts.find((post) => post.id === singlePostId);
      if (matchPost){
        res.json(matchPost);
      } else {
        res.status(404).json({message: 'Post Not Found'});
      }
    } else {
      res.json(posts);
    }
});

原Nginx配置

server {
        listen 81;
        server_name 111.11.111.11;

        root /home/bob/webname/webnames/client/build;
        index index.html;

        location / {
                try_files $uri $uri/ =404;
        }

        location /api {
                proxy_pass http://localhost:5500/;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
        }
}

解决方案

1. 修正Nginx的proxy_pass配置

当前proxy_pass末尾的斜杠是问题核心:带斜杠时,Nginx会把/api后的路径直接拼到目标地址后,即/api/posts会被转发到http://localhost:5500/posts,但后端路由是/api/posts,导致匹配失败返回404。

修改后的Nginx配置:

location /api {
        proxy_pass http://localhost:5500;  # 移除末尾斜杠
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
}

2. 验证配置并重启Nginx

先检查配置语法是否正确:

sudo nginx -t

若输出test is successful,重启Nginx使配置生效:

sudo systemctl restart nginx

3. 明确React生产环境proxy配置无效

React的package.json中的proxy仅在开发环境(npm start)起作用,生产构建(npm run build)后该配置不会被打包到静态文件中,必须依赖Nginx等反向代理实现API转发,当前的代理思路是正确的,只需修正Nginx配置即可。

4. 日志排查(若问题仍存在)

查看Nginx访问日志和错误日志,确认请求转发情况:

# 实时查看访问日志
sudo tail -f /var/log/nginx/access.log
# 实时查看错误日志
sudo tail -f /var/log/nginx/error.log

通过日志可确认请求是否被正确转发到后端5500端口,以及后端的响应状态。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:05:55