Nginx反向代理配置React前端与Python后端全过程

 更新时间:2026年02月02日 08:28:33   作者:展菲  
前后端分离项目里,前端通常是 React 打包后的静态资源,后端是 Python(FastAPI/Flask)提供的 API,生产环境一般用 Nginx 做统一入口,本文只讲 Nginx 反向代理的核心配置思路和关键片段,需要的朋友可以参考下

前言

前后端分离项目里,前端通常是 React 打包后的静态资源,后端是 Python(FastAPI/Flask)提供的 API。生产环境一般用 Nginx 做统一入口:对外只暴露 80/443,静态资源由 Nginx 直接返回,/api 等路径转发到后端进程,这样既能隐藏后端端口、又便于做 HTTPS 和缓存。

本文只讲 Nginx 反向代理的核心配置思路和关键片段,不贴完整可运行 Demo,便于快速接入和排查问题。

整体架构

客户端 → Nginx:80/443
           ├── /         → 静态资源(React build 目录)
           └── /api      → 反向代理到 Python 后端(如 127.0.0.1:8000)
  • 前端:npm run build 后得到 build(或 dist)目录,配置 Nginx 的 root 指向该目录。
  • 后端:用 Gunicorn/Uvicorn 监听本机端口(如 8000),只对本机开放;Nginx 用 proxy_pass/api 转到该端口。

基础 server 与静态资源

在 Nginx 的 conf.dsites-available 下新建一个 server 块,例如:

server {
    listen 80;
    server_name your-domain.com;

    # 前端静态资源
    root /var/www/app/frontend/build;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

要点:

  • root:指向 React 打包后的目录,请求 //xxx 时,Nginx 会先找对应文件,找不到再找目录,最后回退到 index.html,这样前端的 React Router 才能正确处理浏览器直接访问或刷新子路径。
  • try_files$uri 表示先找同名文件,$uri/ 表示找同名目录下的默认页,最后 /index.html 交给 SPA 自己路由。

反向代理 /api 到 Python 后端

在同一个 server 里增加 location /api

location /api {
    proxy_pass http://127.0.0.1:8000;
    proxy_http_version 1.1;
    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;
}

要点:

  • proxy_pass:后端实际监听地址,若后端是 http://127.0.0.1:8000,且后端路由是 /api/xxx,这里写 http://127.0.0.1:8000 即可;若后端根路径是 /,则前端应请求 /api/xxx,Nginx 会把 /api/xxx 原样转给后端,后端需挂载在 /api 下(如 FastAPI 的 app = FastAPI(prefix="/api"))或做路径重写。
  • X-Forwarded-Proto:若前面还有 HTTPS 终结,后端需要知道原始协议时,设为 $scheme,后端可信任该头做跳转或生成 URL。
  • Host:后端若按 Host 做虚拟主机或校验,应传原始 Host。

路径是否带 /api 的两种写法

方式一:前端请求 /api/xxx,后端也以 /api 为前缀

  • 前端:axios.get('/api/users')
  • Nginx:location /api { proxy_pass http://127.0.0.1:8000; }(注意末尾无斜杠)
  • 转发到后端的请求路径仍是 /api/users,后端需挂载在 /api,例如 FastAPI:app = FastAPI(prefix="/api")

方式二:后端根路径是 /,Nginx 做 strip

  • Nginx:location /api/ { proxy_pass http://127.0.0.1:8000/; }(注意两边都有斜杠)
  • 请求 /api/users 会被转成 http://127.0.0.1:8000/users,后端只需挂载 /users 等路由。

按你们前后端约定选一种即可,关键是 proxy_pass 末尾有没有斜杠、以及后端路由前缀要一致。

超时与 body 大小

若接口有上传或长耗时,可适当增大超时和 body 限制:

location /api {
    proxy_pass http://127.0.0.1:8000;
    proxy_connect_timeout 60s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
    client_max_body_size 20M;
    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;
}

HTTPS 与 80 跳转

正式环境建议全站 HTTPS。用 Certbot 申请证书后,可保留 80 仅做跳转:

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name your-domain.com;
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    root /var/www/app/frontend/build;
    index index.html;
    location / {
        try_files $uri $uri/ /index.html;
    }
    location /api {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

常见问题

现象可能原因处理思路
刷新子路径 404SPA 未回退到 index.html检查 try_files 最后是否指向 /index.html
接口 502后端未启动或端口不对确认 Gunicorn/Uvicorn 监听地址与 proxy_pass 一致
接口 404路径前缀不一致对照前端请求路径、Nginx proxy_pass 末尾斜杠、后端 prefix
上传大文件失败body 超限或超时增大 client_max_body_size 与 proxy_*_timeout

总结

Nginx 反向代理前后端分离项目:静态资源用 root + try_files 指向 React build 目录并回退到 index.html/apiproxy_pass 转到 Python 后端,并设置 Host、X-Real-IP、X-Forwarded-Proto 等头。注意 proxy_pass 末尾斜杠与后端路由前缀一致,按需调整超时与 body 大小,生产环境配合 HTTPS 与 80 跳转即可。

以上就是Nginx反向代理配置React前端与Python后端全过程的详细内容,更多关于Nginx反向代理配置React与Python的资料请关注脚本之家其它相关文章!

相关文章

  • Nginx实现外网访问内网的步骤详解

    Nginx实现外网访问内网的步骤详解

    外网浏览器与内网是不通的,但是外网与中间过渡服务器是通的,中间过渡服务器与内网服务器是通的,这样在外网访问过渡服务器时,过渡服务器再跳转到后台服务器,本文给大家介绍了Nginx外网访问内网如何实现步骤,需要的朋友可以参考下
    2023-10-10
  • Nginx+iptables屏蔽访问Web页面过于频繁的IP(防DDOS,恶意访问,采集器)

    Nginx+iptables屏蔽访问Web页面过于频繁的IP(防DDOS,恶意访问,采集器)

    通过分析nginx的日志来过滤出访问过于频繁的IP地址,然后添加到nginx的blockip.conf,并重启nginx.
    2010-11-11
  • nginx实现负载均衡与实例解读

    nginx实现负载均衡与实例解读

    这篇文章主要介绍了nginx实现负载均衡与实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Nginx 502 Bad Gateway错误原因及解决方案

    Nginx 502 Bad Gateway错误原因及解决方案

    这篇文章主要介绍了Nginx 502 Bad Gateway错误原因及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 通过Nginx代理转发配置实现跨域的方法(API代理转发)

    通过Nginx代理转发配置实现跨域的方法(API代理转发)

    这篇文章主要给大家介绍了关于如何通过Nginx代理转发配置实现跨域(API代理转发)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • Nginx中proxy_pass的斜杠的两种方式

    Nginx中proxy_pass的斜杠的两种方式

    Nginx的官方文档将proxy_pass分为不带URI和带URI两种类型,本文就来介绍Nginx中proxy_pass的斜杠的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • Nginx轻松解决跨域问题的过程详解

    Nginx轻松解决跨域问题的过程详解

    当你遇到跨域问题,不要立刻就选择复制去尝试,请详细看完这篇文章再处理 ,本文给大家详细介绍了Nginx如何轻松搞定跨域问题,文中通过代码示例额和图文介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • Nginx跨域设置Access-Control-Allow-Origin无效的解决办法

    Nginx跨域设置Access-Control-Allow-Origin无效的解决办法

    今天小编就为大家分享一篇关于Nginx跨域设置Access-Control-Allow-Origin无效的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 使用Nginx搭建文件服务器及实现文件服务的步骤

    使用Nginx搭建文件服务器及实现文件服务的步骤

    Nginx是轻巧、高效的Web服务器,用作文件服务器非常合适,但是需要一些高级功能,如FTP远程访问、多用户管理,可能需要选择更为复杂的方案,例如Apache或FileZilla Server,这篇文章主要介绍了详解如何使用Nginx搭建文件服务器及实现文件服务,需要的朋友可以参考下
    2024-01-01
  • Nginx 502 Bad Gateway错误常见的4种原因和解决方法

    Nginx 502 Bad Gateway错误常见的4种原因和解决方法

    这篇文章主要介绍了Nginx 502 Bad Gateway错误常见的4种原因和解决方法,本文适用FastCGI环境,其中多数原因通过配置相关参数即可解决,需要的朋友可以参考下
    2015-05-05

最新评论