1.nginx中location使用正则表达式
已=开头表示精确匹配
如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
- ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
- 开头表示区分大小写的正则匹配;
~* 开头表示不区分大小写的正则匹配
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到
2.nginx根据域名不同拦截不同的项目名称
server {
##监听的端口号
listen 80;
### 服务名称
server_name www.lex.com;
### 匹配项目名称为tomcat_8080开头 #例如www.lex.com/tomcat_8080
location /tomcat_8080/ {
### 配置反向代理
proxy_pass http://127.0.0.1:8080/;
index index.html index.htm;
}
### 匹配项目名称为tomcat_8081开头 #例如www.lex.com/tomcat_8081
location /tomcat_8081/ {
### 配置反向代理
proxy_pass http://127.0.0.1:8081/;
index index.html index.htm;
}
}
3.四级负载均衡和六级负载均衡
四级负载均衡主要是基于tcp协议的负载均衡,六级负载均衡主要是基于http的负载均衡
4.负载均衡的作用
负载均衡就是,将所有请求先到负载均衡器,在由负载均衡器采用负载均衡算法(轮训、IP绑定、权重)分发到不同实际的服务器中,这也就是服务器集群,集群的目的 是为了减轻单台服务器压力。
5.负载均衡带来的问题
使用负载均衡后,实际用到的服务器会被集群多台,那么这时候就会产生很多分布式相关问题。
比如:
分布式Session一致性问题
分布式定时任务调度幂等性问题
分布式生成全局订单
6.配置负载均衡上游服务器
###定义上游服务器(需要被nginx真实代理访问的服务器) 默认是轮训机制
upstream backServer{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name www.itmayiedu.com;
location / {
### 指定上游服务器负载均衡服务器
proxy_pass http://backServer;
index index.html index.htm;
}
}
7.常见的三种负载均衡算法配置
1.默认为轮询算法,常用于服务器之前的配置相差不多的情况
2.权重算法,常用与服务器配置差距较大的情况,配置低的服务器权重大一些多访问几次,配置低的少访问几次,权重配的少一些
upstream backServer{
#在需要负载均衡的服务器后面配置权重
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
server {
listen 80;
server_name www.itmayiedu.com;
location / {
### 指定上游服务器负载均衡服务器
proxy_pass http://backServer;
index index.html index.htm;
}
}
3.ip绑定算法, 每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。俗称IP绑定。
upstream backServer{
server 127.0.0.1:8080 ;
server 127.0.0.1:8081 ;
#这一行代表使用ip绑定
ip_hash;
}
server {
listen 80;
server_name www.itmayiedu.com;
location / {
### 指定上游服务器负载均衡服务器
proxy_pass http://backServer;
index index.html index.htm;
}
}
8.负载均衡的故障后转移功能
当某个Tomcat服务器出现宕机时,为了不让nginx做负载均衡是一直等待,需要做容错处理,当出现宕机或延迟时自动访问下一台服务器
server {
listen 80;
server_name www.itmayiedu.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;
}
}