负载均衡架构讲解(立Flag学习Ng-)
负载均衡架构讲解(立Flag学习Ng-)USR1 重新打开日志文件HUP平滑重启,重新加载配置文件https://www.cnblogs.com/gongjingyun123–/p/11424805.htmlTERM、INT 快速关闭QUIT从容关闭
立Flag 学习Ng - Location&Rewrite入门及负载均衡- Location
- Rewrite
- 负载均衡
参考文档:
https://www.cnblogs.com/dadonggg/p/7797281.html
http://Nginx.org/en/docs/http/converting_rewrite_rules.html
https://www.nginx.cn/doc/standard/httprewrite.html
https://www.cnblogs.com/gongjingyun123–/p/11424805.html
补充
- Ng的 kill 信号
TERM、INT 快速关闭
QUIT从容关闭
HUP平滑重启,重新加载配置文件
USR1 重新打开日志文件
USR2 平滑升级可执行程序
- 虚拟主机
虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台虚拟主机和一立的主机完全一样。
利用虚拟主机,不用为每个要运行的网站提供一台单独的nginx服务器或单独运行一组Nginx进程。虚拟主机提供了在同一台服务器、同一组Nginx进程上运行多个网站的功能
ng的虚拟主机有基于域名、端口、ip
Locationlocation ~* /js/.*/\.js
以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。
以^~ 开头,表示URI以某个常规字符串开头,不是正则匹配
以~ 开头,表示区分大小写的正则匹配;
以~* 开头,表示不区分大小写的正则匹配
以/ 开头,通用匹配 如果没有其它匹配 任何请求都会匹配到
location 的匹配顺序是先匹配普通,再匹配正则 正则匹配会覆盖普通匹配
- 精准匹配: =
server{
listen 80;
server_name jimmy.cn.com
location = /app{
....
}
}
如上配置,则当访问为 jimmy.cn.com/app会进入该虚拟主机中
- 正则匹配
所有的地址都以 /app开头,所以这条规则将最后匹配到默认请求。当然后面要有最长匹配的规则
server{
listen 80;
server_name jimmy.cn.com
location /app{
....
}
}
如果地址是 XXX.xx/app/flagNg。则会进入这个虚拟主机。要注意的是,当上面的 /app的虚拟机也存在的时候会按照url的最长匹配匹配到这个虚拟机
location /app/flagNg{
....
}
匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条(注意前面的^~)
location ^~ /images/ {
...
}
匹配所有以 gif jpg或jpeg 结尾的请求。这里如果请求的url是 /images/.../xx/jpg 在上面的虚拟主机存在的时候就不会进入这个。
location ~* \.(gif|jpg|jpeg)$ {
...
}
先最长匹配/images/abc/ 开头的地址
location ~ /images/abc/ {
...
}
匹配优先级:
(location =) > (location 完整路径) > (location ^~ 路径) > (location * 正则顺序) > (location 部分起始路径) > (/)
Rewriterewrite功能就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
rewrite只能放在 server{} location{} if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用。
- 语法 :rewrite regex replacement [flag];
rewrite 在多个模块可执行,因此是有执行顺序的
执行server块的rewrite指令
执行location匹配
执行选定的location中的rewrite指令
如果其中某步URI被重写,则重新循环执行。直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误
flag取值
- last : 表示完成rewrite
- break : 停止执行当前虚拟主机的后续rewrite指令集
- redirect : 返回302临时重定向,地址栏会显示跳转后的地址
- permanent : 返回301永久重定向,地址栏会显示跳转后的地址
last 和 break:
last一般写在server和if中,而break一般使用在location中
last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配
break和last都能停止后面的rewrite指令,但是last后会继续执行location指令。
其实这里可以理解为for循环中的continue和break的区别。
正则表达式:
- . : 匹配除换行符以外的任意字符
- ? : 重复0次或1次
- : 重复1次或更多次
- * : 重复0次或更多次
- \d :匹配数字
- ^ : 匹配字符串的开始
- $ : 匹配字符串的结束
- {n} : 重复n次
- {n } : 重复n次或更多次
- [c] : 匹配单个字符c
- [a-z] : 匹配a-z小写字母的任意一个
小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。
负载均衡这部分我在之前的文章中有实现。这里简单的重复下
# 轮询
# 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
upstream xx {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
# 权重轮询
# 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。down 暂时不参与负载
upstream xx {
server 172.17.0.4:8081 weight=2;
server 172.17.0.5:8081 weight=1;
}
# ip_hash
# 每个请求按访问ip的hash结果分配,这样同一客户端的请求总是发往同一个后端服务器,可以解决session的问题
upstream xx {
ip_hash;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
绅士要的封面图(如有侵权联系删除)