前情提要:本篇博客介绍了nginx的核心配置模块中的location部分的详解,包括location的语法规则(= ^~ ~ ~* 不带符号 \)的功能、用法以及详细的示例。通过本篇博客可以加深对location的使用的理解。
一、location简介
1.1 location使用介绍
- 在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;
- ngnix会根据用户请求的uri来检查定义的所有location,按一定的优先级找出一个最佳匹配,而后应用其配置在没有使用正则表达式的时候,nginx会先在server中的多个location选取匹配度最高的一个uri
- uri是用户请求的字符串,即域名后面的web文件路径,然后使用该location模块中的正则url和字符串,如果匹配成功就结束搜索,并使用此location处理此请求。
1.2 location语法规则
# 语法规则:
location [ = | ~ | ~* | ^~ ] uri { ... }
= #用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求
^~ #用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头
#对uri的最左边部分做匹配检查,不区分字符大小写
~ #用于标准uri前,表示包含正则表达式,并且区分大小写
~* #用于标准uri前,表示包含正则表达式,并且不区分大写
不带符号 #匹配起始于此uri的所有的uri
\ #用于标准uri前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号
#匹配优先级从高到低:
=, ^~, ~/~*, 不带符号二、location后面不加修饰符示例
在server部分使用location配置一个web界面,例如:当访问nginx服务器的/logo.jpg的时候要显示指定 html文件的内容,精确匹配一般用于匹配组织的logo等相对固定的url,匹配优先级最高
[root@nginx ~]# vim /usr/local/nginx/conf/conf.d/vhost.conf
server {
listen 80;
server_name www.doubledragon.org;
location /null { # 不带修饰符,代表匹配以/null开头的所有请求
return 200 "/null-1";
}
}
# 访问测试
[root@nginx ~]# curl www.doubledragon.org/null
/null-1
[root@nginx ~]# curl www.doubledragon.org/null/
/null-1
[root@nginx ~]# curl www.doubledragon.org/null/1
/null-1
[root@nginx ~]# curl www.doubledragon.org/null/2
/null-1
[root@nginx ~]# curl www.doubledragon.org/null1
/null-1
[root@nginx ~]# curl www.doubledragon.org/null12
/null-1
[root@nginx ~]# curl www.doubledragon.org/null123
/null-1
# 修改配置文件
server {
listen 80;
server_name www.doubledragon.org;
location /null {
return 200 "/null-1";
}
location /blog/ {
return 200 "/blog/"; # 不带修饰符,代表匹配/blog/开头的所有请求
}
}
# 重新测试
[root@nginx ~]# curl www.doubledragon.org/blog/23
/blog/
[root@nginx ~]# curl www.doubledragon.org/blog1/23
<html>
<head><title>404 not found</title></head>
<body>
<center><h1>404 not found</h1></center>
<hr><center>nginx/1.28.2</center>
</body>
</html>
[root@nginx ~]# curl www.doubledragon.org/blog
<html>
<head><title>404 not found</title></head>
<body>
<center><h1>404 not found</h1></center>
<hr><center>nginx/1.28.2</center>
</body>
</html>
[root@nginx ~]# curl www.doubledragon.org/blog/
/blog/三、location后面加 = 示例
# 编辑子配置文件
[root@nginx ~]# vim /usr/local/nginx/conf/conf.d/vhost.conf
server {
listen 80;
server_name www.doubledragon.org;
location = /login/ {
return 200 "=/login/"; # 精确匹配/login/
}
location = /blog {
return 200 "=/blog"; # 精确匹配/blog
}
}
[root@nginx ~]# nginx -s reload
# 访问测试
[root@nginx ~]# curl www.doubledragon.org/login/
=/login/
[root@nginx ~]# curl www.doubledragon.org/login
<html>
<head><title>404 not found</title></head>
<body>
<center><h1>404 not found</h1></center>
<hr><center>nginx/1.28.2</center>
</body>
</html>
[root@nginx ~]# curl www.doubledragon.org/login1/
<html>
<head><title>404 not found</title></head>
<body>
<center><h1>404 not found</h1></center>
<hr><center>nginx/1.28.2</center>
</body>
</html>
[root@nginx ~]# curl www.doubledragon.org/login/1
<html>
<head><title>404 not found</title></head>
<body>
<center><h1>404 not found</h1></center>
<hr><center>nginx/1.28.2</center>
</body>
</html>
[root@nginx ~]# curl www.doubledragon.org/blog
=/blog
[root@nginx ~]# curl www.doubledragon.org/blog/
<html>
<head><title>404 not found</title></head>
<body>
<center><h1>404 not found</h1></center>
<hr><center>nginx/1.28.2</center>
</body>
</html>
[root@nginx ~]# curl www.doubledragon.org/blog/1
<html>
<head><title>404 not found</title></head>
<body>
<center><h1>404 not found</h1></center>
<hr><center>nginx/1.28.2</center>
</body>
</html>
[root@nginx ~]# curl www.doubledragon.org/blog1
<html>
<head><title>404 not found</title></head>
<body>
<center><h1>404 not found</h1></center>
<hr><center>nginx/1.28.2</center>
</body>
</html>
四、location后面加 ^~ 示例
# 编辑子配置文件
[root@nginx ~]# vim /usr/local/nginx/conf/conf.d/vhost.conf
server {
listen 80;
server_name www.doubledragon.org;
location ^~ /doc { # 匹配/doc开头的,若匹配成功则会阻止正则匹配
return 200 "/doc";
}
location ~* ^/document$ {
return 200 "/document"; # 正则匹配,精确匹配/document
}
}
[root@nginx ~]# nginx -s reload
# 访问测试
[root@nginx ~]# curl www.doubledragon.org/doc
/doc
[root@nginx ~]# curl www.doubledragon.org/document
/doc
[root@nginx ~]# curl www.doubledragon.org/doc1
/doc
[root@nginx ~]# curl www.doubledragon.org/doc/2
/doc
[root@nginx ~]# curl www.doubledragon.org/do
<html>
<head><title>404 not found</title></head>
<body>
<center><h1>404 not found</h1></center>
<hr><center>nginx/1.28.2</center>
</body>
</html>
五、location后面加 ~ 示例
# 编辑子配置文件
[root@nginx ~]# vim /usr/local/nginx/conf/conf.d/vhost.conf
server {
listen 80;
server_name www.doubledragon.org;
location ~ ^/api {
return 200 "^/api"; # 匹配以/api开头的,区分大小写
}
location ~ \.php$ {
return 200 ".php"; # 匹配以.php结尾的,区分大小写
}
}
[root@nginx ~]# nginx -s reload
# 访问测试
[root@nginx ~]# curl www.doubledragon.org/api
^/api
[root@nginx ~]# curl www.doubledragon.org/apii
^/api
[root@nginx ~]# curl www.doubledragon.org/api/1
^/api
[root@nginx ~]# curl www.doubledragon.org/index.php
.php
[root@nginx ~]# curl www.doubledragon.org/html/index.php
.php
[root@nginx ~]# curl www.doubledragon.org/api.php
^/api
六、location后面加 ~* 示例
# 编辑子配置文件
[root@nginx ~]# vim /usr/local/nginx/conf/conf.d/vhost.conf
server {
listen 80;
server_name www.doubledragon.org;
location ~* ^/api {
return 200 "^/api"; # 匹配以/api开头的,不区分大小写
}
}
[root@nginx ~]# nginx -s reload
# 访问测试
[root@nginx ~]# curl www.doubledragon.org/api
^/api
[root@nginx ~]# curl www.doubledragon.org/api
^/api
[root@nginx ~]#
综上,以上就是关于location的使用的详细示例
以上就是一文详解nginx中location的使用方法的详细内容,更多关于nginx location使用方法的资料请关注代码网其它相关文章!
发表评论