Nginx反向代理与负载均衡实战配置:Nginx反向代理和负载均衡配置教程,含HTTPS和缓存优化方案。本文为tutorial类教程,发布于2026-03-27,已有4次阅读。由ONE社区整理发布,所有教程内容免费开放。
Nginx反向代理与负载均衡实战配置
Nginx是全球使用最广泛的Web服务器和反向代理服务器。掌握Nginx的反向代理和负载均衡配置,是运维和后端开发者的必备技能。本文从基础概念到生产级配置,全面讲解Nginx的核心用法。
反向代理基础
什么是反向代理
反向代理是指代理服务器接收客户端请求,然后将请求转发给后端的真实服务器,并将服务器的响应返回给客户端。客户端不知道实际处理请求的是哪台服务器。与正向代理(如VPN代理用户访问外部网站)相反,反向代理是代理服务器端。
反向代理的价值
反向代理提供了多重价值:隐藏后端服务器真实IP提升安全性、统一入口简化SSL证书管理、实现负载均衡提高系统容量、静态资源缓存降低后端压力、通过Gzip压缩减少传输流量。几乎所有的现代Web架构都离不开反向代理。
基础反向代理配置
最简配置
Nginx反向代理的核心指令是proxy_pass。在server块中配置location和proxy_pass即可将请求转发到后端服务。例如将所有请求转发到运行在3000端口的Node.js应用。
关键配置项包括:proxy_set_header Host $host(传递原始域名)、proxy_set_header X-Real-IP $remote_addr(传递真实客户端IP)、proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for(传递代理链路信息)、proxy_set_header X-Forwarded-Proto $scheme(传递协议信息)。
路径匹配规则
location的匹配规则决定了哪些请求会被代理。精确匹配(= /path)优先级最高,前缀匹配(/api/)按最长匹配原则,正则匹配(~ 或 ~*)按配置顺序。合理的路径规则设计可以将不同的URL路由到不同的后端服务,实现微服务架构的网关功能。
WebSocket代理
WebSocket连接需要额外的配置支持。需要添加proxy_http_version 1.1、proxy_set_header Upgrade $http_upgrade和proxy_set_header Connection "upgrade"三个指令。同时注意设置proxy_read_timeout为较大的值(如3600s),防止空闲的WebSocket连接被Nginx超时断开。
负载均衡配置
upstream定义
使用upstream块定义一组后端服务器。在upstream中列出所有后端服务器的地址和端口,然后在proxy_pass中引用这个upstream名称。Nginx会自动将请求分发到这些服务器上。
负载均衡策略
轮询(默认):按顺序将请求依次分发到每台服务器,适合服务器配置相同的场景。加权轮询:通过weight参数设置服务器权重,配置好的服务器分配更多请求。IP哈希:根据客户端IP地址进行哈希分配,确保同一客户端的请求总是发送到同一台服务器,适合有状态的会话场景。最少连接(least_conn):将请求发送到当前活跃连接数最少的服务器。
健康检查
配置max_fails和fail_timeout参数实现被动健康检查。当一台服务器在指定时间内失败次数达到阈值时,Nginx自动将其标记为不可用,暂时不分发请求到该服务器。超过fail_timeout时间后会重新尝试。Nginx Plus版本还支持主动健康检查。
会话保持
对于需要会话保持的应用,有几种方案:ip_hash确保同一IP访问同一后端;sticky cookie(Nginx Plus)基于cookie进行路由;或者将session存储到共享存储(如Redis),从架构上解决session共享问题,这是推荐的方案。
性能优化配置
缓冲与缓存
proxy_buffering开启后端响应缓冲,Nginx先将完整响应缓存到本地再发送给客户端,避免慢客户端拖慢后端。proxy_cache配置反向代理缓存,将后端响应缓存到Nginx本地磁盘,减少后端请求压力。设置合理的缓存策略(缓存时间、缓存条件、缓存大小限制)是性能优化的关键。
Gzip压缩
开启Gzip压缩可以减少50-70%的文本传输量。配置gzip on启用压缩,gzip_types指定需要压缩的MIME类型(通常包括text/html、text/css、application/javascript、application/json等),gzip_min_length设置最小压缩大小(建议256字节以上),gzip_comp_level设置压缩级别(建议4-6,平衡压缩率和CPU消耗)。
连接优化
keepalive_timeout控制客户端连接保持时间、proxy_connect_timeout设置后端连接超时、proxy_read_timeout设置后端响应超时。对于高并发场景,增大worker_connections和优化worker_processes配置。使用epoll事件模型(Linux)获得最佳并发性能。
安全配置
速率限制
使用limit_req_zone和limit_req实现请求速率限制,防止恶意请求或DDoS攻击。配置限制规则时设置合理的burst值允许短时突发流量,nodelay参数立即处理突发请求而不排队等待。
访问控制
通过allow/deny指令限制特定IP或IP段的访问。使用auth_basic实现HTTP基本认证保护后台管理页面。通过自定义HTTP头(如X-Bot-Secret)实现API接口的简单认证。
总结
Nginx的反向代理和负载均衡是构建高可用Web服务的基石。从单机反向代理到多机负载均衡,Nginx提供了灵活强大的配置能力。建议在开发阶段就引入Nginx作为前端代理,提前熟悉各项配置,为后续的生产部署和性能优化打好基础。