Nginx重写功能
- 一、Nginx常见模块
- 二、访问路由location
- 2.1location常用正则表达式
- 2.2、location的分类
- 2.3、location常用的匹配规则
- 2.4、location优先级排列说明
- 2.5、location示例
- 2.6、location优先级总结
- 2.7、实例
- 2.7.1、location=/{}与location/{}
- 2.7.2、location=/index.html{}与location/{}
- 三、return指令
- 3.1定义和作用
- 3.2、基本语法
一、Nginx常见模块
- http
http块是Nginx服务器配置中的重要部分,代理,缓存和日志定义等绝大多数功能和第三方模块的配置都可以放在这个模块中、用包括引入MIME-Type定义、日志自定义,是否使用sendfle传输文件、连接超时时间,单链接请求数上限等 - server
server块,虚拟主机(虚拟服务器)。作用:使得Nginx服务器可以在同一台服务器上只要运行一组Nginx进程,就可以运行多个网站 - location
location块是serve块的一个指令。作用:基于Nginx服务器收到的请求字符串,虚拟主机名称,url匹配,对特定请求进行处理
二、访问路由location
2.1location常用正则表达式
匹配符 | 表示含义 |
---|---|
^ | 匹配输入字符串的起始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” |
+ | 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o” |
? | 匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,“?”等效于“{0,1}” |
. | 表示任意一个字符 |
|转义字符 用于取消特殊符号的含义 | |
|d 匹配纯数字 | |
\s | 匹配空的(空格或者制表符) |
{n} | 匹配前面的子表达式n次 |
{n,} | 匹配前面的子表达式不少于n次 |
{n,m} | 匹配前面的子表达式n到m次 |
[ ] | 匹配括号中的一个字符 |
[c] | 匹配单个字符 c |
[a-z] | 匹配 a-z 小写字母的任意一个 |
[a-zA-Z0-9] | 匹配所有大小写字母或数字 |
() | 表达式的开始和结束位置 |
l | 或运算符 |
2.2、location的分类
- 精准匹配:location=/{}
- 一般匹配:location/{}
- 正则匹配:location~/{}
2.3、location常用的匹配规则
规则表达式 | 规则含义 |
---|---|
= | 进行普通字符精确匹配。也就是完全匹配 |
^~ | 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他 location |
~ | 表示执行一个正则匹配,区分大小写 |
~* | 表示执行一个正则匹配,不区分大小写 |
!~ | 表示执行一个正则匹配,区分大小写不匹配 |
!~* | 表示执行一个正则匹配,不区分大小写不匹配 |
2.4、location优先级排列说明
1.首先精确匹配=
2.其次前缀匹配^~
3.其次是按文中顺序的正则匹配或*
4.然后匹配不带任何修饰的前缀匹配
5.最后是交给/通用匹配
location = / {[ configuration A ]
}location / {[ configuration B ]
}location /documents/ {[ configuration C ]
}location ^~ /images/ {[ configuration D ]
}location ~* \.(gif|jpg|jpeg)$ {[ configuration E ]
}
2.5、location示例
1.精确匹配
location = / {}
=为精确匹配 / , 主机名后不能携带任何字符串,比如 / 和 /data ,则/匹配,/data不匹配
2.一般匹配/通用匹配
location / {}
代表以/开头,所以这条规则将匹配所有的请求
location /documents/ {}
匹配任何以/documents/开头的地址,匹配符合后,还会继续往下搜索其他 location,只有其它location后面的正则表达式没有匹配到时,才会用这一条
location /documents/abc {}
匹配任何以/documents/abc开头的地址,匹配符合后,还会继续往下搜索其他 location,只有其它location后面的正则表达式没有匹配到时,才会用这一条
3.正则匹配
location ^~ /images/ {}
匹配任何已/images/ 开头的地址,匹配符合后,停止往下搜索,采用这一条
location ~* \.(gif|jpg|jpeg)$ {}
匹配所有 gif jpg 或 jepg 结尾的请求
如果 有上面的location ^~ /images/ {}匹配 则会先匹配上一请求,所以到不了这一条。
2.6、location优先级总结
如果是匹配某个具体文件: (location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) >(location ~ 完整路径) > (location /)通用匹配
2.7、实例
2.7.1、location=/{}与location/{}
实例1:location=/{}和location/{},按道理应匹配前者,但实际确实匹配后者,匹配只写域名精确匹配不生效,接下来一个小例子说明一下
1. #在配置文件添加匹规则
vim /usr/local/nginx/conf/nginx.conf#添加的网页location = / { root /web/dog/;}#默认网页location / {root html;index index.html index.htm; }2. #新建网页站点目录
mkdir -p /web/dog3. #在站点目录下新建index.html
vim /web/dog/index.htmlthis is dog web4. #检查语法并重启
nginx -t
systemctl restart nginx.service 5. #在网页中测试
http://192.168.59.118/
2.7.2、location=/index.html{}与location/{}
在根后加上index.html后生效
1. #修改一下配置文件
vim /usr/local/nginx/conf/nginx.conflocation = /index.html { # 加上index.html root /web/dog/;}2. #重启服务,并网页中测试
systemctl restart nginx.service
三、return指令
3.1定义和作用
return用于完成对请求的处理,并直接向客户端返回响应状态码
3.2、基本语法
return code [text]; #返回给客户端的状态码及响应报文的实体内容,可以调用变量,其中text如果有空格,需要用单或双引号return code url; #返回给客户端的URL地址
如果要跳转到url code只能是302或者301,对应临时/永久重定向301 客户机访问服务器时,服务器会将跳转缓存到客户机中,下次跳转就不需要服务器,从客户机本地缓存调取。
302 临时