2025-07-17
常制不可以待变化,一涂不可以应万方,刻船不以索遗剑。一一东晋·葛洪《抱朴子》
前后端分离项目中 Nginx 反向代理实战全解(含跨域配置)
在现代 Web 开发中,前后端分离已成为主流架构模式。无论你是用 Vue、React 还是 Angular,前端项目最终都会 build 成静态资源部署于服务器。与此同时,后端(如 Java、Node.js、Python 等)则单独运行在另一个端口上。如何让前端和后端安全、便捷又高效地“握手”?Nginx 反向代理就是我们的得力助手!
本文以 /ruben/
为接口前缀举例,并特别说明所有路径、域名和目录的位置。还会补充常见 CORS(跨域)配置,助你一次部署无忧。
一、前后端分离架构简介
前后端分离指的是前端(UI、页面渲染等)和后端(业务逻辑、数据处理等)各自独立开发、构建和部署。
这种模式的优点有:
- 职责清晰,协作高效
- 前后端技术选型更自由
- 易于扩展和维护
但实际部署时,前端和后端通常跑在不同端口或服务器上,怎么安全高效地通信?
答案就是 Nginx 反向代理。
二、场景说明与路径变量说明
假定你有如下环境(注意:所有变量名都需要根据自己实际情况替换!):
your_domain.com
:你的服务器域名(可替换为实际域名或 IP,比如www.example.com
或1.2.3.4
)/var/www/your_project/dist
:前端 build 后的静态文件目录(如dist
,具体路径以实际为准)- 后端服务监听
8080
端口(如 http://127.0.0.1:8080,实际端口根据后端配置替换) - 前端请求 API 路径都带
/ruben/
前缀(如/ruben/api/login
)
所有
your_domain.com
、your_project
、/var/www/your_project/dist
、8080
等需根据实际替换!
三、前端 BASE_URL 配置
前端项目中(如 Vue/React),通常通过环境变量或配置文件设置 API 基础路径:
1 |
|
这样,所有接口请求会自动变成 /ruben/xxx
,方便 Nginx 统一代理。
四、Nginx 反向代理配置(含静态资源和跨域支持)
以下配置需将
your_domain.com
、/var/www/your_project/dist
和后端端口8080
替换为你的实际路径和服务端口!
1 |
|
详细说明
server_name your_domain.com;
用你的实际域名或服务器公网 IP 替换your_domain.com
。root /var/www/your_project/dist;
指向你前端 build 后的静态资源目录,如dist
,请用实际路径替换。proxy_pass http://127.0.0.1:8080/;
填写你的后端服务监听地址和端口,如本地的8080
。location /ruben/
代理所有以/ruben/
开头的请求到后端,并去掉/ruben/
前缀。rewrite ^/ruben/(.*)$ /$1 break;
把/ruben/api/xxx
重写为/api/xxx
,让后端无需关心前缀。add_header ...
设置跨域(CORS)响应头,允许任意来源访问,也可以根据需要限制为你的前端域名。if ($request_method = 'OPTIONS')
让浏览器的 OPTIONS 预检请求快速返回,提升前端体验。
五、反向代理的好处
- 安全性提升
后端服务不直接暴露公网,Nginx 统一网关,防攻击、防泄漏。 - 跨域问题完美解决
浏览器同源策略下,前端和后端如果不在同一域会有跨域问题。反向代理让一切“看起来”都在同一域,并可灵活配置跨域响应头。 - 路径灵活控制
可以灵活给接口加前缀、做重定向、黑白名单等,后端专注业务,路径映射交给 Nginx。 - 负载均衡与扩展
Nginx 可轻松实现多后端节点的负载均衡,便于后端横向扩展。 - 静态资源加速
Nginx 擅长分发静态资源,响应快,减轻后端压力。
六、常见问题与注意事项
- 前端的 BASE_URL 必须与 Nginx 代理路径一致(如
/ruben/
),否则请求会失败或 404。 rewrite
规则让后端收到“干净”的接口路径,否则后端还得额外解析/ruben/
前缀。- SPA 项目必须加
try_files $uri $uri/ /index.html;
,否则刷新页面会 404。 - 部署后建议用浏览器开发者工具或 curl 检查接口路径和响应头,确保代理和跨域配置生效。
- 所有路径、域名、目录等变量都必须根据你自己的服务器环境进行替换!
Nginx 让前后端分离的项目部署更加优雅,开发更专注,沟通更顺畅。希望这篇博客能帮你少走弯路,快速掌握 Nginx 反向代理和跨域配置的精髓!