news 2026/7/8 8:21:14

【Nginx】配置参数和使用案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Nginx】配置参数和使用案例

【Nginx】配置参数和使用案例

  • 【一】反向代理和负载均衡参数
    • 【1】重点参数介绍
    • 【2】完整模板案例
    • 【3】upstream 负载均衡模块参数
      • (1)核心参数
      • (2)四种负载均衡调度算法
    • 【4】proxy 反向代理核心参数解析
      • (1)listen 指令:监听端口 / 地址 / 附加参数
      • (2)server_name 指令:虚拟主机域名匹配
      • (3)透传客户端真实信息
      • (4)超时时间(防止卡死)
      • (5)缓冲区优化(高并发必配)
      • (6)长连接优化(配合 upstream keepalive)
      • (7)proxy_pass 转发地址规则
      • (8)故障自动重试 proxy_next_upstream
    • 【5】模板案例
  • 【二】反向代理和负载均衡案例
    • 【1】反向代理转发请求到gateway案例
    • 【2】负载均衡datax集群案例

【一】反向代理和负载均衡参数

【1】重点参数介绍

分为两大部分:
(1)http 块:负载均衡上游服务器池 upstream
(2)server 块:反向代理、转发规则、健康检查、超时、缓存、重试控制
listen:监听的端口
server_name:监听的服务ip
location /indapi/:过滤/indapi/的请求路径
proxy_pass:代理转发的服务池或者具体的ip端口路径

【2】完整模板案例

# nginx.conf 主配置文件worker_processes auto;worker_rlimit_nofile65535;events{worker_connections10240;use epoll;multi_accept on;}http{include mime.types;default_type application/octet-stream;# 日志格式log_format main'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log logs/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout65;keepalive_requests1000;gzipon;gzip_min_length 1k;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;# ===================== 负载均衡上游服务池 =====================upstream backend_server{# 后端服务节点server127.0.0.1:8080weight=1max_fails=3fail_timeout=30s;server127.0.0.1:8081weight=1max_fails=3fail_timeout=30s;server192.168.1.100:8082 backup;server192.168.1.101:8083 down;# 负载均衡算法(默认轮询)# ip_hash; # 固定IP分发,会话保持# least_conn; # 最少连接优先# hash $request_uri consistent; # url一致性哈希# 后端长连接复用,提升性能keepalive64;}# 服务池名称:damp.gateway,代理转发到gateway服务upstream damp.gateway{server172.17.0.79:20110;}# ===================== 反向代理服务 =====================server{listen80;server_name api.example.com;# 错误页面error_page500502503504/50x.html;location=/50x.html{root html;}# 全局反向代理公共参数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_read_timeout 120s;proxy_send_timeout 60s;# 缓冲区,避免后端小包频繁写响应proxy_buffer_size 64k;proxy_buffers4128k;proxy_busy_buffers_size 256k;# 开启后端长连接,配合 upstream keepaliveproxy_http_version1.1;proxy_set_header Connection"";# 核心业务转发规则location /{proxy_pass http://backend_server;# 指向上面的负载均衡池proxy_next_upstream errortimeoutinvalid_header http_500 http_502 http_503 http_504;proxy_next_upstream_tries3;# 最多重试3台节点proxy_next_upstream_timeout 10s;# 重试总超时}# 静态资源单独缓存,不走后端(可选)location ~*\.(jpg|png|css|js|ico)${proxy_pass http://backend_server;expires 1d;add_header Cache-Control"public";}}}

【3】upstream 负载均衡模块参数

upstream backend_server{server127.0.0.1:8080weight=1max_fails=3fail_timeout=30s;server127.0.0.1:8081weight=1max_fails=3fail_timeout=30s;server192.168.1.100:8082 backup;server192.168.1.101:8083 down;keepalive64;}

(1)核心参数

(1)server ip:port
后端应用服务地址,SpringBoot 服务地址。
(2)weight = 数字
权重,默认 1,数值越大分配请求越多;权重轮询算法。
例:weight=2 接收两倍流量。
(3)max_fails=3
最大失败次数,3 次访问失败后标记节点故障。
(4)fail_timeout=30s
节点故障后,30 秒内不再转发流量到该节点,30 秒后重试探测。
(5)backup
备用节点,所有正常节点挂了才启用。
(6)down
永久下线节点,流量不分配,用于维护停机。
(7)keepalive 64
Nginx 与后端服务保持 64 个长连接,减少 TCP 握手开销,高并发优化。

(2)四种负载均衡调度算法

(1)默认轮询(不配置任何算法)
请求依次分配给每台后端,均匀分发。
(2)ip_hash;
根据客户端 IP 哈希固定分配同一台后端,实现会话保持。
缺点:IP 分布不均时流量倾斜;节点增减会哈希重分布。
(3)least_conn;
优先转发给当前活跃连接最少的后端,适合后端处理耗时不一致场景。
(4)hash 变量 consistent;
一致性哈希,常用 hash $request_uri consistent;
按 URL 哈希,相同接口固定打同一台服务;节点扩容影响小,适合缓存服务。

【4】proxy 反向代理核心参数解析

(1)listen 指令:监听端口 / 地址 / 附加参数

(1)基础语法

listen address[:port][参数1][参数2]...;# 最简写法listen80;listen443ssl;listen127.0.0.1:8080;listen[::]:80;# 监听所有IPv6地址80端口

(2)基础监听配置说明
1-listen 80;
监听本机所有网卡的 80 端口(0.0.0.0:80),外网、内网、本地均可访问。
2-listen 192.168.1.10:80;
只监听本机指定内网 IP 的 80 端口,其他网卡 IP 无法访问该 server 块。
3-listen [::]:443;
兼容 IPv6,同时监听所有 IPv6 地址 443 端口。
4-listen 80 default_server;
默认虚拟主机:当请求域名不匹配任何 server_name 时,全部交给这个 server 处理。
一个端口只能有一个 default_server。

(2)server_name 指令:虚拟主机域名匹配

作用:同一端口下多个网站 / API 域名区分,实现一台 Nginx 绑定多个域名分流。

(1)基础语法

server_name 域名1 域名2 泛域名;

(2)精准域名匹配

server_name api.example.com;server_name api.example.com admin.example.com;

完全匹配请求 Header 里的 Host 字段,仅访问对应域名才进入当前 server 块。

(3)泛域名匹配
前缀泛域名,匹配所有二级域名:a.example.com、admin.example.com、pay.example.com,不匹配根域名 example.com

server_name *.example.com;

后缀泛域名,匹配 api.xxx.com、api.xxx.cn,极少用。

server_name api.*;

(3)透传客户端真实信息

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;

Host $host:把原始请求域名传给后端,后端可拿到访问域名
X-Real-IP $remote_addr:单代理场景直接拿到客户端真实 IP
X-Forwarded-For:多级代理时,串联所有上游 IP,后端通过这个取真实客户端 IP
X-Forwarded-Proto:传递 http/https 协议,后端判断是否 HTTPS 访问

(4)超时时间(防止卡死)

proxy_connect_timeout 60s;# 与后端建立TCP连接超时proxy_read_timeout 120s;# 连接成功后,读取后端响应超时(长接口/文件上传调大)proxy_send_timeout 60s;# 向后端发送请求数据超时

(5)缓冲区优化(高并发必配)

proxy_buffer_size 64k;# 响应头缓冲区proxy_buffers4128k;# 4块128k缓冲区存响应体proxy_busy_buffers_size 256k;# 忙时最大缓冲

不配置会导致 Nginx 小块多次转发,增加 IO 损耗。

(6)长连接优化(配合 upstream keepalive)

proxy_http_version1.1;proxy_set_header Connection"";

HTTP1.0 默认短连接,开启后复用 TCP 连接,大幅提升 QPS。

(7)proxy_pass 转发地址规则

location /api/{proxy_pass http://backend_server;# 不带/:保留location前缀转发# proxy_pass http://backend_server/; # 带/:抹掉location匹配前缀}

示例区分:访问 /api/user
(1)不带 /:不会抹掉前缀:/api/,转发 http://xxx/api/user
(2)带 /:会抹掉前缀:/api/,转发 http://xxx/user

(8)故障自动重试 proxy_next_upstream

proxy_next_upstream errortimeoutinvalid_header http_500 http_502 http_503 http_504;proxy_next_upstream_tries3;proxy_next_upstream_timeout 10s;

遇到网络错误、超时、5xx 错误自动切换下一台健康节点重试
tries:单请求最多换 3 台机器
timeout:整个重试流程总超时 10 秒

【5】模板案例

http{upstream backend_server{server127.0.0.1:8080weight=1max_fails=3fail_timeout=30s;server127.0.0.1:8081weight=1max_fails=3fail_timeout=30s;keepalive64;}# HTTP 80 端口服务server{# listen完整参数示例listen80default_server reuseportbacklog=65535;# 精准业务域名server_name api.example.com www.example.com;proxy_set_header Host$host;proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;location /{proxy_pass http://backend_server;}}# HTTPS 443 端口服务server{listen443ssl http2 reuseportbacklog=65535;server_name api.example.com www.example.com;ssl_certificate cert/api.pem;ssl_certificate_key cert/api.key;location /{proxy_pass http://backend_server;}}# 兜底非法域名拦截server{listen80;server_name _;return403;}}

【二】反向代理和负载均衡案例

【1】反向代理转发请求到gateway案例

nignx 配置文件,监听的 ip 为localhost,端口为 20100,现在系统管理服务、公共管理服务、指标平台服务都注册在 nacos,统一通过 gateway 请求转发,如果请求前缀为 /api/ 就转发到系统管理,前缀为 /commapi/ 就转发到公共服务管理,前缀为 /indapi/ 就转发到指标平台管理,配置反向代理的案例

(1)请求url:http://172.17.0.79:20100/indapi/v1/indtable/syncDimLevelByTableId/2058813120728453121
(2)nginx部署在前端服务器,监听localhost的20100端口
(3)因为有/indapi/前缀,所以location匹配到proxy_pass转发http://gateway_cluster/damp-ind-api/,末尾带/表示抹掉/indapi/前缀,最终转发地址为:http://gateway_cluster/damp-ind-api/v1/indtable/syncDimLevelByTableId/2058813120728453121
(4)gateway_cluster时upstream配置的服务池,对应gateway网关服务
(5)此时http://172.17.0.79:20100/indapi/v1/indtable/syncDimLevelByTableId/2058813120728453121被反向代理到gateway网关服务
(6)gateway网关服务中配置路由,根据/damp-ind-api路由到指标平台服务
(7)指标平台服务中@Controller(“/v1/indtable”)匹配到请求,@GetMapping(“/syncDimLevelByTableId”)匹配到接口,完成本次请求

worker_processes auto;worker_rlimit_nofile65535;events{worker_connections10240;use epoll;multi_accept on;}http{include mime.types;default_type application/octet-stream;log_format main'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log logs/api_20100.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout65;gzipon;gzip_min_length 1k;gzip_types text/plain text/css application/json application/javascript text/xml;# 上游:SpringCloud Gateway 网关集群(网关注册nacos,这里写网关部署地址)upstream gateway_cluster{server172.17.0.79:20110weight=1max_fails=3fail_timeout=30s;# 多网关实例可追加# server 127.0.0.1:8100 weight=1 max_fails=3 fail_timeout=30s;keepalive64;}server{# 仅监听本机localhost 20100端口,外部网络访问不到listen20100;server_name localhost;#文件最大值client_max_body_size 100m;# 透传客户端真实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_read_timeout 120s;proxy_send_timeout 60s;# 缓冲区优化proxy_buffer_size 64k;proxy_buffers4128k;proxy_busy_buffers_size 256k;# 开启长连接,提升网关转发性能proxy_http_version1.1;proxy_set_header Connection"";# 故障自动切换网关节点proxy_next_upstream errortimeoutinvalid_header http_500 http_502 http_503 http_504;proxy_next_upstream_tries2;proxy_next_upstream_timeout 10s;# 1. /api/ 系统管理服务location /api/{proxy_pass http://gateway_cluster/damp-base-sys-api/;proxy_redirect off;}# 2. /commapi/ 公共管理服务location /commapi/{proxy_pass http://gateway_cluster/damp-base-common-api/;proxy_redirect off;}# 3. /indapi/ 指标平台服务location /indapi/{proxy_pass http://gateway_cluster/damp-ind-api/;proxy_redirect off;}# 未匹配前缀统一返回404location /{return404;}# 统一错误页面error_page500502503504/50x.html;location=/50x.html{root html;}}}

【2】负载均衡datax集群案例

有 3 台 datax 服务器组成集群,通过 nginx 路由转发,默认轮询机制,nginx 配置反向代理和负载均衡的案例

worker_processes auto;worker_rlimit_nofile65535;events{worker_connections10240;use epoll;multi_accept on;}http{include mime.types;default_type application/octet-stream;# 访问日志log_format main'$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log logs/datax_proxy.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout60;gzipon;gzip_min_length 2k;gzip_types text/plain application/json text/css application/javascript;# ===================== DataX集群上游池(默认轮询) =====================upstream datax_cluster{server192.168.10.101:8088max_fails=3fail_timeout=30s;server192.168.10.102:8088max_fails=3fail_timeout=30s;server192.168.10.103:8088max_fails=3fail_timeout=30s;# 默认轮询,无需额外配置算法# ip_hash; # 开启则会话保持,注释掉使用轮询# least_conn; # 最少连接算法,本次不用# Nginx与DataX服务复用长连接,减少TCP握手开销keepalive128;}# ===================== 反向代理服务块 =====================server{listen8090reuseportbacklog=65535;server_name localhost datax-proxy;# 透传客户端真实IP、域名、协议给后端DataX服务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;# DataX同步任务执行时间长,调大读写超时proxy_connect_timeout 30s;proxy_read_timeout 600s;proxy_send_timeout 30s;# 响应缓冲区优化proxy_buffer_size 128k;proxy_buffers4256k;proxy_busy_buffers_size 512k;# 开启HTTP1.1长连接,配合upstream keepaliveproxy_http_version1.1;proxy_set_header Connection"";# 后端异常自动切换下一台节点重试proxy_next_upstream errortimeoutinvalid_header http_500 http_502 http_503 http_504;proxy_next_upstream_tries2;proxy_next_upstream_timeout 20s;# 全局路由,全部转发至datax集群location /datax/{proxy_pass http://datax_cluster;}# 统一错误页面error_page500502503504/50x.html;location=/50x.html{root html;}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 8:20:23

数据中心发电机维护计划建议:5项关键维护点

数据中心乃是数字经济的核心基础性设施。其电力供应是否稳定,直接同业务能否持续相关联。发电机作为备用电源的核心设备,必须得有着定期的维护规划。合理的维护规划,不仅能够使得设备使用得更为长久,还能够保障在市电中断的时候能…

作者头像 李华
网站建设 2026/7/8 8:18:33

罗氏线圈开口处靠近电流易受干扰:原因、影响与抗干扰对策

在电力系统、工业控制及电子测量领域,罗氏线圈(Rogowski Coil)凭借非接触式测量、宽量程、无磁饱和等优势,成为交流电流与脉冲电流测量的重要工具。然而,其 “开口式” 结构在靠近电流时却容易受到干扰,导致…

作者头像 李华
网站建设 2026/7/8 8:17:52

RTX5090值不值得买?

RTX5090上市有一段时间了,说说我的看法:优点:- 性能确实强,4K游戏流畅- DLSS4的多帧生成效果明显- 显存够大,AI训练也能用缺点:- 价格太高,国内溢价严重- 功耗450W,对电源要求高- 体…

作者头像 李华
网站建设 2026/7/8 8:16:28

被市场忽略的AI4S细分赛道:MedPeer生物医药科研数字化稀缺龙头

当下一级市场谈论AI for Science(AI4S),舆论普遍陷入单一认知陷阱:将赛道窄化为分子、蛋白、新药管线研发,晶泰科技、英矽智能、深势科技成为资本唯一关注标的。行业热钱扎堆后端物质发现赛道,却长期忽视一…

作者头像 李华