目录
一、Nginx常见模块
1.http
http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这模块中。作用包括:文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。
2.server
server块,虚拟主机(虚拟服务器)。作用:使得Nginx服务器可以在同一台服务器上只要运行一组Nginx进程,就可以运行多个网站。
3.location
location块是server块的一个指令。作用:基于Nginx服务器接收到的请求字符串,虚拟主机名称(ip,域)、名url匹配,对特定请求进行处理。
二、location
1.Nginx常用正则表达式
字符 | 含义 |
---|---|
. | 匹配任意单个字符,可以是一个汉字 |
^ | 行首锚定, 用于模式的最左侧 |
$ | 行尾锚定,用于模式的最右侧 |
* | 匹配前面字符任意次(包括0次) |
? | 0或1次 |
+ | 1次或多次(1次或以上) |
\ | 转义符 |
\d | 只匹配数字 |
{n} | 重复n次 |
{n,} | 至少n次(n次货以上) |
{n,m} | n到m次 |
[ ] | 定义匹配字符的范围,只匹配一次 |
[c] | 单个字符 |
[a-z] | 匹配任意小写字母 |
[a-zA-Z0-9] | 匹配任意字母和数字 |
() | 表达式的开始和结束位置 |
a | b | 或运算符a|b |
2.location 常用的匹配规则
规则表达式 | 规则含义 |
---|---|
= | 进行普通字符精确匹配。也就是完全匹配 |
^~ | 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他 location |
~ | 表示执行一个正则匹配,区分大小写 |
~* | 表示执行一个正则匹配,不区分大小写 |
!~ | 表示执行一个正则匹配,区分大小写不匹配 |
!~* | 表示执行一个正则匹配,不区分大小写不匹配 |
3. 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/ {}匹配 则会先匹配上一请求,所以到不了这一条
4.location优先级
(1)相同类型的表达式,字符串长的会优先匹配
(2)按优先级排列
① = 类型的优先级最高。一旦匹配成功,则不再查找其他匹配项
② ^~ 类型表达式,一旦匹配成功,则不再查找其他匹配项
③ 正则表达式(~和~*) 类型的优先级次之。常规字符串匹配类型,按前缀匹配
④ 通用匹配(/) , 如果没有其它匹配,任何请求都会匹配到
总结:
(location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) >(location ~ 完整路径) > (location /)通用匹配
例题可以访问官方文档浏览协助理解