news 2026/4/23 13:34:29

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nginx 反向代理配置 React 前端与 Python 后端

网罗开发(小红书、快手、视频号同名)

大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


文章目录

    • 前言
    • 整体架构
    • 基础 server 与静态资源
    • 反向代理 /api 到 Python 后端
      • 路径是否带 /api 的两种写法
    • 超时与 body 大小
    • HTTPS 与 80 跳转
    • 常见问题
    • 总结

前言

前后端分离项目里,前端通常是 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 跳转即可。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:58:43

服装企业选择ERP软件时应该关注哪些核心因素?

服装企业ERP软件选型的集成性分析 在选择服装企业的ERP软件时,系统的集成性是一个至关重要的因素。一个好的ERP软件应能够将不同功能模块,如生产管理、库存管理和订单处理,有效整合在一起。这样,信息可以在各个部门之间顺畅流动&a…

作者头像 李华
网站建设 2026/4/23 7:51:17

AI应用架构师的创新思维:用伦理与治理塑造负责任的AI格局

AI应用架构师的创新思维:用伦理与治理塑造负责任的AI格局 关键词:AI应用架构师、创新思维、伦理、治理、负责任AI、AI格局 摘要:本文深入探讨AI应用架构师如何凭借创新思维,通过伦理与治理手段塑造负责任的AI格局。阐述AI发展中的…

作者头像 李华
网站建设 2026/4/16 3:13:47

大语言模型在智能家居情境理解中的应用探索

大语言模型在智能家居情境理解中的应用探索 关键词:大语言模型、智能家居、情境理解、自然语言处理、智能交互 摘要:本文深入探索了大语言模型在智能家居情境理解中的应用。首先介绍了相关背景,包括目的范围、预期读者等。详细阐述了核心概念及联系,通过文本示意图和Mermai…

作者头像 李华
网站建设 2026/4/23 12:53:33

C++项目推荐-真正可以媲美redis的kv存储项目-包括性能如何逐步优化

项目目标 协议兼容: 支持标准RESP协议,兼容redis-cli工具高性能: 单机QPS达5万,AOF开启后仍保持高性能完整功能: 数据结构、持久化、过期、主从复制教学导向: 代码清晰,文档详细,适合学习 技术栈 语言: C17网络: epoll事件驱动…

作者头像 李华
网站建设 2026/4/23 16:11:45

计算机Java毕设实战-基于springboot+BS构架的失物招领系统设计与实现失物信息管理【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/23 11:32:31

Java与Python:谁将主宰未来编程?

关于Java是否会被Python取代的问题,需要从多个维度进行客观分析:技术特性对比性能与类型系统Java作为强类型静态编译语言,在大型企业级应用中的性能优势显著(如JVM的即时编译优化)。其严格的类型检查降低了运行时错误率…

作者头像 李华