目录
一、前言
二、nginx是什么?
三、nginx跟前端和后端springbot是什么关系?
四、怎么知道有没有装nginx?
五、反向代理是什么意思
一、前言
仅供参考,未经实验验证,但回答了一些关键问题。关系如下图,实际上就是一个管理前后端的,因为后端服务器可能不止一台,有可能是一个集群,那么就需要nginx做负载均衡。
┌─────────────┐
│ 用户浏览器 │
└──────┬──────┘
│
▼
┌─────────────┐ ┌─────────────────┐
│ Nginx │────▶│ 前端静态资源 │
│ (入口网关) │ │ (HTML/CSS/JS) │
│ │ └─────────────────┘
│ ┌───────┐ │
│ │ 反向代理 │◀────┐
│ └───────┘ │ │
└──────┬──────┘ │
│ │
▼ │
┌─────────────┐ │
│ Spring Boot │─────┘
│ 后端服务 │ (API 请求 /api/*)
│ (Java应用) │
└─────────────┘
二、nginx是什么?
Nginx(发音 "engine-x")是一款高性能的 Web 服务器/反向代理服务器。
核心功能
| 静态资源服务 | 托管 HTML、CSS、JS、图片等文件 |
| 反向代理 | 把请求转发给后端应用(如 Node.js、Python、Java) |
| 负载均衡 | 多台服务器之间分发流量 |
| HTTPS/SSL | TLS 加密、证书管理 |
| 缓存加速 | 缓存静态内容,减轻后端压力 |
为什么流行?
| 高并发 | 事件驱动架构,C10K 问题(万级并发)轻松处理 |
| 低内存 | 比 Apache 更省资源 |
| 配置简单 | 语法清晰,上手快 |
| 热部署 | 不停机更新配置 |
| 生态丰富 | 模块多,社区活跃 |
典型使用场景
用户 → Nginx → 静态文件(直接返回)
↓
动态请求 → 转发给后端(Node.js/Python/PHP/Java)
↓
多台服务器 → 负载均衡分发
简单配置示例
# /etc/nginx/nginx.conf 或 sites-enabled/default
server {
listen 80;
server_name example.com;
# 静态文件
location / {
root /var/www/html;
index index.html;
}
# API 反向代理到后端
location /api/ {
proxy_pass http://localhost:3000;
}
}
常用命令
# 安装
sudo apt install nginx # Ubuntu/Debian
sudo yum install nginx # CentOS/RHEL
# 启停管理
sudo systemctl start nginx # 启动
sudo systemctl stop nginx # 停止
sudo systemctl reload nginx # 热重载配置(不中断服务)
# 测试配置语法
sudo nginx -t
与 Apache 对比
| 架构 | 事件驱动(异步) | 进程/线程驱动 |
| 静态资源 | ⭐⭐⭐ 极快 | ⭐⭐ 一般 |
| 动态内容 | 需配合后端 | 模块直接运行(如 mod_php) |
| 配置复杂度 | 简单 | 较复杂 |
| .htaccess | 不支持 | 支持 |
| 适用场景 | 高并发、反向代理 | 复杂配置、共享主机 |
一句话总结
Nginx = 高性能的"交通指挥员",专门负责接收用户请求,能直接响应的就自己处理(静态文件),需要动态处理的转发给后端应用,还能把流量分摊到多台服务器。
现在绝大多数网站架构里都有它的身影。
三、nginx跟前端和后端springbot是什么关系?
Nginx 与前端、Spring Boot 后端的关系可以用一张图说明:
典型架构图
┌─────────────┐
│ 用户浏览器 │
└──────┬──────┘
│
▼
┌─────────────┐ ┌─────────────────┐
│ Nginx │────▶│ 前端静态资源 │
│ (入口网关) │ │ (HTML/CSS/JS) │
│ │ └─────────────────┘
│ ┌───────┐ │
│ │ 反向代理 │◀────┐
│ └───────┘ │ │
└──────┬──────┘ │
│ │
▼ │
┌─────────────┐ │
│ Spring Boot │─────┘
│ 后端服务 │ (API 请求 /api/*)
│ (Java应用) │
└─────────────┘
三者分工
| 入口层 | Nginx | 接收所有请求,分流处理 |
| 前端 | Vue/React/Angular 打包后的静态文件 | 用户界面、交互逻辑 |
| 后端 | Spring Boot (Java) | 业务逻辑、数据库操作、API 接口 |
Nginx 的具体作用
1. 托管前端静态资源
server {
listen 80;
server_name myapp.com;
# 前端静态文件
location / {
root /var/www/html/dist; # 前端打包后的 dist 目录
index index.html;
try_files $uri $uri/ /index.html; # 支持前端路由(Vue/React Router)
}
}
2. 反向代理到 Spring Boot
# API 请求转发给后端
location /api/ {
proxy_pass http://localhost:8080; # Spring Boot 默认端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# WebSocket 支持(如有需要)
location /ws/ {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
完整配置示例
server {
listen 80;
server_name example.com;
# 1. 前端静态资源(Vue/React 打包后的 dist)
location / {
root /home/user/myapp/dist;
index index.html;
try_files $uri $uri/ /index.html; # 关键:处理前端路由
}
# 2. 后端 API 代理到 Spring Boot
location /api/ {
proxy_pass http://127.0.0.1:8080;
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}
# 3. 静态资源缓存优化
location ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
为什么这样设计?
| 解耦 | 前后端独立部署,互不影响 |
| 性能 | Nginx 处理静态文件比 Spring Boot 快 10 倍以上 |
| 安全 | 后端不直接暴露公网,Nginx 做统一入口 |
| 扩展 | 多台 Spring Boot 实例时,Nginx 做负载均衡 |
| 路由 | 前端 History 模式路由需要 Nginx 配合 |
部署流程
# 1. Spring Boot 打包运行
./mvnw package
java -jar target/app.jar –server.port=8080
# 2. 前端打包
npm run build
# 生成 dist/ 目录,复制到服务器
# 3. Nginx 配置并启动
sudo nginx -t # 检查配置
sudo systemctl reload nginx
一句话总结
Nginx 是"前台接待":用户请求先到 Nginx,静态文件自己直接给(前端),动态数据转给 Spring Boot(后端),实现前后端分离部署。
四、怎么知道有没有装nginx?
检查系统是否安装 Nginx 的几种方法:
方法 1:检查版本(最直接)
nginx -v # 简版信息
nginx -V # 详细配置参数(大写 V)
| nginx version: nginx/1.18.0 | ✅ 已安装,显示版本 |
| command not found | ❌ 未安装 |
方法 2:检查服务状态
systemctl status nginx # Linux 系统(推荐)
service nginx status # 兼容旧系统
| active (running) | ✅ 已安装且运行中 |
| inactive (dead) | ⚠️ 已安装但未启动 |
| Unit nginx.service could not be found | ❌ 未安装 |
方法 3:检查安装包
# Debian/Ubuntu
dpkg -l | grep nginx
# CentOS/RHEL/Fedora
rpm -qa | grep nginx
# Arch
pacman -Q | grep nginx
# 通用(如有)
which nginx
whereis nginx
方法 4:检查进程和端口
# 看进程
ps aux | grep nginx
# 看端口(Nginx 默认 80/443)
sudo netstat -tlnp | grep nginx
sudo ss -tlnp | grep nginx
方法 5:直接访问测试
curl http://localhost # 本机测试
curl -I http://localhost # 只看响应头
或浏览器访问服务器 IP,看到 "Welcome to nginx!" 页面即确认。
快速诊断脚本
#!/bin/bash
echo "=== Nginx 检查 ==="
echo -e "\\n1. 版本检查:"
nginx -v 2>/dev/null || echo "❌ 未安装"
echo -e "\\n2. 服务状态:"
systemctl status nginx –no-pager 2>/dev/null | head -5 || echo "❌ 无服务"
echo -e "\\n3. 进程检查:"
ps aux | grep "[n]ginx" || echo "❌ 无进程"
echo -e "\\n4. 端口监听:"
sudo ss -tlnp | grep -E ":(80|443)" || echo "❌ 未监听 80/443"
结果速查表
| nginx -v | 显示版本 | command not found |
| systemctl status | 显示状态 | Unit not found |
| which nginx | 显示路径 | 无输出 |
| curl localhost | 返回 HTML | Connection refused |
五、反向代理是什么意思
反向代理(Reverse Proxy)是指代理服务器接收客户端请求,转发给内部服务器,再将响应返回给客户端。
正向代理 vs 反向代理
| 代理对象 | 代理客户端 | 代理服务器 |
| 客户端是否知情 | 知道(需配置代理) | 不知道(以为是直接访问) |
| 用途 | 翻墙、匿名、加速访问 | 负载均衡、安全防护、隐藏后端 |
| 典型场景 | 公司内网通过代理上网 | 用户访问网站 → Nginx → 后端服务器 |
正向代理:客户端 ◀── 代理 ──▶ 外网(Google等)
(帮你出去)
反向代理:客户端 ──▶ 代理 ──▶ 内部服务器
(帮你进来)
反向代理的核心作用
用户浏览器 ──▶ Nginx(反向代理) ──▶ 后端服务器集群
1.2.3.4:80 ├─▶ Spring Boot A:8080
├─▶ Spring Boot B:8081
└─▶ Spring Boot C:8082
| 隐藏后端 | 用户只接触 Nginx,不知道后端真实 IP 和端口 |
| 负载均衡 | 一台 Nginx 分发到多台后端,分摊压力 |
| 安全防护 | 统一入口做防火墙、限流、防 DDoS |
| SSL 终端 | HTTPS 在 Nginx 层处理,后端用 HTTP |
| 静态加速 | 图片/CSS/JS 直接由 Nginx 返回,不打扰后端 |
| 路径统一 | 多个后端服务整合到统一域名/端口 |
生活类比
| 酒店前台 | 客人(用户)只找前台(Nginx),前台再联系具体服务员(后端) |
| 外卖平台 | 顾客(用户)只通过美团(Nginx)下单,不知道具体哪家餐厅(后端)做的 |
| 公司前台 | 访客(用户)先到前台登记,前台再通知内部员工(后端) |
Nginx 反向代理配置示例
server {
listen 80;
server_name api.example.com;
# 用户访问 /api/user → 转发到用户服务
location /api/user {
proxy_pass http://localhost:8081;
}
# 用户访问 /api/order → 转发到订单服务
location /api/order {
proxy_pass http://localhost:8082;
}
# 用户访问 / → 转发到主应用
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host; # 传递原始域名
proxy_set_header X-Real-IP $remote_addr; # 传递真实IP
}
}
关键配置指令
| proxy_pass | 转发目标地址(后端服务器) |
| proxy_set_header | 修改/添加请求头传给后端 |
| proxy_connect_timeout | 连接超时时间 |
| proxy_read_timeout | 读取响应超时时间 |
一句话总结
反向代理 = "中间商",对外统一接待,对内分发任务,用户不知道背后是谁在处理。
Nginx 是最流行的反向代理工具,80% 以上的网站架构都用它做入口层。





