摘要:選擇以結(jié)尾的進(jìn)行匹配,并優(yōu)先選擇最長的。排序?qū)ζヅ溥^程也有一定的影響,因為在匹配到最長最精確的之后就會停止匹配。將所有非正則表達(dá)式的與請求的進(jìn)行對比。結(jié)束當(dāng)前的指令。返回一個狀態(tài)碼為的永久重定向。
Nginx是Igor Sysoev用C語言編寫的一個web服務(wù)器,通常用于負(fù)載均衡、反向代理和HTTP緩存等。Nginx用異步的事件驅(qū)動(event-driven)的方式來處理請求,因此負(fù)載能力很強。
Nginx使用Block(如 server block, location block)來組成配置文件的層級結(jié)構(gòu),并在接收到客戶端請求之后根據(jù)請求的域名(domain name),端口(port),IP地址判斷處理該請求的server block,然后根據(jù)請求的資源和URI決定處理該請求的location block
Server Block管理員可以定義多個server block作為不相關(guān)的虛擬web服務(wù)器實體,然后通過listen和server_name決定處理請求的server block
listen指令Nginx首先會檢查請求的IP地址和端口,并根據(jù)所有server block建立一個列表來處理請求。每個server block中的listen定義了這個server block能處理的IP和端口(root用戶運行默認(rèn)為0.0.0.0:80,非root用戶運行的為0.0.0.0:8080)
listen后可以指定:
IP:port的IP地址和端口
僅IP(端口將默認(rèn)為80)
僅port,將監(jiān)聽所有接口的這個port
到某個Unix socket的路徑(在服務(wù)器間轉(zhuǎn)發(fā)請求的時候會用到)
在將listen的值與請求進(jìn)行匹配之前,Nginx會先將listen的值中所缺省的部分補充完整。然后將優(yōu)先匹配準(zhǔn)確的IP,如果不存在完全準(zhǔn)確匹配的IP才會匹配到0.0.0.0,如果有多個IP:port匹配度相同,Nginx將會繼續(xù)檢查server_name
server_name指令Nginx將server_name與請求頭中的Host進(jìn)行匹配,匹配的順序:
優(yōu)先選擇第一個精確匹配到的block。
server { listen 80; server_name host.example.com; ... }
選擇以*開頭的進(jìn)行匹配,并優(yōu)先選擇最長的。
server { listen 80; server_name *.example.com; ... }
選擇以*結(jié)尾的進(jìn)行匹配,并優(yōu)先選擇最長的。
server { listen 80; server_name www.example.*; ... }
選擇以~開頭的用正則表達(dá)式進(jìn)行匹配,并優(yōu)先選擇第一個。
server { listen 80; server_name ~^(www|host).*.example.com$; ... }
如果以上規(guī)則都無法匹配,則選擇default_server定義的默認(rèn)的server_block(每個server_block只能有一個default_server),默認(rèn)的default_server是localhost
server { listen 80 default_server; server_name _; ... }Location Block
location block是server block的一部分,決定了如何處理請求的URI,格式:
location [modifier] location_match { ... }modifier
modifier是一個可選的參數(shù),決定了如何解析后面的location match,modifier可選的值有:
(none)
前綴匹配, 如
location /site { ... }
將匹配以/site開頭的URI
=(equal sign)
完整匹配,如
location = /page { ... }
將匹配/page,而不會響應(yīng)/page/index.html的請求
~(tilde)
大小寫敏感的正則匹配, 如
location ~ .(jpe?g|png|gif|ico)$ { ... }
將匹配以.jpg/.jpeg/.png/.gif/.ico結(jié)尾的URI, 但不會響應(yīng).JPG
~*(tilde + asterisk)
大小寫無關(guān)的正則匹配, 如
location ~* .(jpe?g|png|gif|ico)$ { ... }
.jpg和.JPG都會匹配
^~(carat + tilde)
非正則匹配,如
location ^~ /page { ... }
能夠匹配/page/index.html
匹配順序Nginx優(yōu)先選擇正則表達(dá)式進(jìn)行匹配,但是使用=和^~這兩個modifier可以覆蓋這一特性。排序?qū)ζヅ溥^程也有一定的影響,因為Nginx在匹配到最長最精確的location之后就會停止匹配。
將所有非正則表達(dá)式的location_match與請求的URI進(jìn)行對比。
與modifier為=的進(jìn)行完整匹配。
選擇最長location_match前綴進(jìn)行匹配,如果modifier為^~則匹配成功。
進(jìn)行正則表達(dá)式匹配
用其他前綴匹配
其他指令
index
語法:index file ...; 默認(rèn)為index index.html;
index指令指定了被作為index的文件,比如上面的index.html
但是在下面這種情況下,對/index.html的請求將會被第二個location block處理,因為第一個與/index.html并不是完全匹配。
location = / { index index.html; } location / { ... }
try_files
root /var/www/main; location / { try_files $uri $uri.html $uri/ /fallback/index.html; } location /fallback { root /var/www/another; }
對/page的請求將會首先進(jìn)入第一個location, 然后嘗試在/var/www/main 下依次查找page, page.html, page/,如果都沒有找到的話將會被重定向到/fallback/index.html,并由第二個location提供/var/www/another/fallback/index.html
rewrite
通過Perl兼容的正則表達(dá)式改變請求的URI,語法:rewrite regex replacement [flag];
flag的值可以是:
last
結(jié)束當(dāng)前的rewrite指令,并用修改過的URI去匹配其他的location block。
break
結(jié)束當(dāng)前的rewrite指令。
redirect
當(dāng)替換的URI(replacement)不以 “http://”, “https://”, “$scheme”開頭時進(jìn)行狀態(tài)碼為302的暫時性的重定向。
permanent
返回一個狀態(tài)碼為301的永久重定向。
error_page
root /var/www/main; location / { error_page 404 /another/whoops.html; } location /another { root /var/www; }
除了/another之外的請求都會在/var/www/main查找請求的資源,如果沒有找到相關(guān)資源將會重定向到/another/whoops.html,由第二個location block處理,查找/var/www/another/whoops.html
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40550.html
摘要:主要涉及到的協(xié)議以及的處理流程。并且中必須建立在協(xié)議之上。所以對協(xié)議的服務(wù)發(fā)起請求時,一般瀏覽器會建立條連接,并行的去請求不同的資源。表明該字段是否使用了編碼。 運營研發(fā) 張仕華 本文通過一個小例子串一遍nginx處理http2的流程。主要涉及到http2的協(xié)議以及nginx的處理流程。 http2簡介 http2比較http1.1主要有如下五個方面的不同: 二進(jìn)制協(xié)議 http1....
摘要:負(fù)載均衡算法輪詢,加權(quán)輪詢。參考三負(fù)載均衡負(fù)載均衡由服務(wù)提供廠商提供。之后,集群內(nèi)再采用其他的負(fù)載均衡方案。參考五負(fù)載均衡工作在層,它會與分別建立連接,需要維護(hù)這兩個連接的狀態(tài)。 運營研發(fā)團(tuán)隊 施洪寶 一. 基礎(chǔ)知識 1.1 基礎(chǔ) 什么是負(fù)載均衡? 當(dāng)單機(jī)提供的并發(fā)量不能滿足需求時,我們需要多臺服務(wù)器同時服務(wù)。當(dāng)客戶請求到達(dá)時,如何為客戶選擇最合適的服務(wù)器?這個問題就是負(fù)載均衡問題。...
摘要:本文是淺析微信支付系列文章的第十篇,主要講解如何使用沙箱環(huán)境來測試微信支付。圖為微信支付仿真測試系統(tǒng)后簡稱仿真系統(tǒng)的簡化原理圖。沙箱說明微信支付沙箱環(huán)境,是提供給微信支付商戶的開發(fā)者,用于模擬支付及回調(diào)通知。 本文是【淺析微信支付】系列文章的第十篇,主要講解如何使用沙箱環(huán)境來測試微信支付。 淺析微信支付系列已經(jīng)更新十篇了喲~,沒有看過的朋友們可以看一下。 淺析微信支付:下載對賬單和資...
摘要:默認(rèn)為是一個回調(diào)函數(shù),將腳本的所有輸出,用所定義的函數(shù)進(jìn)行處理。在輸出緩沖區(qū)的回調(diào)函數(shù)中使用這些函數(shù),會導(dǎo)致未定義的錯誤。 簡介 PHP有輸出時,可以用輸出控制函數(shù)來控制輸出 緩沖階段 ob_start(),將內(nèi)部緩沖區(qū)(buffer)打開。當(dāng)PHP遇到echo,printf等輸出語句時, PHP就會將要輸出的數(shù)據(jù)放入緩沖區(qū)(buffer)中,等待輸出。而只有當(dāng)緩沖區(qū)滿了或者php運行...
閱讀 3704·2021-09-02 15:11
閱讀 4682·2021-08-16 10:47
閱讀 1595·2019-08-29 18:35
閱讀 3098·2019-08-28 17:54
閱讀 2878·2019-08-26 11:37
閱讀 1533·2019-08-23 16:51
閱讀 1845·2019-08-23 14:36
閱讀 1840·2019-08-23 14:21