一、常见的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] :匹配所有大小写字母或数字
() :表达式的开始和结束位置
| :或运算符
从功能看 rewrite 和 location 都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,但 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。
Nginx 的 HTTP 配置主要包括三个区块,结构如下:
http {
# 这个是协议级别
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
gzip on;
server {
# 这个是服务器级别
listen 80;
server_name localhost;
location / {
# 这个是请求级别
root html;
index index.html index.htm;
}
}
}
二、location
location 区段
location 是在 server 块中配置,根据不同的 URI 使用不同的配置,来处理不同的请求。
location 是有顺序的,会被第一个匹配的location 处理,这里的顺序不是写在配置文件中的上下顺序,而是匹配规则顺序(nginx 内部规定的)。
如何工作的
location 可以由前缀字符串或正则表达式定义。正则表达式由前面的“ ~*”修饰符(不区分大小写的匹配)或“ ~ ”修饰符(区分大小写的匹配)指定。为了找到与给定请求匹配的位置,nginx首先检查使用前缀字符串定义的位置(前缀位置)。其中,选择并记住具有最长匹配前缀的位置。然后按照在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一个匹配项上终止,并使用相应的配置。如果未找到与正则表达式匹配的内容,则使用前面记住的前缀位置的配置。
基本语法如下:
location [=|~|~*|^~|@] pattern{
...
}
2.1、location大致可以分为三类
精准匹配:location = / {}
一般匹配:location / {}
正则匹配:location ~ / {}
2.2、location 修饰符含义
= 表示精确匹配,优先级也是最高的
^~ 表示uri以某个常规字符串开头,理解为匹配url路径即可
~ 表示区分大小写的正则匹配
~* 表示不区分大小写的正则匹配
!~ 表示区分大小写不匹配的正则
!~* 表示不区分大小写不匹配的正则
/ 通用匹配,任何请求都会匹配到
@ 内部服务跳转,用于有名称的路由,比如: location @abc {
}
2.3、location 优先级
首先精确匹配 =
其次前缀匹配 ^