news 2026/8/29 7:59:52

Nginx反向代理与负载均衡实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nginx反向代理与负载均衡实战指南

Nginx反向代理与负载均衡实战指南

本文详解Nginx反向代理原理、配置技巧和负载均衡策略,从入门到生产级实践。

前言

Nginx是最流行的Web服务器和反向代理:

  • 全球使用率超过30%
  • 性能强悍,10万+并发轻松
  • 配置灵活,功能丰富

今天来深入讲解Nginx反向代理和负载均衡的实战配置。


一、反向代理基础

1.1 什么是反向代理

正向代理(代理客户端): 客户端 → 代理服务器 → 目标服务器 例如:翻墙工具 反向代理(代理服务端): 客户端 → Nginx → 后端服务器 例如:网站负载均衡

1.2 反向代理的作用

功能说明
负载均衡分发请求到多台后端
SSL终结统一处理HTTPS
缓存加速缓存静态资源
安全隔离隐藏真实服务器
统一入口多服务共用80/443端口

1.3 安装Nginx

# Ubuntu/Debiansudoaptupdatesudoaptinstallnginx -y# CentOSsudoyuminstallepel-release -ysudoyuminstallnginx -y# 启动sudosystemctl start nginxsudosystemctlenablenginx# 验证curlhttp://localhost

二、基础反向代理配置

2.1 最简配置

# /etc/nginx/conf.d/proxy.conf server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:8080; } }

2.2 完整配置模板

server { listen 80; server_name example.com; # 日志 access_log /var/log/nginx/example_access.log; error_log /var/log/nginx/example_error.log; location / { proxy_pass http://127.0.0.1:8080; # 传递真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 超时设置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; # 缓冲设置 proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 4k; } }

2.3 多服务代理

# 不同路径代理到不同服务 server { listen 80; server_name example.com; # 前端静态文件 location / { root /var/www/html; try_files $uri $uri/ /index.html; } # API服务 location /api/ { proxy_pass http://127.0.0.1:3000/; } # 管理后台 location /admin/ { proxy_pass http://127.0.0.1:8000/; } # WebSocket location /ws/ { proxy_pass http://127.0.0.1:9000/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }

三、负载均衡

3.1 负载均衡策略

策略说明适用场景
轮询(默认)依次分发服务器配置相同
加权轮询按权重分发服务器配置不同
IP Hash同IP固定后端需要会话保持
Least Conn最少连接优先长连接场景
Fair响应时间优先需要第三方模块

3.2 轮询配置

upstream backend { server 192.168.1.101:8080; server 192.168.1.102:8080; server 192.168.1.103:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

3.3 加权轮询

upstream backend { server 192.168.1.101:8080 weight=5; # 处理50%请求 server 192.168.1.102:8080 weight=3; # 处理30%请求 server 192.168.1.103:8080 weight=2; # 处理20%请求 }

3.4 IP Hash(会话保持)

upstream backend { ip_hash; server 192.168.1.101:8080; server 192.168.1.102:8080; server 192.168.1.103:8080; }

3.5 最少连接

upstream backend { least_conn; server 192.168.1.101:8080; server 192.168.1.102:8080; server 192.168.1.103:8080; }

3.6 健康检查

upstream backend { server 192.168.1.101:8080 max_fails=3 fail_timeout=30s; server 192.168.1.102:8080 max_fails=3 fail_timeout=30s; server 192.168.1.103:8080 backup; # 备用服务器 } # max_fails: 失败次数阈值 # fail_timeout: 标记不可用时长 # backup: 主服务器都挂了才启用

四、HTTPS配置

4.1 SSL证书配置

server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; # SSL优化 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; } } # HTTP跳转HTTPS server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; }

4.2 Let’s Encrypt自动证书

# 安装certbotsudoaptinstallcertbot python3-certbot-nginx -y# 自动配置sudocertbot --nginx -d example.com# 自动续期sudocertbot renew --dry-run

五、性能优化

5.1 Gzip压缩

http { gzip on; gzip_vary on; gzip_min_length 1024; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; }

5.2 静态文件缓存

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public, no-transform"; }

5.3 代理缓存

http { # 定义缓存区 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; } server { location / { proxy_pass http://backend; # 启用缓存 proxy_cache my_cache; proxy_cache_valid 200 60m; proxy_cache_valid 404 1m; proxy_cache_key "$scheme$request_method$host$request_uri"; # 缓存状态头 add_header X-Cache-Status $upstream_cache_status; } }

5.4 连接优化

http { # 长连接 keepalive_timeout 65; keepalive_requests 1000; # upstream长连接 upstream backend { server 127.0.0.1:8080; keepalive 32; } }

六、跨网络代理场景

6.1 常见场景

场景:公司有多个机房/分支,需要统一入口 ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 总部机房 │ │ 分部A │ │ 分部B │ │ Nginx │ │ 后端服务 │ │ 后端服务 │ │ 192.168.1.1│ │192.168.2.10│ │192.168.3.10│ └─────────────┘ └─────────────┘ └─────────────┘

问题:各机房网络不通,Nginx无法直接代理到分部服务器。

6.2 组网解决方案

使用组网软件(如星空组网)打通网络:

组网后: ┌─────────────┐ │ Nginx │ │ 10.10.0.1 │←─┐ └─────────────┘ │ │ 组网虚拟局域网 ┌─────────────┐ │ │ 分部A │←─┤ │ 10.10.0.2 │ │ └─────────────┘ │ │ ┌─────────────┐ │ │ 分部B │←─┘ │ 10.10.0.3 │ └─────────────┘

Nginx配置:

upstream all_servers { server 10.10.0.1:8080; # 总部(组网IP) server 10.10.0.2:8080; # 分部A(组网IP) server 10.10.0.3:8080; # 分部B(组网IP) } server { listen 80; server_name example.com; location / { proxy_pass http://all_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

效果:

  • 多机房服务统一入口
  • 负载均衡跨机房
  • 故障自动切换
  • 无需公网暴露各分部服务

6.3 按地域分流

# 根据用户IP分流到最近机房 upstream beijing { server 10.10.0.1:8080; } upstream shanghai { server 10.10.0.2:8080; } upstream guangzhou { server 10.10.0.3:8080; } # 需要GeoIP模块 map $geoip_city $backend { default beijing; "Shanghai" shanghai; "Guangzhou" guangzhou; } server { location / { proxy_pass http://$backend; } }

七、安全配置

7.1 限流

http { # 定义限流区 limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; limit_conn_zone $binary_remote_addr zone=addr:10m; } server { location /api/ { # 每秒10个请求,突发20个 limit_req zone=one burst=20 nodelay; # 每IP最多100连接 limit_conn addr 100; proxy_pass http://backend; } }

7.2 访问控制

location /admin/ { # 白名单 allow 192.168.1.0/24; allow 10.10.0.0/24; # 组网IP段 deny all; proxy_pass http://backend; }

7.3 隐藏版本信息

http { server_tokens off; }

7.4 防盗链

location ~* \.(gif|jpg|png)$ { valid_referers none blocked example.com *.example.com; if ($invalid_referer) { return 403; } }

八、监控与日志

8.1 自定义日志格式

http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '$upstream_addr $upstream_response_time $request_time'; access_log /var/log/nginx/access.log main; }

8.2 状态监控

server { listen 8080; location /nginx_status { stub_status on; allow 127.0.0.1; allow 10.10.0.0/24; # 组网IP deny all; } }
# 查看状态curlhttp://localhost:8080/nginx_status Active connections:42server accepts handled requests7368736812345Reading:0Writing:5Waiting:37

8.3 日志分析

# 统计请求数awk'{print$1}'access.log|sort|uniq-c|sort-rn|head-20# 统计状态码awk'{print$9}'access.log|sort|uniq-c|sort-rn# 慢请求分析awk'$NF> 1 {print$0}'access.log

九、常见问题

9.1 502 Bad Gateway

# 后端服务未启动或无法连接# 检查后端服务curlhttp://127.0.0.1:8080# 检查Nginx错误日志tail-f /var/log/nginx/error.log

9.2 504 Gateway Timeout

# 增加超时时间 location / { proxy_pass http://backend; proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; }

9.3 配置检查

# 检查配置语法nginx -t# 重载配置nginx -s reload

十、总结

Nginx反向代理配置要点:

  1. 基础代理:proxy_pass + 必要的header
  2. 负载均衡:根据场景选择策略
  3. 健康检查:设置失败阈值和备用服务器
  4. HTTPS:Let’s Encrypt免费证书
  5. 性能优化:Gzip、缓存、长连接
  6. 跨网络代理:组网打通多机房
  7. 安全加固:限流、访问控制

生产环境建议:

  • 配置健康检查
  • 启用访问日志
  • 配置合理的超时
  • 使用HTTPS

参考资料

  1. Nginx官方文档:https://nginx.org/en/docs/
  2. Nginx负载均衡:https://docs.nginx.com/nginx/admin-guide/load-balancer/

💡建议:先在测试环境验证配置,再应用到生产。改配置前记得备份。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 10:11:26

收藏!AI大模型人才缺口达35%,企业抢人白热化,零基础入门指南

AI行业薪资涨幅高达35%,企业高薪抢人现象普遍。零基础学习者掌握大模型技术,把握高薪就业机遇。AI岗位薪资暴涨,企业“抢人”大战白热化!‌ “年薪50万,急招AI算法工程师!” “应届生起薪25万,提…

作者头像 李华
网站建设 2026/8/27 0:28:26

5步掌握Gource:从零构建到生成专业级代码可视化动画

5步掌握Gource:从零构建到生成专业级代码可视化动画 【免费下载链接】Gource software version control visualization 项目地址: https://gitcode.com/gh_mirrors/go/Gource 还在为枯燥的代码提交记录而烦恼吗?想要为团队展示生动的项目演进历程…

作者头像 李华
网站建设 2026/8/27 17:41:51

瓷砖企业必备:一站式导航网站——5大板块助企业高效运营

瓷砖企业必备:一站式导航网站——5大板块助企业高效运营引言在瓷砖行业竞争日益激烈的今天,企业运营效率直接影响市场竞争力。从供应链管理到营销推广,从设计创新到客户服务,每个环节的优化都可能成为企业脱颖而出的关键。瓷联网作…

作者头像 李华
网站建设 2026/8/28 5:01:51

单纯接入第三方模型是否需算法备案?

随着人工智能技术的迅猛发展,越来越多的企业选择接入第三方模型以提升自身的业务能力。然而,在享受这些技术带来的便利时,关于算法备案的问题也引发了诸多讨论,尤其是单纯接入第三方模型是否需要备案这一问题,更是让不…

作者头像 李华
网站建设 2026/8/27 20:09:08

vLLM 0.11.0 发布:全面升级引擎与多模态支持

vLLM 0.11.0:引擎重构、多模态跃迁与生产级推理的全面进化 在大模型从研究走向规模化落地的关键阶段,推理效率不再只是“锦上添花”的性能指标,而是决定服务成本、响应体验和商业可行性的核心命脉。正是在这样的背景下,vLLM 推出…

作者头像 李华
网站建设 2026/8/28 10:58:50

基于昇腾910B使用vLLM-Ascend部署Qwen3大模型

基于昇腾910B与vLLM-Ascend高效部署Qwen3大模型实战 在企业级大模型落地过程中,推理性能与部署效率往往成为关键瓶颈。尤其是在面对通义千问最新发布的 Qwen3-72B 这类超大规模语言模型时,如何在国产算力平台上实现高吞吐、低延迟的服务化部署&#xff…

作者头像 李华