【Nginx】Nginx中location的使用方法详解

前情提要:本篇博客介绍了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语法规则

cpp 复制代码
# 语法规则:
location [ = | ~ | ~* | ^~ ] uri { ... }

=           #用于标准uri前,需要请求字串与uri精确匹配,大小敏感,如果匹配成功就停止向下匹配并立即处理请求

^~          #用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头
			#对uri的最左边部分做匹配检查,不区分字符大小写
			
~           #用于标准uri前,表示包含正则表达式,并且区分大小写

~*          #用于标准uri前,表示包含正则表达式,并且不区分大写

不带符号	 #匹配起始于此uri的所有的uri

\            #用于标准uri前,表示包含正则表达式并且转义字符。可以将  . * ?等转义为普通符号

#匹配优先级从高到低:
=, ^~, ~/~*, 不带符号

二、location后面不加修饰符示例

在server部分使用location配置一个web界面,例如:当访问nginx服务器的/logo.jpg的时候要显示指定 HTML文件的内容,精确匹配一般用于匹配组织的logo等相对固定的URL,匹配优先级最高

cpp 复制代码
[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后面加 = 示例

cpp 复制代码
# 编辑子配置文件
[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后面加 ^~ 示例

cpp 复制代码
# 编辑子配置文件
[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后面加 ~ 示例

cpp 复制代码
# 编辑子配置文件
[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后面加 ~* 示例

cpp 复制代码
# 编辑子配置文件
[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的使用的详细示例

相关推荐
实在智能RPA2 小时前
Agent在零售行业能解决哪些痛点?——深度解析零售企业智能自动化转型路径
运维·人工智能·ai·自动化·零售
小陈工2 小时前
2026年4月1日技术资讯洞察:AI芯片革命、数据库智能化与云原生演进
前端·数据库·人工智能·git·python·云原生·开源
KKKlucifer2 小时前
智能体协同安全服务,提升运维效率与防护精度
运维·安全
wggmrlee3 小时前
RAG基于LangChain实现
linux·langchain
小码吃趴菜3 小时前
服务器预约系统linux小项目-第六节课
运维·服务器
christine_rr3 小时前
linux常用命令(3)压缩命令
linux
L_09073 小时前
【Linux】实现简易 shell 程序
linux·bash
爱学习的程序媛3 小时前
WSL2:Windows上运行Linux的完整指南
linux·运维·windows·ubuntu·wsl2
会飞的大可3 小时前
Jenkins 企业级集成实战:从规划到落地的完整指南
运维·jenkins