詳解nginx?location指令
location 介紹 location是Nginx中的塊級指令(block directive),,location指令的功能是用來匹配不同的url請求,進(jìn)而對請求做不同的處理和響應(yīng),這其中較難理解的是多個(gè)location的匹配順序,本文會作為重點(diǎn)來解釋和說明。 開始之前先明確一些約定,我們輸入的網(wǎng)址叫做請求URI,nginx用請求URI與location中配置的URI做匹配。
Nginx的HTTP配置主要包括三個(gè)區(qū)塊,結(jié)構(gòu)如下: http { //這個(gè)是協(xié)議級別 include mime.types; default_type application/octet-stream; keepalive_timeout 65; gzip on; server { //這個(gè)是服務(wù)器級別 listen 80; server_name localhost; location / { //這個(gè)是請求級別 root html; index index.html index.htm; } } }
location區(qū)段
通過指定模式來與客戶端請求的URI相匹配,基本語法如下:location [=|~|~*|^~|@] pattern{……}
1、沒有修飾符 表示:必須以指定模式開始,如:
server { server_name baidu.com; location /abc { …… } } 那么,如下是對的:http://baidu.com/abchttp://baidu.com/abc?p1http://baidu.com/abc/http://baidu.com/abcde
那么,如下是對的:
http://baidu.com/abc
http://baidu.com/abc?p1
http://baidu.com/abc/
http://baidu.com/abcde
2、=表示:必須與指定的模式精確匹配
server { server_name sish location = /abc { …… } } 那么,如下是對的: http://baidu.com/abc http://baidu.com/abc?p1 如下是錯(cuò)的: http://baidu.com/abc/ http://baidu.com/abcde
3、~ 表示:指定的正則表達(dá)式要區(qū)分大小寫
server { server_name baidu.com; location ~ ^/abc$ { …… } } 那么,如下是對的: http://baidu.com/abc http://baidu.com/abc?p1=11&p2=22 如下是錯(cuò)的: http://baidu.com/ABC http://baidu.com/abc/ http://baidu.com/abcde
4、~* 表示:指定的正則表達(dá)式不區(qū)分大小寫
server { server_name baidu.com; location ~* ^/abc$ { …… } } 那么,如下是對的: http://baidu.com/abc http://baidu..com/ABC http://baidu..com/abc?p1=11&p2=22 如下是錯(cuò)的: http://baidu..com/abc/ http://baidu..com/abcde
5、^~ 類似于無修飾符的行為,也是以指定模式開始,不同的是,如果模式匹配,
那么就停止搜索其他模式了。
6、@ :定義命名location區(qū)段,這些區(qū)段客戶段不能訪問,只可以由內(nèi)部產(chǎn)生的請
求來訪問,如try_files或error_page等
查找順序和優(yōu)先級
1:帶有“=“的精確匹配優(yōu)先
2:沒有修飾符的精確匹配
3:正則表達(dá)式按照他們在配置文件中定義的順序
4:帶有“^~”修飾符的,開頭匹配
5:帶有“~” 或“~*” 修飾符的,如果正則表達(dá)式與URI匹配
6:沒有修飾符的,如果指定字符串與URI開頭匹配
Location區(qū)段匹配示例location = / { # 只匹配 / 的查詢. [ configuration A ] } location / { # 匹配任何以 / 開始的查詢,但是正則表達(dá)式與一些較長的字符串將被首先匹配。 [ configuration B ] } location ^~ /images/ { # 匹配任何以 /images/ 開始的查詢并且停止搜索,不檢查正則表達(dá)式。 [ configuration C ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配任何以gif, jpg, or jpeg結(jié)尾的文件,但是所有 /images/ 目錄的請求將在Configuration C中處 理。 [ configuration D ] } 各 請求的處理如下例: ■/ → configuration A ■/documents/document.html → configuration B ■/images/1.gif → configuration C ■/documents/1.jpg → configuration D
root 、alias指令區(qū)別
location /img/ { alias /var/www/image/; }
#若按照上述配置的話,則訪問/img/目錄里面的文件時(shí),ningx會自動(dòng)去/var/www/image/目錄找文件
location /img/ { root /var/www/image; }
alias是一個(gè)目錄別名的定義,root則是最上層目錄的定義。
還有一個(gè)重要的區(qū)別是alias后面必須要用“/”結(jié)束,否則會找不到文件的。。。而root則可有可無~~
到此這篇關(guān)于nginx location指令詳解的文章就介紹到這了,更多相關(guān)nginx location指令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
內(nèi)網(wǎng)環(huán)境nginx配置https訪問的過程詳解
這篇文章主要介紹了內(nèi)網(wǎng)環(huán)境nginx配置https訪問,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06詳解如何通過nginx進(jìn)行服務(wù)的負(fù)載均衡
負(fù)載均衡器可以將用戶請求根據(jù)對應(yīng)的負(fù)載均衡算法分發(fā)到應(yīng)用集群中的一臺服務(wù)器進(jìn)行處理,本文主要為大家詳細(xì)介紹了如何通過nginx進(jìn)行服務(wù)的負(fù)載均衡,需要的可以參考下2023-11-11nginx中的正則表達(dá)式及l(fā)ocation和rewrite總結(jié)
rewrite功能就是,使用nginx提供的全局變量或自己設(shè)置的變量,結(jié)合正則表達(dá)式和標(biāo)記位實(shí)現(xiàn)URL重寫以及重定向,這篇文章主要介紹了nginx中的正則表達(dá)式及l(fā)ocation和rewrite總結(jié),需要的朋友可以參考下2023-12-12Nginx實(shí)現(xiàn)基于請求頭的訪問控制配置的示例
在Nginx中,可以使用"allow"和"deny"指令來實(shí)現(xiàn)IP訪問限制,本文給大家介紹Nginx實(shí)現(xiàn)基于請求頭的訪問控制配置,感興趣的朋友一起看看吧2023-11-11nginx 不同的訪問路徑對應(yīng)項(xiàng)目不同的目錄的實(shí)現(xiàn)方法
要在 Nginx 中配置不同的訪問路徑對應(yīng)不同的項(xiàng)目目錄,可以使用 Nginx 的?location?指令來實(shí)現(xiàn),本文主要介紹了nginx不同的訪問路徑對應(yīng)項(xiàng)目不同的目錄的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09nginx 配置location匹配規(guī)則實(shí)例講解
在本篇文章里小編給大家整理的是關(guān)于nginx 配置location匹配規(guī)則實(shí)例講解內(nèi)容,需要的朋友們學(xué)習(xí)下。2020-03-03