Nginx 代理服务器核心配置 + 反向代理 + 负载均衡全解析
前言
在高并发 Web 开发场景中,Nginx 早已成为不可或缺的核心组件,作为高性能的 HTTP 服务器 / 反向代理服务器,它能支撑 5 万并发连接且资源消耗极低,同时还能完美解决静态资源部署、跨域、负载均衡等实际开发问题。本文将从 Nginx 基础概述出发,逐步讲解安装配置、核心模块、反向代理、负载均衡等核心知识点,结合实战案例让你快速上手 Nginx,玩转企业级 Web 服务部署。
一、Nginx 核心概述
1.1 什么是 Nginx
Nginx 是由俄罗斯程序员伊戈尔・西索夫开发的高性能 HTTP 服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,核心优势是高并发、低资源消耗、运行稳定。
注意:Nginx 仅支持发布静态项目,动态 Web 项目需搭配 Tomcat 等容器使用。
1.2 核心应用场景
Nginx 的核心能力覆盖开发与部署全流程,也是企业中最常用的功能点:
- HTTP 静态服务器:独立提供 HTTP 服务,高效部署静态资源(HTML、CSS、JS、图片等);
- 虚拟主机:一台物理服务器虚拟出多个网站,节省服务器资源,适用于个人 / 中小企业站点部署;
- 反向代理 + 负载均衡:解决单服务器高并发瓶颈,将请求分摊到多台后端服务器,避免单节点宕机;
- 解决跨域:轻松处理前后端分离项目中的跨域问题;
- 动静分离:将静态请求和动态请求分离,静态资源由 Nginx 直接返回,动态请求转发至后端服务,减少请求延时和服务消耗,且动态服务不可用时静态资源不受影响。
二、Nginx 安装与基础操作
2.1 下载与安装
Nginx 官方下载地址:http://nginx.org/en/download.html,提供主线版(Mainline)和稳定版(Stable),推荐生产环境使用稳定版。安装方式极其简单:解压即可使用,注意解压路径不要包含中文和空格,避免运行报错。
2.2 核心目录结构
以 Nginx 1.20.1 为例,解压后核心目录及作用如下,掌握目录结构是后续配置的基础:
plaintext
nginx-1.20.1/ ├── conf/ # 所有配置文件目录,核心为nginx.conf ├── contrib/ # 开源爱好者共享的代码 ├── docs/ # 官方文档资料 ├── html/ # 默认站点目录,存放默认首页和错误页面 ├── logs/ # 日志目录,包含访问日志、错误日志、PID文件 ├── temp/ # 运行时临时文件目录 └── nginx.exe # Windows下可执行程序,用于启动/停止服务conf 目录核心文件:
nginx.conf:Nginx 主配置文件,日常所有配置修改均在此文件;mime.types:配置 HTTP 请求的媒体类型;fastcgi.conf/params:FastCGI 相关参数配置,用于对接动态服务。
html 目录核心文件:
index.html:Nginx 默认首页,启动成功后访问localhost即可看到;50x.html:5xx 系列错误的优雅展示页面。
2.3 常用操作命令
需在 Nginx 根目录下打开命令行执行,Windows 环境核心命令如下,是日常运维的高频操作:
bash
运行
start nginx # 启动Nginx服务 nginx -s stop # 强制关闭Nginx服务 nginx -s reload # 重启Nginx(配置文件修改后需执行) nginx -t # 检查配置文件语法是否正确(必用,避免配置错误导致启动失败)2.4 启动验证
双击nginx.exe或执行start nginx启动后,打开浏览器输入http://localhost或http://localhost:80,若看到Welcome to nginx!页面,说明启动成功。
注意:Nginx 是多进程程序,启动后会在任务管理器中看到多个 nginx.exe 进程。
三、Nginx 核心配置文件解析
Nginx 的核心配置文件为conf/nginx.conf,配置结构分为四个核心部分,且存在继承关系:main(全局) > http > server > location,upstream(负载均衡)不参与继承。整体结构框架:
nginx
# 全局配置:与具体业务无关的基础参数 main { worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; } # 工作模式配置:处理连接的核心参数 events { worker_connections 1024; } # HTTP服务核心配置:可包含多个server http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # 负载均衡配置:定义后端服务器集群 upstream 集群名称 { server 后端服务器地址1; server 后端服务器地址2; } # 虚拟主机/站点配置:一个server对应一个站点,可配置多个 server { listen 80; # 监听端口 server_name localhost; # 主机名/域名/IP error_page 500 502 503 504 /50x.html; # 错误页面配置 # URL匹配配置:一个server可包含多个location location URL表达式 { # 请求处理/转发规则 } } }3.1 各模块核心配置说明
(1)main 全局模块
配置 Nginx 运行的基础参数,与具体 HTTP / 代理服务无关:
worker_processes 1:工作进程数,建议值为 CPU 的线程数,最大化利用 CPU 资源;error_log logs/error.log:全局错误日志路径,日志级别包含 debug、info、notice、warn、error、crit;pid logs/nginx.pid:Nginx 进程 PID 文件路径,记录进程 ID。
(2)events 工作模式模块
配置 Nginx 的连接处理能力:
worker_connections 1024:单个工作进程最大并发连接数,建议配置 1 万 - 5 万,结合服务器硬件调整。
(3)http 核心模块
配置 HTTP 服务的通用参数,所有 server 均继承此模块配置:
include mime.types:引入媒体类型配置,让 Nginx 识别不同文件类型;sendfile on:开启高性能数据传输模式,提升静态资源访问速度;keepalive_timeout 65:HTTP 连接保持时间,单位秒,减少频繁建立连接的消耗。
(4)server 虚拟主机模块【重点】
一个 http 模块中可配置多个 server,一个 server 对应一个独立站点 / 虚拟主机,核心配置:
listen 端口:站点监听的端口,默认 80,多个虚拟主机需配置不同端口;server_name:站点的主机名,可配置localhost、域名(如www.xxx.com)、IP 地址;error_page 错误码 /页面路径:配置错误页面,如 502 错误跳转到 50x.html。
(5)location URL 匹配模块【重点】
匹配客户端的请求 URL,根据规则处理 / 转发请求,一个 server 可包含多个 location,核心语法:
nginx
location / { root html; # 静态资源根目录 index index.html index.htm; # 默认首页,按顺序匹配 }/:匹配根目录下的所有请求;root 目录:指定静态资源的根目录;index:配置站点的默认首页,多个页面按顺序匹配。
3.2 静态网站部署实战
将静态项目(HTML、CSS、JS、图片等)的所有文件直接复制到 Nginx 的 html 目录,启动 / 重启 Nginx 后,访问http://localhost:端口即可直接访问,是最简单的静态站点部署方式。
3.3 虚拟主机配置实战
实现一台 Nginx 服务器部署多个静态站点,核心是配置多个 server,监听不同端口,指定不同的资源根目录。
需求
在 Nginx 中部署两个站点:校园网(campus)、旅游网(travel),分别通过localhost:81和localhost:82访问。
配置步骤
- 在 Nginx 根目录下创建
campus和travel文件夹,分别放入对应站点的静态文件; - 修改
nginx.conf,添加两个 server 配置:
nginx
http { # 原有通用配置不变 server { listen 81; server_name localhost; location / { root campus; # 指向校园网资源目录 index index.html; } } server { listen 82; server_name localhost; location / { root travel; # 指向旅游网资源目录 index index.html; } } }- 执行
nginx -t检查配置语法,无错误后执行nginx -s reload重启 Nginx; - 访问测试:
http://localhost:81访问校园网,http://localhost:82访问旅游网。
四、Nginx 反向代理详解
4.1 代理的分类与核心区别
代理分为正向代理和反向代理,核心区别是代理的对象不同,且代理哪端就隐藏哪端的真实地址,这是理解代理的关键:
表格
| 代理类型 | 代理对象 | 核心作用 | 隐藏对象 | 典型场景 |
|---|---|---|---|---|
| 正向代理 | 客户端 | 替客户端向服务器发起请求 | 真实客户端地址 | 网络代理工具、科学上网 |
| 反向代理 | 服务器 | 替服务器接收客户端请求,转发至后端真实服务器 | 真实服务器地址 | 负载均衡、站点部署、跨域解决 |
4.2 反向代理核心概念
反向代理是 Nginx 的核心功能,客户端向 Nginx 代理服务器发起请求,Nginx 将请求转发给后端的真实服务器(如 Tomcat),服务器处理后将结果返回给 Nginx,再由 Nginx 返回给客户端。客户端仅知道 Nginx 的地址,并不知道后端真实服务器的存在,既提升了服务器的安全性,又能实现请求的分发。
4.3 反向代理核心适用场景
- 负载均衡:将请求分摊到多台后端服务器,解决高并发瓶颈;
- 提升安全性:隐藏后端服务器 IP,作为应用层防火墙抵御 DoS/DDoS 等攻击;
- 性能优化:提供缓存服务、SSL 加密加速、数据压缩,提升客户端访问速度;
- 外网发布:为局域网内的服务器集群提供 NAT 穿透,实现外网访问;
- 统一管控:实现统一的访问权限控制、上传下载速度控制。
4.4 反向代理实战(对接 Tomcat)
需求
将部署在 Tomcat(8080 端口)的旅游网动态项目,通过 Nginx(80 端口)反向代理访问,即访问http://localhost等价于访问http://localhost:8080。
准备工作
- 将旅游网项目部署到 Tomcat 的 ROOT 目录;
- 启动 Tomcat,验证
http://localhost:8080可正常访问项目。
Nginx 配置步骤
- 修改
nginx.conf,添加upstream并修改 server 的 location 配置:
nginx
http { # 定义后端Tomcat集群,此处仅一台服务器 upstream tomcat-travel { server 127.0.0.1:8080; } server { listen 80; server_name localhost; location / { # 反向代理至后端集群 proxy_pass http://tomcat-travel; index index.html; } } }- 执行
nginx -t检查配置,无错误后nginx -s reload重启 Nginx; - 访问测试:输入
http://localhost,即可正常访问 Tomcat 上的旅游网项目。
五、Nginx 负载均衡实战
5.1 负载均衡核心概念
负载均衡(Load Balance)是将高并发的请求均衡分摊到多台后端操作单元(如 Tomcat),协同完成工作任务,解决单服务器的并发瓶颈和单点故障问题。
- Tomcat 默认并发数仅 300-500,超过后会出现请求无响应、内存溢出等问题;
- Nginx 最大并发数可达 50000,理论上可按 1:100 的比例搭配 Tomcat,完美解决高并发问题。
5.2 负载均衡的实现方式
目前主流的负载均衡实现方式有三种,企业中以软件负载均衡为主:
- 基于 DNS 的负载均衡:将一个域名映射到多个 IP,DNS 随机分配 IP 实现请求分发,优点是简单,缺点是无法感知服务器状态;
- 基于硬件的负载均衡:如 F5 设备,性能强、功能全,支持多种算法,缺点是价格昂贵,适用于大型企业;
- 基于软件的负载均衡:如 Nginx、LVS、HAProxy,免费开源、配置简单、灵活性高,支持二次开发,是互联网企业的首选。
5.3 负载均衡实战(多 Tomcat 集群)
需求
将旅游网项目部署到 3 台 Tomcat(8080、8081、8082),通过 Nginx 负载均衡将请求分摊到 3 台服务器,实现高并发支撑。
准备工作
- 复制 3 个 Tomcat 实例,分别修改端口为 8080、8081、8082,避免端口冲突;
- 均部署旅游网项目,为区分服务器,在项目首页标题添加对应端口标记;
- 分别启动 3 台 Tomcat,验证各端口均可正常访问。
Nginx 配置步骤
- 修改
nginx.conf,配置upstream包含 3 台 Tomcat,location 指向该集群:
nginx
http { # 定义Tomcat集群,包含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; } } }- 检查配置并重启 Nginx;
- 访问测试:输入
http://localhost,多次刷新页面,会交替显示 3 台 Tomcat 的页面,实现请求的均匀分摊。
5.4 Nginx 负载均衡核心策略【重点】
Nginx 提供多种负载均衡策略,可根据后端服务器的性能、业务需求灵活选择,默认策略为轮询。
(1)轮询(默认)
- 规则:请求按顺序依次转发给后端服务器,各服务器请求次数均匀;
- 适用场景:所有后端服务器性能一致;
- 配置:无需额外配置,upstream 中直接列出 server 即可。
(2)权重(weight)
- 规则:为后端服务器设置权重,权重越高,接收的请求数越多;
- 适用场景:后端服务器性能不一致(如高配服务器权重高,低配权重低);
- 配置示例:
nginx
upstream tomcat-nginx { server 127.0.0.1:8080 weight=1; # 权重1,接收1份请求 server 127.0.0.1:8081 weight=2; # 权重2,接收2份请求 server 127.0.0.1:8082 weight=3; # 权重3,接收3份请求 }说明:总权重为 6,8080 占 1/6,8081 占 2/6,8082 占 3/6。
(3)IP 哈希(ip_hash)
- 规则:根据客户端 IP 进行哈希计算,同一个客户端的所有请求始终转发到同一台后端服务器;
- 核心作用:会话保持,解决客户端会话数据不一致的问题;
- 配置示例:
nginx
upstream tomcat-nginx { ip_hash; # 开启IP哈希策略 server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=2; }注意:IP 哈希性能较低,企业中更推荐使用Token实现会话跟踪。
(4)最少连接数(least_conn)
- 规则:将请求转发给当前活跃连接数最少的后端服务器;
- 适用场景:后端服务器处理请求的耗时不一致,避免某台服务器因耗时久导致连接堆积;
- 配置示例:
nginx
upstream tomcat-nginx { least_conn; # 开启最少连接数策略 server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=2; }(5)响应时间最少(fair,第三方)
- 规则:统计后端服务器的平均请求处理时间,将请求转发给响应时间最短的服务器;
- 特点:属于第三方策略,需额外安装模块,更贴合实际业务的性能需求;
- 配置示例:
nginx
upstream tomcat-nginx { fair; # 开启响应时间最少策略 server 127.0.0.1:8080 weight=1; server 127.0.0.1:8081 weight=2; }六、总结
Nginx 作为高性能的轻量级服务器,以高并发、低消耗、配置灵活的优势成为企业级 Web 开发的标配,本文从基础到实战,讲解了 Nginx 的核心知识点:
- 基础层面:掌握安装、目录结构、常用命令,是后续配置的前提;
- 配置层面:理解
main-http-server-location-upstream的核心结构,掌握静态站点和虚拟主机部署; - 核心功能:区分正向代理和反向代理,掌握反向代理的配置和实战,实现与动态服务的对接;
- 高级应用:理解负载均衡的核心意义,掌握多种负载均衡策略,根据业务场景灵活选择,解决高并发瓶颈。
Nginx 的功能远不止于此,后续还可深入学习 Nginx 的缓存配置、SSL 证书配置(HTTPS)、跨域配置、限流配置等高级功能,熟练掌握 Nginx 将大幅提升你的服务部署和运维能力,成为后端开发 / 运维的必备技能。