一文詳解Nginx中l(wèi)ocation的使用方法
前情提要:本篇博客介紹了nginx的核心配置模塊中的location部分的詳解,包括location的語(yǔ)法規(guī)則(= ^~ ~ ~* 不帶符號(hào) \)的功能、用法以及詳細(xì)的示例。通過(guò)本篇博客可以加深對(duì)location的使用的理解。
一、location簡(jiǎn)介
1.1 location使用介紹
- 在一個(gè)server中l(wèi)ocation配置段可存在多個(gè),用于實(shí)現(xiàn)從uri到文件系統(tǒng)的路徑映射;
- ngnix會(huì)根據(jù)用戶請(qǐng)求的URI來(lái)檢查定義的所有l(wèi)ocation,按一定的優(yōu)先級(jí)找出一個(gè)最佳匹配,而后應(yīng)用其配置在沒(méi)有使用正則表達(dá)式的時(shí)候,nginx會(huì)先在server中的多個(gè)location選取匹配度最高的一個(gè)uri
- uri是用戶請(qǐng)求的字符串,即域名后面的web文件路徑,然后使用該location模塊中的正則url和字符串,如果匹配成功就結(jié)束搜索,并使用此location處理此請(qǐng)求。
1.2 location語(yǔ)法規(guī)則
# 語(yǔ)法規(guī)則:
location [ = | ~ | ~* | ^~ ] uri { ... }
= #用于標(biāo)準(zhǔn)uri前,需要請(qǐng)求字串與uri精確匹配,大小敏感,如果匹配成功就停止向下匹配并立即處理請(qǐng)求
^~ ? #用于標(biāo)準(zhǔn)uri前,表示包含正則表達(dá)式,并且匹配以指定的正則表達(dá)式開(kāi)頭
#對(duì)uri的最左邊部分做匹配檢查,不區(qū)分字符大小寫(xiě)
~ ? #用于標(biāo)準(zhǔn)uri前,表示包含正則表達(dá)式,并且區(qū)分大小寫(xiě)
~* ? #用于標(biāo)準(zhǔn)uri前,表示包含正則表達(dá)式,并且不區(qū)分大寫(xiě)
不帶符號(hào) #匹配起始于此uri的所有的uri
\ ? #用于標(biāo)準(zhǔn)uri前,表示包含正則表達(dá)式并且轉(zhuǎn)義字符??梢詫? . * ?等轉(zhuǎn)義為普通符號(hào)
#匹配優(yōu)先級(jí)從高到低:
=, ^~, ~/~*, 不帶符號(hào)二、location后面不加修飾符示例
在server部分使用location配置一個(gè)web界面,例如:當(dāng)訪問(wèn)nginx服務(wù)器的/logo.jpg的時(shí)候要顯示指定 HTML文件的內(nèi)容,精確匹配一般用于匹配組織的logo等相對(duì)固定的URL,匹配優(yōu)先級(jí)最高
[root@Nginx ~]# vim /usr/local/nginx/conf/conf.d/vhost.conf
server {
listen 80;
server_name www.doubledragon.org;
location /null { # 不帶修飾符,代表匹配以/null開(kāi)頭的所有請(qǐng)求
return 200 "/null-1";
}
}
# 訪問(wèn)測(cè)試
[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/開(kāi)頭的所有請(qǐng)求
}
}
# 重新測(cè)試
[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
# 訪問(wèn)測(cè)試
[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開(kāi)頭的,若匹配成功則會(huì)阻止正則匹配
return 200 "/doc";
}
location ~* ^/document$ {
return 200 "/document"; # 正則匹配,精確匹配/document
}
}
[root@Nginx ~]# nginx -s reload
# 訪問(wèn)測(cè)試
[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開(kāi)頭的,區(qū)分大小寫(xiě)
}
location ~ \.php$ {
return 200 ".php"; # 匹配以.php結(jié)尾的,區(qū)分大小寫(xiě)
}
}
[root@Nginx ~]# nginx -s reload
# 訪問(wèn)測(cè)試
[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開(kāi)頭的,不區(qū)分大小寫(xiě)
}
}
[root@Nginx ~]# nginx -s reload
# 訪問(wèn)測(cè)試
[root@Nginx ~]# curl www.doubledragon.org/api
^/api
[root@Nginx ~]# curl www.doubledragon.org/API
^/api
[root@Nginx ~]#
綜上,以上就是關(guān)于location的使用的詳細(xì)示例
以上就是一文詳解Nginx中l(wèi)ocation的使用方法的詳細(xì)內(nèi)容,更多關(guān)于Nginx location使用方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nginx 處理超長(zhǎng) Cookie 導(dǎo)致的 400 錯(cuò)誤
本文主要介紹了Nginx 處理超長(zhǎng) Cookie 導(dǎo)致的 400 錯(cuò)誤,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2026-04-04
Nginx配置二級(jí)域名的方法實(shí)現(xiàn)
本文主要介紹了Nginx配置二級(jí)域名的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
nginx rewrite重寫(xiě)規(guī)則與防盜鏈配置方法教程詳解
這篇文章主要介紹了nginx rewrite重寫(xiě)規(guī)則與防盜鏈配置方法教程詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Nginx配置統(tǒng)計(jì)流量帶寬請(qǐng)求及記錄實(shí)時(shí)請(qǐng)求狀態(tài)的方法
這篇文章主要介紹了Nginx中配置統(tǒng)計(jì)流量帶寬請(qǐng)求及記錄實(shí)時(shí)請(qǐng)求狀態(tài)的方法,分別用到了ngx_req_status和ngx_realtime_request模塊,需要的朋友可以參考下2016-01-01
詳解nginx+php執(zhí)行請(qǐng)求的工作原理
這篇文章主要介紹了詳解nginx+php執(zhí)行請(qǐng)求的工作原理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Nginx反向代理解決IPv6報(bào)錯(cuò)與跨網(wǎng)段訪問(wèn)的詳細(xì)步驟
本文檔記錄了如何通過(guò) Nginx 將公網(wǎng)域名請(qǐng)求代理到公司內(nèi)部網(wǎng)絡(luò)服務(wù)的完整過(guò)程,重點(diǎn)解決了 IPv6 解析導(dǎo)致的連接超時(shí) 問(wèn)題,并詳細(xì)闡述了 端口映射 與 DNS 解析 的核心原理,需要的朋友可以參考下2026-03-03

