目錄
- 概述
- location介紹
- location指令文法
- location配置執行個體解析
- location常用場景實戰
- 禁止通路.sh字尾的檔案執行個體
- php7進階到架構師相關閱讀
概述
這是關于php進階到架構之Nginx進階學習的第一篇文章:5分鐘搞懂nginx的location比對規則
- 第一篇:5分鐘搞懂nginx的location比對規則
location介紹
location指令是http子產品當中最核心的一項配置,
根據預先定義的URL比對規則來接收使用者發送的請求,
根據比對結果,将請求轉發到背景伺服器、
非法的請求直接拒絕并傳回403、404、500錯誤處理等。
location指令文法
location [=|~|~*|^~|@] /uri/ { … } 或 location @name { … }
規則說明:
nginx比對規則說明
多個location配置的比對順序:
- 首先比對:"="
- 其次比對:"^~"
- 再比對:檔案location書寫順序
- 若沒有比對到,最後把所有請求交給通配符("/")
- 當有比對成功時候,停止比對,按目前比對規則處理請求
當nginx收到一個請求後,
會截取請求的URI部份,
去搜尋所有location指令中定義的URI比對模式。
在server子產品中可以定義多個location指令來比對不同的url請求,
多個不同location配置的URI比對模式,
總體的比對原則是:先比對普通字元串模式,再比對正則模式。
隻識别URI部份
location配置執行個體解析
location = / { #規則A}location = /login { #規則B}location ^~ /static/ { #規則C}location ~ .(gif|jpg|png|js|css)$ { #規則D}location ~* .png$ { #規則E}location / { #規則F}
通路 http://localhost/
比對規則 A
通路 http://localhost/login
比對規則 B
通路http://localhost/register
比對規則 F
通路 http://localhost/static/a.html
比對規則 C
通路 http://localhost/a.gif, http://localhost/b.jpg
比對規則 D和規則 E,
但是規則 D 順序優先,
規則 E不起作用
通路 http://localhost/static/c.png
滿足條件的有規則C,D,E
但由于~^/static/優先級高,故比對規則C
通路 http://localhost/a.PNG
比對規則 E,而不會比對規則 D,
因為規則 E 不區分大小寫
通路 http://localhost/category/id/1111
最終比對到規則 F,因為以上規則都不比對
location常用場景實戰
實際使用中,至少有三個比對規則定義,如下:
1.第一個必選規則:直接比對網站根
通過域名通路網站首頁比較頻繁,
使用這個會加速處理
這裡是直接轉發給後端應用伺服器了,
也可以是一個靜态首頁
第一個必選規則location = / { proxy_pass http://locolhost/index}
第二個必選規則:處理靜态檔案請求
這是 nginx 作為 http 伺服器的強項處理靜态檔案請求,
有兩種配置模式,
目錄比對或字尾比對,
任選其一或搭配使用
location ^~ /static/ { root /webroot/static/;}location ~* .(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/;}
第三個規則:通用規則
用來轉發動态請求到後端應用伺服器非靜态檔案請求就預設是動态請求,自己根據實際把握
location / { proxy_pass http://localhost/}
禁止通路.sh字尾的檔案執行個體
server{......其他配置location ~.*.(sh)${return 405;}}
表示當通路 "*.sh"的檔案就會傳回405錯誤
php7進階到架構師相關閱讀
https://www.kancloud.cn/gofor/gofor