跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Python大前端

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

Nginx 反向代理配置用于前后端分离项目,前端 React 静态资源通过 root 和 try_files 回退至 index.html 处理 SPA 路由,后端 Python API 通过 proxy_pass 转发。配置需关注 Host、X-Real-IP 等头信息传递,调整超时与 body 大小限制,并配合 HTTPS 证书实现 80 到 443 跳转。常见问题包括刷新 404、接口 502 及上传失败,可通过检查 try_files 配置、后端监听状态及参数设置解决。

云朵棉花糖发布于 2026/4/10更新于 2026/4/264 浏览
Nginx 反向代理配置 React 前端与 Python 后端

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

前言

前后端分离项目里,前端通常是 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.d 或 sites-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;/api 用 proxy_pass 转到 Python 后端,并设置 Host、X-Real-IP、X-Forwarded-Proto 等头。注意 proxy_pass 末尾斜杠与后端路由前缀一致,按需调整超时与 body 大小,生产环境配合 HTTPS 与 80 跳转即可。

目录

  1. Nginx 反向代理配置 React 前端与 Python 后端
  2. 前言
  3. 整体架构
  4. 基础 server 与静态资源
  5. 反向代理 /api 到 Python 后端
  6. 路径是否带 /api 的两种写法
  7. 超时与 body 大小
  8. HTTPS 与 80 跳转
  9. 常见问题
  10. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ 实现 JSON 与 HTTP 协议,从零构建 Web 计算器服务器
  • Xcode 接入 AI 大模型 Ollama 配置与使用指南
  • Python 国内常用镜像下载网址及配置方法
  • 基于 Django 与 Vue 的酒店管理系统设计与实现
  • OpenClaw 飞书机器人搭建流程
  • Git Worktree 原理与实战:解析 Cursor 2.0 多 Agent 并行模式
  • RustFS Docker 单节点部署指南
  • Java 基本语法
  • 基于 MCP 协议辅助 JS 逆向分析与调试
  • 当看到 Bug 背后的真相,我选择了沉默
  • LabVIEW 操作 Access 与 SQL Server 数据库实战指南
  • 企业级 Copilot 安全:权限配置与风险防控的 4 个核心要点
  • node-llama-cpp 跨平台安装与配置实战
  • Spring AI 简介:Java 智能开发入门
  • 竞争自适应重加权采样(CARS)算法在光谱数据变量选择中的应用
  • Python 爬虫学习与就业兼职方向解析
  • 命令行大模型交互工具 MCPHost 实战指南
  • FASTLIVO2 算法解析与实战(一):SLAM 多传感器融合架构
  • 网络安全渗透测试常用术语详解:50 个核心概念解析
  • Hadoop 上实现分布式深度学习的框架与方案

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online