6 nginx负载均衡
6.1 四层负载均衡
6.1.1 四层负载均衡与七层负载均衡的区别
四层负载均衡数据包是在底层就进行了分发,而七层负载均衡数据包则在最顶端进行分发,所以四层负载均衡的效率比七层负载均衡的要高。四层负载均衡不识别域名,而七层负载均衡识别域名。
6.1.2 四层负载均衡配置
注意stream模块的位置,要在http模块上方,同时proxy_pass的书写方式也有不同。
6.2 七层负载均衡
Nginx提供负载均衡的模块是:
ngx_http_proxy_module proxy代理模块,用于把请求抛给后端的服务器节点,或是upstream服务器池
ngx_http_upstream_module 负载均衡模块,实现服务器的负载均衡节点配置,以及健康检查
6.2.1 nginx的负载均衡语法
http {
upstream [你的负载均衡机制名称,随便设置一个就好] {
server [ip地址]:[端口值];
server [ip地址]:[端口值];
server [ip地址]:[端口值];
server [ip地址]:[端口值];
}
server {
listen [nginx监听端口];
server_name [head中的host对应的值]
location / {
proxy_pass http:// [你的负载均衡机制名称,对应上面upstream的值];
}
}
}
6.2.2 nginx的负载均衡策略
1.轮询(默认)
每个请求按照请求时间顺序分配到不同的后端服务器,如果后端服务器挂了,则自动剔除
2.权重
指定轮询的频率,weight和访问率成正比,用于后端服务器性能不均匀的情况
http {
upstream ipHashLoadBalanceServer {
ip_hash;
server www.address1.com weight=3;// 或者ip+端口 , 不需要加入http/https前缀
server www.address2.com; // default weight=1
server www.address3.com;
}
server {
listen 80;
location / {
proxy_pass http://loadBalanceServer;
}
}
}
3.ip_hash
客户端ip地址被用作hash key来判断客户端请求应该发送到哪个服务器,这种方法保证了来自相同客户端的请求总是发送到相同服务器(如果服务器可用的话
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
4.最少连接
nginx会尽量不让负载繁忙的应用服务器上负载过多的请求,相反的,会把新的请求发送到比较不繁忙的服务器。
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
6.2.3 故障下线和备份服务设置
1.down
假如有一台主机是出了故障,或者下线了,要暂时移出,那可以把它标为down,表示请求是会略过这台主机的。
upstream downServer {
server www.address1.com; // 或者ip+端口 , 不需要加入http/https前缀
server www.address2.com down;
}
2.backup
backup是指备份的机器,相对于备份的机器来说,其他的机器就相当于主要服务器,只要当主要服务器不可用的时候,才会用到备用服务器。
upstream backupServer {
server www.address1.com; // 或者ip+端口 , 不需要加入http/https前缀
server www.address2.com backup;
}
3.max_fails和fail_timeout
默认情况下,max_fails的值为1,表示的是请求失败的次数,请求1次失败就换到下台主机。另外还有一个参数是fail_timeout,表示的是请求失败的超时时间,在设定的时间内没有成功,那作为失败处理。
upstream backupServer {
server www.address1.com max_fails=2; // 或者ip+端口 , 不需要加入http/https前缀
server www.address2.com backup;
}
6.2.4 proxy_pass参数
参数
作用解释
proxy_set_header
设置反向代理向后端发送的http请求头信息,如添加host主机头部字段,让后端服务器能够获取到真实客户端的IP信息等
client_body_buffer_size
指定客户端请求主体缓冲区大小
proxy_connect_timeout
反向代理和后端节点连接的超时时间,也是建立握手后等待响应的时间
proxy_send_timeout
表示代理后端服务器的数据回传时间,在规定时间内后端若数据未传完,nginx会断开连接
proxy_read_timeout
设置Nginx从代理服务器获取数据的超时时间
proxy_buffer
设置缓冲区的数量大小
7 nginx的URL地址重写
7.1 rewrite
Nginx rewrire技术主要是实现URL地址重写,且支持正则表达式的规则。
语法
rewrite ^/(.*) http://192.168.178.134/$1 permanent;
rewrite是指令,开启一个跳转规则
^/(.*) 表示匹配所有,匹配成功后跳转到后面的url地址
$1 表示取出前面正则括号里的内容
permanent表示 301 重定向的标记
7.1.1 rewrite的结尾参数 flag标记
标记
解释a
last
规则匹配完成后,继续向下匹配新的Locaiton
break
本条规则完成匹配后,立即停止
redirect
返回302临时重定向,浏览器地址栏显示跳转后的URL
permanent
返回301永久重定向,浏览器地址显示跳转后的URL
last和break用于实现URL重写,浏览器地址栏不发生变化
redirect和permanent用于实现URL跳转,浏览器地址栏跳转新的URL
7.1.2 rewrite使用场景
- 地址跳转,用户访问URL时,会将其定向至一个新域名
- 协议跳转,将用户通过http的请求协议重新跳转至https协议
- URL静态化,减少动态URL对外暴露过多参数,减少服务器负担
7.1.3 案例
例:用户使用手机设备访问,则跳转定义好的文件夹下
网站维护期间,仅指定ip可以访问,其他ip跳转维护页面
7.2 return
7.2.1 http跳转https
server {
listen 80;
server_name yzb.lsp.com;
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl;
server_name yzb.lsp.com;
include /opt/env/nginx/servs/ssl.settings;
location / {
root /opt/apps/front-yzb;
index serve.html index.html index.htm;
}
include /opt/env/nginx/servs/yzb.locations;
}
版权归原作者 爱学习的小菜鸟0.0 所有, 如有侵权,请联系我们删除。