四层负载均衡数据包是在底层就进行了分发,而七层负载均衡数据包则在最顶端进行分发,所以四层负载均衡的效率比七层负载均衡的要高。四层负载均衡不识别域名,而七层负载均衡识别域名。
注意stream模块的位置,要在http模块上方,同时proxy_pass的书写方式也有不同。
Nginx提供负载均衡的模块是:
ngx_http_proxy_module proxy代理模块,用于把请求抛给后端的服务器节点,或是upstream服务器池 ngx_http_upstream_module 负载均衡模块,实现服务器的负载均衡节点配置,以及健康检查
http { upstream [你的负载均衡机制名称,随便设置一个就好] { server [ip地址]:[端口值]; server [ip地址]:[端口值]; server [ip地址]:[端口值]; server [ip地址]:[端口值]; } server { listen [nginx监听端口]; server_name [head中的host对应的值] location / { proxy_pass http:// [你的负载均衡机制名称,对应上面upstream的值]; } } }
每个请求按照请求时间顺序分配到不同的后端服务器,如果后端服务器挂了,则自动剔除
指定轮询的频率,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; } } }
客户端ip地址被用作hash key来判断客户端请求应该发送到哪个服务器,这种方法保证了来自相同客户端的请求总是发送到相同服务器(如果服务器可用的话
upstream myapp1 { ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
nginx会尽量不让负载繁忙的应用服务器上负载过多的请求,相反的,会把新的请求发送到比较不繁忙的服务器。
upstream myapp1 { least_conn; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
假如有一台主机是出了故障,或者下线了,要暂时移出,那可以把它标为down,表示请求是会略过这台主机的。
upstream downServer { server www.address1.com; // 或者ip+端口 , 不需要加入http/https前缀 server www.address2.com down; }
backup是指备份的机器,相对于备份的机器来说,其他的机器就相当于主要服务器,只要当主要服务器不可用的时候,才会用到备用服务器。
upstream backupServer { server www.address1.com; // 或者ip+端口 , 不需要加入http/https前缀 server www.address2.com backup; }
默认情况下,max_fails的值为1,表示的是请求失败的次数,请求1次失败就换到下台主机。另外还有一个参数是fail_timeout,表示的是请求失败的超时时间,在设定的时间内没有成功,那作为失败处理。
upstream backupServer { server www.address1.com max_fails=2; // 或者ip+端口 , 不需要加入http/https前缀 server www.address2.com backup; }
参数 | 作用解释 |
proxy_set_header | 设置反向代理向后端发送的http请求头信息,如添加host主机头部字段,让后端服务器能够获取到真实客户端的IP信息等 |
client_body_buffer_size | 指定客户端请求主体缓冲区大小 |
proxy_connect_timeout | 反向代理和后端节点连接的超时时间,也是建立握手后等待响应的时间 |
proxy_send_timeout | 表示代理后端服务器的数据回传时间,在规定时间内后端若数据未传完,nginx会断开连接 |
proxy_read_timeout | 设置Nginx从代理服务器获取数据的超时时间 |
proxy_buffer | 设置缓冲区的数量大小 |
Nginx rewrire技术主要是实现URL地址重写,且支持正则表达式的规则。
语法
rewrite ^/(.*) http://192.168.178.134/ permanent; rewrite是指令,开启一个跳转规则 ^/(.*) 表示匹配所有,匹配成功后跳转到后面的url地址 表示取出前面正则括号里的内容 permanent表示 301 重定向的标记
标记 | 解释a |
last | 规则匹配完成后,继续向下匹配新的Locaiton |
break | 本条规则完成匹配后,立即停止 |
redirect | 返回302临时重定向,浏览器地址栏显示跳转后的URL |
permanent | 返回301永久重定向,浏览器地址显示跳转后的URL |
last和break用于实现URL重写,浏览器地址栏不发生变化
redirect和permanent用于实现URL跳转,浏览器地址栏跳转新的URL
网站维护期间,仅指定ip可以访问,其他ip跳转维护页面
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; }