概述
nginx分发算法upstream
分发算法有:轮询,weight(权重),ip_hash(每个访客固定访问一个后端服务器),fair(按响应时间分类),url_hash(每个url定向一个后端服务器)
轮询和weight适合静态页面,不适合动态页面
ip_hash 适合动态页面
基于请求分发:
- 基于host分发
- 基于开发语言分发
- 基于浏览器分发
- 基于源ip
分发算法
1.轮询
upstream web {
server 192.168.10.41;
server 192.168.10.42;
}
server {
listen 80;
server_name www.bac.com;
location / {
proxy_pass http://web;
}
}
默认比例1:1
权重weight
upstream web {
server 192.168.10.41 weight=1;
server 192.168.10.42 weight=2;
}
server {
listen 80;
server_name www.bac.com;
location / {
proxy_pass http://web;
}
}
按比例分配,每次1个请求分给41服务器,2个请求分给42服务器
性能差的服务器比例少,性能好的服务器比例大
ip_hash
upstream web{
ip_hash;
server 192.168.10.41;
server 192.168.10.42;
}
保证一个用户信息给一个业务服务器
ip_hash后 一台机器只能访问一个数据服务器
down
添加down字段后,该服务器不参与分发,机器损坏
upstream web{
server 192.168.10.41;
server 192.168.10.42 down;
}
bakcup
该服务器作为备份服务器,只有在其他服务器忙不过来时,参与分发
upstream web{
server 192.168.10.41;
server 192.168.10.42 backup;
}
ip_hash不支持backup和权重
关掉web01的nginx,或者web01繁忙时,就会到web02处理
基于请求头分发
1.基于host分发
多集群,多个反向代理,多个upstream
http{
upstream web1 {
server 192.168.10.41;
}
upstream web2 {
server 192.168.10.42;
}
server {
listen 80;
server_name www.web1.com;
location / {
proxy_pass http://web1;
}
}
server {
listen 80;
server_name www.web2.com;
location / {
proxy_pass http://web2;
}
}
}
访问不同域名分发到不同服务器
2.基于开发语言分发
upstream命名可以自定义,匹配路由时匹配已php结尾或html结尾分别分发到不同服务器上
一个server代表一个虚拟服务器
http{
upstream php {
server 192.168.10.41;
}
upstream html {
server 192.168.10.42;
}
server {
listen 80;
server_name www.web1.com;
location ~* .php$ {
proxy_pass http://php;
}
}
server {
listen 80;
server_name www.web2.com;
location ~* .html$ {
proxy_pass http://html;
}
}
}
3.基于浏览器分发
判断不同类别浏览器
upstream elinks { server 192.168.10.42; }
upstream chrome { server 192.168.10.43; }
upstream any { server 192.168.10.42:81; }
server {
listen 80;
server_name www.web1.com;
location / {
proxy_pass http://any;
if ( $http_user_agent ~* Elinks ) {
proxy_pass http://elinks;
}
if ( $http_user_agent ~* chrome ) {
proxy_pass http://chrome;
}
}
}
$http_user_agent
返回用户代理(浏览器类型)
#模糊匹配:~匹配 !~不匹配 ~* 不区分大小写的匹配
#精确匹配:= !=
4.基于源ip分发
ip库,根据源ip做匹配,判断ip属于哪个地方
upstream bj.server {
server 192.168.10.42;
}
upstream sh.server {
server 192.168.10.43;
}
upstream default.server {
server 192.168.10.42:81;
}
geo $geo {
default default;
192.168.10.241/32 bj;
192.168.10.242/32 sh;
}
location / {
proxy_pass http://$geo.server$request_uri;
}
- geo模块,判断访问nginx的属于哪个地方的
$geo做正则匹配,值可能为default或bj或sh
请求ip默认default -》geo值为 default
请求ip为192.168.10.241/32 -》geo值为bj
请求ip为192.168.10.242/ 32-》geo值为sh - 请求url为http://192.168.10.42/a/b/c/index.php
$request_uri 指文件目录 /a/b/c/index.php
这个字段会随着分发器传递给服务器
最后
以上就是寂寞小兔子为你收集整理的nginx分发算法nginx分发算法upstream的全部内容,希望文章能够帮你解决nginx分发算法nginx分发算法upstream所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复