nginx 负载均衡配置详解

基于 ${nginx_home}/conf/nginx.conf 文件配置实现,如下:

c 复制代码
http {
	   	# 定义server地址
	    upstream server_group {
	    	 server 192.168.xxx.1:8080;
	    	 server 192.168.xxx.2:8080;
	    	 server 192.168.xxx.3:8080;
	    }

    server {
    	 listen       80;
	  
    	 location / {
    		  root   html;
          	  index  index.html index.htm; 
    		  #  代理转发,基于定义的 server_group 配置实现负载均衡
    		  proxy_pass http://server_group; 
    	 }
    }
}

负载参数配置

其中,upstream server_group配置的是负分发服务器组的地址。服务负载默认轮询负载 ,也支持参数化自定义负载配置:weight、backup、max_fails、fail_timeout 等。例如:

csharp 复制代码
upstream server_group {
	 server 192.168.xxx.1:8080 backup;
	 server 192.168.xxx.2:8080 weight=1;
	 server 192.168.xxx.3:8080 max_fails=3 fail_timeout=15s;
}
轮询默认

该策略会将每个请求按时间顺序逐一分配到不同的后端服务器,如果某个后端服务器 down 掉,自动从轮询列表中剔除该服务。

权重(weight)

该策略指定每个服务的权重比例,权重越高被分配的客户端(请求)也就越多,weight 和访问比率成正比。

weight :指定轮询权值,默认值为1。常用于服务主机性能不统一,将性能好的主机分配高权重来发挥服务器最大性能。

down:表示当前的server暂时不参与负载均衡。

fail_timeout:单位为秒,默认是10秒。指定一段时间内,请求经历了max_fails次失败后,该server不能访问的时间(暂停服务的时间)。max_fails可以和fail_timeout一起使用:预留的备份机器。当其他所有的非backup机器故障或忙时,才会请求backup机器,因此这台机器的压力最轻。

max_fails:在fail_timeout时间范围内,允许请求的最大失败次数,默认为1。当达到最大失败次数时,会在fail_timeout时间内不再次被选择,返回 proxy_next_upstream 模块定义的错误。

fail_timeout:单位为秒,默认是10秒。在指定时间内,请求max_fails次失败后,该server不能访问的时间(暂停服务的时间)。max_fails和 fail_timeout一起使用。

最少连接(least_conn)

该策略会将请求分配到连接数最少的服务上。

bash 复制代码
upstream server_group {
	least_conn;
	server 192.168.xxx.1:8080;
	server 192.168.xxx.2:8080; 
}
哈希(ip_hash)

该策略按照每个请求 ip 的 hash 结果分配后端服务器,导致每个访客会固定访问一个后端服务器。可解决了动态网页存在的session共享问题。

地址哈希法:根据获取的客户端ip地址,通过哈希函数计算得到一个定长hash值,然后使用这个值来决定将请求分配给哪台后端服务器。采用源地址哈希法进行负载均衡,同一ip地址的客户端,在后端服务器列表不变情况下,其每次请求都会映射到同一台服务器访问。
哈希值映射:将哈希值映射到可用的后端服务器。通常,哈希值与后端服务器的数量相除并取余数,以次确定要将请求分配到哪台服务器。

例如:如果有3台后端服务器,哈希值为12,则计算:12 % 3 = 0,那么请求将路由到第一台后端服务器

bash 复制代码
upstream server_group {
	ip_hash;
	server 192.168.xxx.1:8080;
	server 192.168.xxx.2:8080; 
}

转发请求头配置

csharp 复制代码
location / {
	root   html;
     	index  index.html index.htm; 
	# 代理转发,基于定义的 server_group 配置实现负载均衡
	proxy_pass http://server_group; 
	
		proxy_set_header Host $host:$server_port;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Real-PORT $remote_port;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
相关推荐
狂炫冰美式12 分钟前
人均配了AI, 为什么公司还是没变快? 🤔 本质还是分布式系统问题
前端·后端·架构
她的男孩2 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
爱读源码的大都督2 小时前
Claude Code源码分析(三):为什么系统提示词中需要有tools呢?
前端·人工智能·后端
爱勇宝2 小时前
Claude Code 被曝暗藏“隐形检测”代码:封代理不是最可怕的,可怕的是你根本不知道它在干什么
前端·后端·程序员
ITOM运维行者3 小时前
从零搭建企业级服务器监控体系:踩坑实录与架构设计
前端·后端
用户4099322502123 小时前
Vue状态管理入门第四章:组合式store和SSR风险
前端·vue.js·后端
用户34232323763173 小时前
SPI 通信与高速外设驱动详解
后端
魏祖潇3 小时前
SDD 完整指南——Spec 端打底、Story 端交付、留白区
人工智能·后端
feelmylife594 小时前
消息队列可靠投递与幂等消费 -- 从"消息丢了"到"消息别重复"的完整工程实践
后端
雪隐4 小时前
个人电脑玩AI-10让5060 Ti给你打工——部署 Odysseus:终于有个能打的"AI管家"了
人工智能·后端