目录
- 前言
- 一、location区段
- 二、location前缀匹配
- 三、location配置实例
- 3.1 无修饰符
- 3.2 =匹配
- 3.3 ~匹配
- 3.4 ^~匹配
- 3.5 ~*匹配
- 总结
前言
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 是在 server 块中配置,根据不同的 URI 使用不同的配置,来处理不同的请求。
- location 是有顺序的,会根据不同请求配置的优先级来匹配的location 处理。
- 基本语法如下:
location [=|~|~*|^~|@] pattern{……}
二、location前缀匹配
= #表示精确匹配,优先级也是最高的
^~ #表示uri以某个常规字符串开头,理解为匹配url路径即可
~ #表示区分大小写的正则匹配
~* #表示不区分大小写的正则匹配
!~ #表示区分大小写不匹配的正则
!~* #表示不区分大小写不匹配的正则
/ #通用匹配,任何请求都会匹配到
@ #内部服务跳转
匹配优先级:
- 匹配优先级为:从上(=)至下(@)优先级依次递减,也就是说“=”的优先级最高,“@”优先级最低。
- 多个location配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按正则匹配,最后是交给 / 通用匹配。**当有匹配成功时候,停止匹配,**按当前匹配规则处理请求。
三、location配置实例
3.1 无修饰符
必须以指定模式开始
server {
listen 80;
server_name localhost;
location /a {
root /var/www/nginx;
index test.html;
}
}
[root@server-yum1 ~]# mkdir /var/www/nginx/a/ -p
[root@server-yum1 ~]# echo "hello world !!" >> /var/www/nginx/a/test.html
浏览器端访问:http://10.20.151.8/a/
3.2 =匹配
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/http_access.log main;
location / {
root /var/www/nginx/;
index a.html index.htm;
}
location = / {
root /var/www/nginx/;
index b.html index.htm;
}
}
[root@server-yum1 ~]# echo "location /" > /var/www/nginx/a.html
[root@server-yum1 ~]# echo "location /" > /var/www/nginx/b.html
(1)浏览器端访问:http://10.20.151.8/
在没有跟具体路径时,会优先匹配有“=”的location
(2)浏览器端访问:http://10.20.151.8/a.html
如果跟了具体路径时,会优先匹配a.html所在的location
3.3 ~匹配
server {
server_name localhost;
location ~ /a { #区分(a)大小写的正则匹配
root /var/www/nginx;
index a.html index.html;
}
}
[root@server-yum1 ~]# echo "location ~ /a" > /var/www/nginx/a/a.html
(1)浏览器端访问:http://10.20.151.8/a/
(2)浏览器端访问:http://10.20.151.8/A/
3.4 ^~匹配
server {
server_name localhost;
location ^~ /it/ { #匹配任何以/it/开始的查询并且停止搜索,不检查正则表达式
root /var/www/nginx;
index m.html;
}
}
[root@server-yum1 ~]# mkdir /var/www/nginx/it
[root@server-yum1 ~]# echo "location ^~ /it" > /var/www/nginx/it/m.html
浏览器端访问:http://10.20.151.8/it/
3.5 ~*匹配
server {
server_name localhost;
location ~* \.png$ { #不区分大小写匹配所有以.png结尾的文件
root /var/www/nginx; #上传图片到发布目录中
}
}
[root@server-yum1 nginx]# rz -y #上传test.png图片
浏览器端访问:http://10.20.151.8/test.png
总结
location 区段匹配示例:
location = / { # 只匹配 / 的查询
[ configuration A ]
}
location / { # 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配
[ configuration B ]
}
location ^~ /images/ { # 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式
[ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ { # 匹配任何以gif、jpg、jpeg结尾的文件
[ configuration D ]
}