Nginx在前后端分离中的作用以及对比

 更新时间:2026年05月22日 08:53:34   作者:bug攻城狮  
文章对比了直接访问(不使用Nginx)与使用Nginx(反向代理)两种方式的特点、优势及应用场景,直接访问简单直接但安全性较低;Nginx增加中间层代理,解决跨域、负载均衡等问题,适合生产环境,建议小型项目直接访问,大项目应推荐使用Nginx以获得更好的性能和安全性

1. 不使用Nginx(直接访问)

前端(Vue) → 直接请求 → Spring Boot后端

特点:

  • 简单直接:开发阶段方便调试
  • 端口 暴露:后端端口直接对外暴露(如8080)
  • 跨域问题:需要后端配置CORS解决跨域
  • 无负载均衡:只能连接单一后端实例
  • 静态资源服务:Spring Boot需要自己服务静态资源(如配置WebMvc)
  • 安全性:缺少额外的安全层保护

2. 使用Nginx(反向代理)

前端(Vue) → Nginx → Spring Boot后端
	↑	 ↑
静态资源		反向代理

主要区别和优势:

维度不使用Nginx使用Nginx
架构前后端直接通信增加中间层代理
跨域处理需后端配置CORSNginx代理自动解决跨域
负载均衡不支持支持多实例负载均衡
静态资源需单独配置或CDNNginx高性能静态服务
性能后端直接处理所有请求静态资源由Nginx处理,减少后端压力
安全性较低隐藏后端端口、防DDoS、限流等
SSL/HTTPS需Spring Boot配置Nginx统一管理SSL证书
部署灵活性灵活性低前后端分离更彻底

3. 典型应用场景对比

场景A:开发环境(常不使用Nginx)

// vue.config.js
devServer: {
	proxy: {
		'/api': {
			target: 'http://localhost:8080', // 直接连Spring Boot
			changeOrigin: true
		}
	}
}

场景B:生产环境(推荐使用Nginx)

# nginx.conf
server {
	listen 80;
	server_name example.com;
	
	# 1. 服务Vue静态文件
	location / {
		root /var/www/vue-app;
		index index.html;
		try_files $uri $uri/ /index.html; # 支持Vue Router history模式
	}
	
	# 2. 反向代理API请求
	location /api/ {
		proxy_pass http://backend-server:8080/;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		
		# 跨域配置
		add_header Access-Control-Allow-Origin *;
		add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
		add_header Access-Control-Allow-Headers 'DNT,User-Agent,X-Requested-With,Content-Type';
		
		# 缓存配置
		proxy_cache my_cache;
		proxy_cache_valid 200 302 10m;
	}
	
	# 3. 负载均衡配置
	upstream backend-server {
		server 192.168.1.101:8080 weight=3; # 权重负载
		server 192.168.1.102:8080 weight=2;
		server 192.168.1.103:8080 backup;# 备用服务器
	}
	
	# 4. 性能优化
	gzip on;# 开启压缩
	gzip_types text/plain application/javascript application/json;
}

4. 具体差异示例

差异1:跨域处理

# Nginx解决跨域(无需修改后端代码)
location /api/ {
	proxy_pass http://localhost:8080/api/;
	add_header Access-Control-Allow-Origin $http_origin always;
	add_header Access-Control-Allow-Credentials true always;
	add_header Access-Control-Allow-Methods 'GET,POST,PUT,DELETE,OPTIONS' always;
	
	# 处理OPTIONS预检请求
	if ($request_method = 'OPTIONS') {
		return 204;
	}
}

差异2:静态资源服务

# Nginx高效服务静态资源(优于Spring Boot)
location /static/ {
	root /var/www/vue-app;
	expires 30d;# 缓存30天
	access_log off;
	
	# 启用gzip压缩
	gzip_static on;
}

差异3:安全加固

# 安全配置(Nginx层面)
server {
	# 隐藏服务器信息
	server_tokens off;
	
	# 限制请求大小
	client_max_body_size 10m;
	
	# 限流
	limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
	
	location /api/ {
	limit_req zone=api burst=20 nodelay;
		proxy_pass http://backend:8080;
	}
}

5. 建议方案

开发环境:

  • 直接连接:Vue devServer代理到Spring Boot
  • 简单快速,便于调试

生产环境(推荐使用Nginx):

  1. Nginx + Vue:服务静态文件
  2. Nginx → Spring Boot集群:反向代理API请求

优点

  • 前后端完全解耦
  • 高性能静态资源服务
  • 负载均衡和高可用
  • 统一的安全策略
  • 易于水平扩展

6. 性能对比数据

指标直接连接Nginx代理
静态资源QPS~1000~5000+
内存占用较低额外占用(约10-50MB)
并发连接数受Spring Boot限制Nginx高性能处理
响应时间直接增加约1-5ms延迟

总结建议

小型项目/原型阶段:可不使用Nginx,简化部署

中大型项目/生产环境:强烈推荐使用Nginx,获得:

  1. 更好的性能(静态资源服务)
  2. 更高的安全性
  3. 更强的扩展性(负载均衡)
  4. 更灵活的部署架构

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 配置nginx转发内网请求到外网的实现示例

    配置nginx转发内网请求到外网的实现示例

    本文主要介绍了配置nginx转发内网请求到外网的实现示例,通过nginx配置代理实现内网对外网接口数据的获取,涉及nginx安装、配置SSL、日志设置和错误排查,感兴趣的可以了解一下
    2024-10-10
  • 在Docker中实现Nginx平滑重启的几种方法

    在Docker中实现Nginx平滑重启的几种方法

    关于平滑重启的意思,就是指已经连接到nginx的请求将继续使用旧的配置,待客户端服务完成后,旧的工作进程将关闭,下次请求将采用新的配置,本文给大家介绍了在Docker中实现Nginx平滑重启的几种方法,需要的朋友可以参考下
    2025-09-09
  • Ansible批量部署Nginx的示例代码

    Ansible批量部署Nginx的示例代码

    这篇文章主要介绍了Ansible批量部署Nginx的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • OpenResty是什么,OpenResty和Nginx的区别?

    OpenResty是什么,OpenResty和Nginx的区别?

    Nginx作为一款轻量级、高性能的Web服务器,传统局限性也很明显:静态配置、逻辑扩展依赖C模块开发,使得它在需要动态业务逻辑的场景中显得捉襟见肘,<BR>而OpenResty的出现,打破了这一僵局,它通过将Lua脚本深度集成到Nginx中,将“静态代理服务器”升级为“动态应用平台”
    2025-04-04
  • nginx代理实现静态资源访问的示例代码

    nginx代理实现静态资源访问的示例代码

    本文主要介绍了nginx代理实现静态资源访问的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Nginx 如何配置强制 HTTP 跳转 HTTPS 并保留原始请求参数

    Nginx 如何配置强制 HTTP 跳转 HTTPS 并保留原始请求参

    这篇文章给大家介绍了Nginx 如何配置强制 HTTP 跳转 HTTPS 并保留原始请求参数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-05-05
  • Nginx下修改WordPress固定链接导致无法访问的问题解决

    Nginx下修改WordPress固定链接导致无法访问的问题解决

    这篇文章主要介绍了Nginx下修改WordPress固定链接导致无法访问的问题解决,同时作者也给出了官方关于修改固定链接的方法,需要的朋友可以参考下
    2015-07-07
  • nginx部署前端vue项目教程

    nginx部署前端vue项目教程

    要在Nginx上部署前端Vue项目,首先在Vue项目根目录构建,将构建文件上传至服务器,并在Nginx配置文件中配置publicPath为/,以确保静态文件正确引用,接着编辑Nginx配置文件,设置相应路径和反向代理等配置,保存后重启Nginx服务
    2025-09-09
  • Nginx部署Vue项目添加访问后缀方式

    Nginx部署Vue项目添加访问后缀方式

    文章介绍了如何根据需要为Vue项目配置不同的访问路径,并通过Nginx进行相应的配置,通过设置`vue.config.js`中的`publicPath`和`route`的`base`为`/app`,并将打包后的文件放入指定目录,然后在Nginx配置中使用`alias`和`try_files`指令来处理路径
    2025-01-01
  • Nginx map 实现时间格式转换的方法

    Nginx map 实现时间格式转换的方法

    最近我们需要把 Nginx 的日志接入到自研的日志采集平台上,但是这个平台只支持 JSON 格式,所以需要把 Nginx 日志格式改成 JSON 格式,这篇文章主要介绍了Nginx map 实现时间格式转换,需要的朋友可以参考下
    2023-09-09

最新评论