upstream的三种策略
ip_hash:通过ip来计算hash值,根据hash值将分配到不同的机器中,同一个hash值会一直落在一台机器上(也就是同一个ip)。
weight:通过设置权重值指定集群中不同机器的权重,权重越高,落到该机器的请求次数越多。
轮询:将请求均匀的分配到集群中的每一台机器上。ip_hash
是优先级最高,当配置了ip_hash
,其他两种配置就会失效,只会根据ip_hash
策略。配置了weight
也是同样,轮询会失效。
---------------------------------------upstream使用---------------------------------------------------------------------
upstream配置语法
upstream <名称> {
[ip_hash策略];
server <服务信息> [权重信息];
server <服务信息> [权重信息];
}
名称:必填,为当前负载均衡的策略定义一个名称,这个名称是自定义的,保证唯一性。
ip_hash策略:选填,用于指定使用ip_hash。
服务信息:必填,集群中提供服务的虚拟机地址,如:168.192.0.1:8080。
权重信息:选填,需要用weight指定每台虚拟机的权重信息。
-----------------------------------------------ip_hash示例-----------------------------------------------------------
upstream demo {
ip_hash;
server 192.168.0.1:8080;
server 192.168.0.2:9090;
}
server {
listen 80;
server_name test.xxx.com;
location / {
proxy_pass http://demo/;
}
}
当请求test.xxx.com时,会匹配进入到location,proxy_pass指定了upstream,此时就会根据ip_hash,对当前的请求IP做hash计算,得到最终会落到那台机器上。以后同一个ip请求,都会落到这个机器上。在某些项目中,可以考虑用这种方式来解决session共享的问题
----------------------------------------weight示例-----------------------------------------------
upstream demo {
server 192.168.0.1:8080 weight 2;
server 192.168.0.2:9090 weight 1;
}
server { # …… 同上面的示例 }
请求test.xxx.com
时,会两次落在192.168.0.1:8080
机器上,一次落在192.168.0.2:9090
上。
----------------------------------------------轮询示例-------------------------------------------------------
upstream demo {
server 192.168.0.1:8080;
server 192.168.0.2:9090;
}
请求会均匀的落在两台机器上。
-----------------------------------------自己的配置------------------------------------------------------
ocpp_lpxt 唯一标识 在nginx所有配置文件中不能重复
steve.sheway.com 域名
upstream ocpp_lpxt {
ip_hash;
server 127.0.0.1:8043;
}
server {
listen 80;
server_name steve.sheway.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
# listen 443 ssl;
# 有了 https 可以尝试开启 http2,加速你的网站
# http2 需要你 nginx 加载了 http2 模块,用如下配置开启。
listen 443 ssl http2;
server_name steve.sheway.com;
include /etc/nginx/conf.d/nginx.header;
location / {
proxy_pass http://ocpp_lpxt;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_set_header Host $host:$server_port;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 400 403 404 /40x.html;
location = /40x.html {
# 放错误页面的目录路径。
return 301 /404.html;
}
}