做网站一条龙,母婴网站建设的与功能模块,山西seo基础教程,网站建设新闻 常识文章目录 Nginx系列-负载均衡1. 负载均衡基础1.1 负载均衡定义1.2 Nginx负载均衡原理 2. 负载均衡策略2.1 轮询#xff08;Round Robin#xff09;2.2 加权轮询#xff08;Weighted Round Robin#xff09;2.3 IP哈希#xff08;IP Hash#xff09;2.4 最少连接#xff… 文章目录 Nginx系列-负载均衡1. 负载均衡基础1.1 负载均衡定义1.2 Nginx负载均衡原理 2. 负载均衡策略2.1 轮询Round Robin2.2 加权轮询Weighted Round Robin2.3 IP哈希IP Hash2.4 最少连接Least Connections2.5 加权最少连接Weighted Least Connections 3. 负载均衡策略验证 Nginx系列-负载均衡
1. 负载均衡基础
1.1 负载均衡定义
负载均衡是指将网络请求分散到多个服务器或网络节点上以实现资源的优化使用和提高系统的响应速度。它不仅可以缓解单台服务器的压力还可以提高系统的整体可用性和容错能力。
1.2 Nginx负载均衡原理
Nginx通过其内置的upstream模块来实现负载均衡。该模块允许你定义一组后端服务器并根据一定的策略将客户端请求转发到这些服务器上。Nginx支持多种负载均衡策略包括轮询、IP哈希、最少连接数等。
2. 负载均衡策略
Nginx支持多种负载均衡策略以下是几种常用的策略
2.1 轮询Round Robin
轮询是Nginx默认的负载均衡策略。它按照定义的服务器列表顺序逐个分配请求循环往复。适用于服务器性能相当的情况。
upstream myUpstream {server backend1.example.com;server backend2.example.com;
}server {location / {proxy_pass http://myUpstream;}
}2.2 加权轮询Weighted Round Robin
根据服务器的权重值分配请求权重越高的服务器将获得更多的请求。通过给不同服务器设置不同的权重可以合理分配负载更好地利用服务器资源。
upstream myUpstream {server backend1.example.com weight3;server backend2.example.com weight1;
}server {location / {proxy_pass http://myUpstream;}
}2.3 IP哈希IP Hash
根据客户端的IP地址进行哈希计算将相同IP的请求始终分发到同一台后端服务器上。这样可以保证来自同一客户端的请求都会被发送到同一服务器适用于需要会话保持或缓存一致性的应用场景。
upstream myUpstream {ip_hash;server backend1.example.com;server backend2.example.com;
}server {location / {proxy_pass http://myUpstream;}
}2.4 最少连接Least Connections
该策略将请求发送给当前连接数最少的服务器。通过动态地追踪每个服务器的连接数将请求分发给连接最少的服务器以实现负载均衡。适用于处理连接时长不一致的场景如长连接和短连接混合的情况。
upstream myUpstream {least_conn;server backend1.example.com;server backend2.example.com;
}server {location / {proxy_pass http://myUpstream;}
}2.5 加权最少连接Weighted Least Connections
为每台服务器分配权重并按照最少连接数进行负载均衡
upstream myUpstream {least_conn;server backend1.example.com weight3;server backend2.example.com weight1;
}server {location / {proxy_pass http://myUpstream;}
}3. 负载均衡策略验证
配置如下
#user nobody;
worker_processes 1;
events {worker_connections 1024;
}
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;upstream my_upstream {least_conn;server 192.168.10.116:8084;server 192.168.10.116:8085;}server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/ /index.html;error_page 404 index.html;}#接口路径匹配location /api {proxy_pass http://my_upstream;}error_page 500 502 503 504 /50x.html;location /50x.html {root html;}}
}
配置好之后启动nginx结果呕吼。。。 开始排查之路
明确400错误是什么 HTTP 400 错误也被称为“Bad Request”错误是一个HTTP协议标准的响应状态码。它表示服务器无法理解或不能处理客户端发送的请求。这通常意味着请求的格式有误或者请求中包含了服务器无法理解的参数。 查看nginx的日志也没有看出什么问题试着百度一下: nginx upstream 400效果还不错一共有两种解决方案一种是设置请求头一种是upstream的名称不要包含下划线挨个验证呗
解决方案验证
upstream的名称不要包含下划线修改upstream的名称
myUpstream重启nginx结果成功解决 设置请求头
proxy_set_header Host $host;重启nginx结果成功解决 原因总结 Nginx 的 upstream 名称带有下划线时出现 400 错误主要原因与 HTTP 协议的规范有关。 在 HTTP 协议中规范建议域名和其他标识符应该遵循某些规则。具体到 Nginx 的 upstream 名称下划线 _ 并不是一个被广泛接受的字符。虽然 Nginx 对此的支持有所变化但在某些版本或配置中下划线可能会导致解析或处理问题。 特别说明 关于这个的原因我也不太确定我只是提供了我认可的一种解释