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

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

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

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

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

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

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

文章目录

前言

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

Read more

AI Prompt 工程完全指南:从入门到精通的提示词设计艺术​

AI Prompt 工程完全指南:从入门到精通的提示词设计艺术​

🔥AI Prompt 工程完全指南:从入门到精通的提示词设计艺术 在 AI 大模型(如 GPT、Claude、通义千问)的应用生态中,Prompt(提示词)是人类与 AI 沟通的桥梁,更是解锁模型能力的核心钥匙。同样的 AI 模型,不同的 Prompt 设计可能导致天差地别的输出结果 —— 优秀的 Prompt 能让 AI 精准完成复杂任务,而模糊的 Prompt 只会得到无效或错误的响应。 本文将从 Prompt 基础概念出发,系统讲解 Prompt 设计原则、实战技巧、进阶方法和行业最佳实践,帮助开发者从「随意输入提示」升级为「专业 Prompt 工程师」。 🚀 一、什么是 AI Prompt?

愚人节最大“乌龙”:不是玩笑!Claude Code 51万行源码裸奔,AI独角兽栽在低级失误里

愚人节最大“乌龙”:不是玩笑!Claude Code 51万行源码裸奔,AI独角兽栽在低级失误里

4月1日愚人节,全网都在分辨真假段子、花式整活,但AI圈炸锅的Claude Code源码泄露事件,却半点玩笑成分都没有——这是一场由前端基础失误引发的史诗级技术事故,更是估值数百亿AI独角兽Anthropic,在全球开发者面前上演的大型“社死现场”。 3月31日,安全研究员Chaofan Shou在X平台曝出重磅消息:Anthropic官方npm包中,因漏删调试文件,直接把Claude Code的完整源码公之于众。消息发酵恰逢愚人节,无数人第一反应以为是恶搞,可事实狠狠打脸:51.2万行TypeScript代码、1900+源文件、40+功能模块,连同一堆未官宣的黑科技,全在网上“裸奔”了。 先划重点:这真不是愚人节彩蛋! 很多人第一反应:“今天4月1日,该不会是Anthropic搞的营销彩蛋吧?” 直接实锤:这是100%的真实事故,绝非策划。 1. 官方紧急止损:Anthropic第一时间下架泄露版本v2.1.88、删除npm包中的问题文件,还对GitHub上的镜像仓库发起DMCA下架投诉——若是彩蛋,完全没必要拼命阻止传播。 2. 二次翻同款车祸:

半小时用OpenClaw搭一套AI量化系统:开源三件套实测分享

半小时用OpenClaw搭一套AI量化系统:开源三件套实测分享

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话:见过太多人想用量化,却被各种复杂的代码和环境配置劝退。无论你是刚开始接触数据科学的学生,还是想提升自己投资工具箱的实践者,今天就把我用最近很火的OpenClaw如何搭建AI量化系统的过程完整分享给你。 自从有了OpenClaw后,说实话,个人搭建一套量化系统没你想的那么难。半小时,三行代码,不花钱。 一、先说效果:我一次跑通的回测 先别急着看代码,咱们看看效果。 用这套方案跑了一趟回测,最终跑出来的结果是 59%。当然,这是回测数据,不代表实盘收益,但足以说明这套开源工具链的潜力。 你可能要问我这个收益是怎么算的。说白了就是:系统基于历史数据,按照你设定的策略规则模拟交易,最后算出来的年化结果。 核心观点:回测收益 ≠ 实盘收益,但回测能帮你验证策略逻辑是否靠谱。 二、开源三件套:数据 + 框架 + AI 这套方案的精髓在于开源三件套的组合搭配。用个表格梳理清楚: 组件作用开源地址数据源选股基础数据供给长桥 SDK / AKshar

基于LangGraph实现模块化Skills型AI Agent

基于LangGraph+DeepSeek+Serper 实现模块化Skills型AI Agent 在AI Agent的落地实践中,模块化Skills设计是提升Agent可扩展性、可维护性的核心方案——将搜索、计算、文件处理等能力封装为独立Skills,Agent可根据需求自主调用,无需修改核心流程。本文将基于LangGraph、DeepSeek大模型和Serper搜索工具,手把手带你实现一个具备工具调用能力的Skills型AI Agent,同时解决开发中常见的MRO冲突、Pydantic验证等问题,代码可直接复制运行。 一、前言:为什么选择Skills型Agent? 传统AI Agent多采用「硬编码工具调用」的方式,新增能力需修改核心逻辑,耦合度高且难以维护。而Skills型Agent将能力拆分为独立的Skill模块,每个Skill遵循统一接口,具备以下优势: 1. 模块化解耦:新增/修改Skill无需改动Agent核心流程,即插即用; 2. 智能决策:大模型自主判断是否调用Skill、调用哪个Skill,无需人工干预; 3. 可扩展性强:支持搜索、计算、代码解释、数