负载均衡
location表达式
匹配URL路径地址
/表示匹配所有路径地址,默认不区分大小写
=/ 表示拦截/之前,也就是/后面不能带任何字符 比如:www.baidu.com/aaa访问不到
~开头表示区分大小写
案例:
配置两个location,访问不同的域名,访问到不同的项目,也就是跨域问题的解决方案
location /a/{
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
location /b/{
proxy_pass http://127.0.0.1:8081;
index index.html index.htm;
}
API设计
大型项目服务特别多,最后需要统一域名,比如:
nginx主要作用反向代理
网关作用是权限控制(黑名单系统,白名单系统)
重启命令
nginx -relaod
nginx -s stop
负载均衡
概念:
使用负载均衡
四层负载均衡器(nginx1.9之后)
基于传输层,基于TCP协议实现的负载均衡,主要针对于TCP协议
lvs软负载 f5硬件负载
七层负载均衡器 nginx
基于应用层,也叫作基于http协议实现的负载均衡,针对web服务实现负载均衡
思考?
nginx支持四层负载均衡,1.9之前不支持四层负载均衡,只支持http。
作用:
目的是为了解决高并发,将所有请求转发负载均衡器,再由负载均衡器采用不同的算法(轮训机制,权重,IP绑定)分发到指定的服务器
流程:
客户端--》首先进行dns解析,解析完成先到LVS服务,然后转发到不同的nginx服务器,不同的nginx服务器对应不同的web应用
lvs改写目标地址 nginx 代理服务器
nginx+lvs+keepalived
带来的问题:
分布式session一致性问题
分布式job幂等性问题
分布式生产全局ID
分布式锁
分布式配置中心
分布式日志收集系统
配置负载均衡
上游服务器
upstream server
可以配置多个真是业务逻辑访问的服务器
内置功能
故障转移
重试机制 不推荐使用,因为可能产生幂等性问题
心跳检测 tcp和http协议 一般使用keepalived实现
upstream backServer {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server{
listen 80;
server_name www.com;
location /{
proxy_pass http://backServer/;
index index.html index.htm;
}
}
算法:
轮训机制
轮流访问
应用场景:
服务器配置都相同的时候
权重机制
weight 配置比例
权重越高,访问的次数越多
应用场景:
服务器配置能力不同的情况下
upstream backServer {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
IP绑定
通过nginx后去IP,hash运算,固定分配到某个服务器上
可以解决session共享问题
upstream backServer {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
ip hash;
}
fair
第三方
nginx本身不支持
URL绑定
类似于IP绑定,只不过是针对URL,也是第三方的
绝大多数情况下,负载均衡都是根据服务器进行配置的
nginx配置故障转移,在反向代理转发到真是服务器,如果真是服务器出现宕机,延迟情况下,直接轮训到下一个服务器
故障转移配置如下:
upstream backServer {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server{
listen 80;
server_name www.com;
location /{
proxy_pass http://backServer/;
#nginx与上游服务器超时时间,后端服务链接超时时间_发起握手等候响应超时时间
proxy_connect_timeout 1s;
#nginx发送给上游服务器超时时间
proxy_send_timeout 1s;
#nginx接收上游服务器超时时间
proxy_read_timeout 1s;
index index.html index.htm;
}
}