目录
一、nginx rewrite概述
URL:就是一个具体路径/位置
URI:指的是一个拥有相同类型/特性的对象集合
location是为了匹配访问的路径(URL)
if 做为分支判断,并且if分支,仅支持单分支
rewrite:对访问路径进行改写大分支:
1、改写的路径
在Nginx服务器上-改写路径
2、改写的路径
在后端/其他服务器上-跳转
2、Rewrite跳转场景
URL看起来更规范、合理
企业会将动态URL地址伪装成静态地址提供服务
网址换新域名后,让旧的访问跳转到新的域名上
服务端某些业务调整
3、Rewrite跳转实现
Nginx是通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。
另外该模块需要 PCRE支持,应在编译Nginx时指定PCRE 支持,默认已经安装。
根据相关变量重定向和选择不同的配置,从一个location跳转到另一个location,不过这样的循环最多可以执行10次,超过后Nginx将返回500错误。
重写模块包含set指令,来创建新的变量并设其值,这在有些情景下非常有用的,如记录条件标识、传递参数到其他location、记录做了什么等等。
rewrite功能就是使用Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
4、Rewrite实际场景
使用rewrite进行匹配跳转(防盗链)
使用if匹配全局变量后跳转
使用location匹配再跳转(匹配的访问 路径URL location可以匹配本地的重写以及跨服务器的跳转)
rewrite放在server{}, if{},location{}段中
(多个server模块 sever模块里包含location location包含if if里面包含rewrite)
location只对域名后边的除去传递参数外的字符串起作用
对域名或参数字符串
使用if全局变量匹配
使用proxy_pass反向代理
二、Nginx常见模块
http
http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这模块中。
作用包括:文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。
server
server块,虚拟主机(虚拟服务器)。作用:使得Nginx服务器可以在同一台服务器上只要运行一组Nginx进程,就可以运行多个网站。
location
location块是server块的一个指令。作用:基于Nginx服务器接收到的请求字符串,虚拟主机名称(ip,域名)、url匹配,对特定请求进行处理。
三、常见的Nginx正则表达式
^ :匹配输入字符串的起始位置
$ :匹配输入字符串的结束位置
* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+ :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
. :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
\ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
\d :匹配纯数字
{n} :重复 n 次
{n,} :重复 n 次或更多次
{n,m} :重复 n 到 m 次
[] :定义匹配的字符范围
[c] :匹配单个字符 c
[a-z] :匹配 a-z 小写字母的任意一个
[a-zA-Z0-9] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符
1、正则的优势
精确匹配,减少遍历的消耗
节省服务响应的资源消耗
提高用户体验感
提高服务器并发时、处理效率/性能
2、正则的作用
Nginx作为运维角度前段接受、想用客户请求的直接对服务器所以需要考虑到Nginx的执行效率(精确匹配-类比)、 性能(资源消耗)、抗压能力(高并发时处理能力)、用户体验感(用户访问群体)
四、Rewrite语法
rewrite < regex > < replacement > [flag]
regex:正则表达式
replacement :跳转后的内容
flag:rewrite支持的flag标记
1、flag标记说明
标记 | 说明 |
---|---|
last | 相当于Apache的【L】标记,表示完成rewrite |
break | v本条规则匹配完成即终止,不在匹配后面的任何规则 |
redirect | 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫不会更新url |
permanent | 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url |
2、last和break比较
last | break |
---|---|
使用场景 | 一般写在server和 if中 |
URL匹配 | 不重质重写后的url匹配 |
3、rewrite执行顺序 | |
执行server块里面的rewrite指令 |
执行location匹配
执行选定的location中的rewrite指令
五、location
1、location大致可以分为三类
精准匹配:location = / {...}
一般匹配:location / {...}
正则匹配:location ~ / {...}
2、location常用的匹配规则
= :进行普通字符精确匹配,也就是完全匹配。
^~ :表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。
~ :区分大小写的匹配。
~* :不区分大小写的匹配。
!~ :区分大小写的匹配取非。
!~* :不区分大小写的匹配取非。