Nginx代理服务器完整教程之反向代理、负载均衡、动静分离实战
一、Nginx概述
1.1 什么是Nginx
Nginx是俄罗斯开发者 Igor Sysoev 开发的高性能HTTP服务器、反向代理服务器,也支持IMAP/POP3邮件代理。 官方测试可支撑5万并发连接,CPU、内存占用极低,稳定性强。
区分:
- Nginx:擅长静态资源,反向代理;本身不能运行Java动态web项目
- Tomcat:Java动态Web容器,可以运行Servlet、JSP动态项目。
1.2 Nginx四大应用场景
- HTTP静态服务器:直接托管html、css、js、图片等静态资源。
- 虚拟主机:一台物理服务器,配置多个域名/端口,对外提供多个独立网站。
- 反向代理 + 负载均衡:请求转发后端Tomcat集群,分摊流量,提升并发与可用性。
- 解决前后端跨域、动静分离。
最佳实践:动静分离
将静态资源(图片、js、css)交给Nginx直接返回;动态请求(接口、业务逻辑)反向代理转发给Tomcat等后端服务。
好处:
- 减轻后端容器压力,提升响应速度;
- 动态服务宕机,静态页面依然可以正常访问。
二、Nginx安装、目录与基础命令
2.1 下载
官网地址:nginx: download
Windows版本直接解压即可,解压路径不要带中文、空格。
2.2 核心目录详解

2.3 常用命令(cmd进入nginx根目录执行)
nginx -t # 检查配置文件语法是否正确,修改配置必执行 start nginx # 启动nginx nginx -s stop # 快速停止nginx nginx -s reload # 平滑重启,加载新配置(不中断现有连接)
启动成功后,可以通过浏览器输入:http://localhost 或者 http://localhost:80 来验证是否成功。
三、nginx.conf配置文件详解

整体四层结构:
main{ # 全局块
http{ # http块
upstream{} # 负载均衡后端服务池
server{ # 虚拟主机,一个server代表一个网站
location{} # url匹配,请求转发规则
}
}
}
关系:
server继承main,location继承server;upstream独立,不继承任何配置。
① main全局块
worker_processes 1; # worker进程数,建议等于CPU核心数 error_log logs/error.log; # 全局错误日志 pid logs/nginx.pid; # pid文件位置
② events块:网络模型
events {
worker_connections 1024; # 单个worker最大并发连接数,建议10000‑50000
}③ http块
http {
include mime.types;
default_type application/octet-stream;
sendfile on; # 开启高效文件传输
keepalive_timeout 65; # http长连接超时时间
# 可以写多个server、upstream
}④ server虚拟主机块
server {
listen 80; # 监听端口
server_name localhost; # 域名/IP
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}⑤ location块(核心)
根据url匹配请求,处理静态资源或者反向代理转发。
location / {
root html; # 静态资源根目录
index index.html index.htm; # 默认访问首页
}
/代表匹配所有请求;root指定静态文件查找目录;index设置默认首页。
四、实战1:静态网站部署 + 虚拟主机
4.1 部署静态网站
将/资料/静态页面/index目录下的所有内容 上传到服务器的nginx/html下即可访问 : 当niginx服务器启动时,访问localhost:80 ,则直接再nginx安装路径下的html中找你要访问的欢迎页面
4.2 虚拟主机:一台服务器跑多个网站
需求:
- 81端口访问完美校园网站
- 82端口访问旅游网站
- 在nginx根目录新建文件夹
wanxiao、travel,放入对应index.html - nginx.conf增加两个server
server {
listen 81;
server_name localhost;
location / {
root wanxiao;
index index.html;
}
}
server {
listen 82;
server_name localhost;
location / {
root travel;
index index.html;
}
}地址栏输入http://localhost:81 可以看到完美校园首页
地址栏输入http://localhost:82 可以看到旅游网首
五、正向代理与反向代理
5.1 什么是代理
代理服务器作为中间中转,客户端不直接访问目标服务器,由代理代为收发报文。分为正向代理、反向代理。
5.2 正向代理
代理客户端,隐藏真实客户端。 典型例子:VPN。

- 客户端明确知道目标服务器是谁;
- 服务端收到请求,只能看到代理服务器IP,不知道真实用户。
客户端 →【正向代理服务器】→ 目标网站
5.3 反向代理【Nginx重点】

代理后端服务器,隐藏真实后端集群。 客户端只访问Nginx,不知道背后Tomcat、微服务集群的真实IP。
浏览器 →【Nginx反向代理】→ 后端Tomcat1/Tomcat2
反向代理价值:
- 隐藏后端服务器IP,提升内网服务安全性;
- 实现负载均衡;
- SSL证书统一卸载;
- 统一权限控制、缓存、压缩;
- 内网服务对外发布。
5.4 Nginx反向代理配置示例
配置反向代理-准备工作
(1) 将travel案例部署到tomcat中(ROOT目录)。
(2)启动TOMCAT,输入网址http://localhost:8080/ 可以看到网站首页
配置反向代理
(1)在Nginx主机修改 Nginx配置文件
upstream tomcat-travel{ # 负载均衡服务器设置:主要用于负载均衡和设置一系列的后端服务器
server 127.0.0.1:8080;
}
server {
listen 80; # 监听的端口
server_name localhost; # 域名或ip
location / { # 访问路径配置
# root index; # 根目录
proxy_pass http://tomcat-travel/travel/;
index index.html; # 默认首页
}
}(2)重新启动Nginx 然后用浏览器测试:http://localhost:80
5、 正向代理和反向代理的区别
最核心的不同在于代理的对象不同。
- 正向代理是代理客户端,反向代理是代理服务器。
- 而根据这核心的区别,我们也可以记住:代理哪端便可以隐藏哪端。
- 正向代理隐藏真实客户端,反向代理隐藏真实服务端。
5.5 正向代理与反向代理核心区别
| 类型 | 代理对象 | 隐藏对象 | 典型案例 |
|---|---|---|---|
| 正向代理 | 代理客户端 | 真实客户端 | VPN |
| 反向代理 | 代理服务端 | 真实后端服务器 | Nginx、网关 |
口诀:代理谁,就隐藏谁。
六、Nginx负载均衡实战
6.1 负载均衡是什么
把用户请求分摊到多台后端服务器,防止单台机器压力过大,提升并发能力与高可用。
负载均衡三种实现方案:
- DNS负载均衡:域名解析返回多个IP;
- 硬件负载均衡:F5,性能强,价格昂贵;
- 软件负载均衡:Nginx、LVS、HAProxy,开源免费,互联网企业主流选择。
6.2 实验环境准备
复制3份Tomcat,端口分别为8080、8081、8082,部署相同项目,修改首页标题用来区分到底访问了哪一台tomcat。
6.3 基础负载均衡配置(默认轮询)
upstream tomcat-nginx {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat-nginx/;
index index.html;
}
}刷新浏览器,请求轮流分发三台tomcat,每台各占1/3流量。
6.4 Nginx负载均衡5种策略
1)轮询(默认)
请求依次分配给各个后端服务器,服务器性能相同时使用。无需额外配置。
2)weight 加权轮询
服务器硬件性能不一样,性能高的机器分配更多流量。weight代表权重。
upstream tomcat-nginx{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
server 127.0.0.1:8082 weight=3;
}3)ip_hash
根据客户端ip哈希,同一个客户端永远访问同一台后端,实现会话保持。
不推荐,微服务优先使用Redis+token保存会话,避免黏滞带来流量不均衡。
upstream tomcat-nginx{
ip_hash;
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
server 127.0.0.1:8082 weight=3;
}4)least_conn 最小连接数
请求转发给当前活跃连接数最少的后端服务器;适合请求耗时差异大的业务。
upstream tomcat-nginx{
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}5)fair(第三方扩展)
根据后端服务器响应时间,响应越快分得越多请求,需要安装fair模块。
upstream tomcat-nginx{
fair;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}七、知识点总结
- Nginx擅长静态资源、反向代理、负载均衡;动态Java项目交给Tomcat。
nginx -t检查配置,nginx -s reload平滑重载配置,生产环境不要用stop。- 核心配置结构:
http -> server(虚拟主机) -> location(URL匹配);upstream定义后端服务池。 - 正向代理代理客户端;反向代理代理后端服务器,Nginx主要用反向代理。
- 负载均衡常用策略:轮询、加权轮询、ip_hash、least_conn最小连接数。
- 动静分离:静态资源Nginx直接返回,动态接口反向代理转发给后端容器。
拓展思考(承接微服务系列)
Nginx属于基础反向代理,只支持静态写死upstream地址; 微服务场景下服务实例会动态扩缩容,于是出现API网关(APISIX、Spring Cloud Gateway),网关对接Nacos/Consul服务发现,动态更新upstream后端列表。
这也是Nginx和微服务网关的核心区别。
到此这篇关于Nginx代理服务器完整教程之反向代理、负载均衡、动静分离实战的文章就介绍到这了,更多相关Nginx代理服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Nginx设置HttpOnly Secure SameSite参数解决Cookie信息丢失
本文主要介绍了Nginx中Cookie缺少SameSite属性的问题,并详细解释了HttpOnly、Secure和SameSite属性的作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-11-11
NGINX 报错 413 Request Entity Too&nbs
本文讲述了处理Nginx因接口数据量过大导致的413错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2025-08-08


最新评论