nginx 路由匹配规则

路由- location 的使用


语法规则: location [=|~|~*|^~] /uri/ {...}
首先匹配=(精确匹配),其次匹配^~(非正则),其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
注意:
= 精准匹配命中时,停止location 动作,直接走 精准匹配;
一般匹配(含非正则)命中时,先收集所有的普通匹配,最后对比出最长的那一条
如果最长的那一条普通匹配声明为非正则,直接此条匹配,停止location
如果最长的那一条普通匹配不是非正则,继续往下走 正则 location
按代码顺序执行正则匹配,当第一条正则location 命中时,停止 location

path-匹配规则


将url 拆解为 域名/端口/path/params
先将域名/端口,对应到目标虚拟主机 server
path 部分参与 location匹配,path=path1 匹配部分 + path2 剩余部分
进入location 方法体内部流程
若是静态文件处理,则进入 目标目录查找文件: root 指令找 path1 + path2 对应的文件;alias 指令时找 path2 对应的文件
若是 proxy 代理,则代理地址 形如: proxy_pass=ip:port 时,转发路径 path1+ path2到目标服务。代理地址形如:proxy_pass=ip:port/xxx 时,转发路径 path2 到目标服务。params 始终跟随转发。

rewirite 使用:


规则:rewrite regex replacement [flag];
flat: break/last/redirect/permanent
regex 正则表达式
replacement 替换值,新值
flag 后续处理标识


nginx 处理请求的十一个阶段:


post-read:  接收到完整的http头部后处理的阶段,在uri 重写之前。一般跳过
server-rewrite:  location 匹配前,修改uri 的阶段,用于重定向,location块外的重写指令(多次执行)
find-config: 寻找匹配的 location 块配置项(多次执行)
rewrite: 找到location 块后再修改uri,location 级别的uri 重写阶段(多次执行)
post-rewrite: 防死循环,跳转到 对应阶段
preaccess: 权限预处理
access: 判断是否允许 这个请求进入
post-access: 向用户发送拒绝服务的错误码,用来响应上一阶段的拒绝
try-files: 访问静态文件资源
content: 内容生成阶段,该阶段产生响应,并发送到客户端
log: 记录访问日志

upstream 负载


语法格式:
upstream 负载名 {
  [ip_hash;]
  server ip:port [weigth=数字] [down];
  server ip:port [weigth=数字] [down];
}
1、轮询:
upstream order {
  server xxx.xxx.xxx.xxx:xx;
  server xxx.xxx.xxx.xxx:xx;
}
2、weigth: (根据权重)
upstream order {
  server xxx.xxx.xxx.xxx:xx weigth=3;
  server xxx.xxx.xxx.xxx:xx weight=1;
  server xxx.xxx.xxx.xxx:xx weight=2 down;
}
轮询机率,weight 和 访问比例成正比,用于后段服务器性能不均的情况;
down 暂时不参与负载。
3、ip_hash
upstream order {
  ip_hash;
  server xxx.xxx.xxx.xxx:xx;
  server xxx.xxx.xxx.xxx:xx;
}
根据ip 散列值,保证 session一致,保证每个客户端的请求访问的都是同一个后段服务器
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章