摘要:如何阻止處理未定義的。如果沒有被發(fā)現(xiàn),將被處理。第一個(gè)匹配的表達(dá)式終止搜索,將使用這個(gè)。此外,任何人可能請(qǐng)求任何是在查詢字符串現(xiàn)在我們來看將如何被處理。這個(gè)將被前綴位置首次匹配然后被正則表達(dá)式匹配,因此,被后處理。
官文:How nginx processes a request
???????Nginx首先判斷哪一個(gè)Server應(yīng)該被用來處理這個(gè)Request。舉個(gè)簡(jiǎn)單的配置例子,三個(gè)虛擬Server都在80端口上listen。
server { listen 80; server_name example.org www.example.org; ... } server { listen 80; server_name example.net www.example.net; ... } server { listen 80; server_name example.com www.example.com; ... }
???????應(yīng)用此配置后,nginx僅找到request的header的Host field,看一下request應(yīng)該被rout到哪一個(gè)server。如果請(qǐng)求頭的Host域找不到一個(gè)匹配的server的名稱,或者request壓根就不包含這個(gè)header的field,那么nginx將把request route到這個(gè)端口的默認(rèn)server上。上面的配置中,默認(rèn)的server就是第一個(gè),nginx的標(biāo)準(zhǔn)默認(rèn)行為就是認(rèn)第一個(gè)。當(dāng)然 ,也可以使用default_server參數(shù)在listen的指令中顯示設(shè)置哪一個(gè)server應(yīng)該是默認(rèn)的。
server { listen 80 default_server; server_name example.net www.example.net; ... }
???????default_server參數(shù)從0.8.21版本開始有效。早期版本使用的是default參數(shù)。
???????注意,默認(rèn)服務(wù)器是listen端口的一個(gè)屬性,其他的下面說。
如何阻止處理未定義server name的request。
???????如果不帶有Host header field的request要被禁止,丟棄request的server可以被這樣定義。
server { listen 80; server_name ""; return 444; }
???????這里,server name設(shè)置為空字符串,將匹配無Host header field的request,指定的nginx的非標(biāo)準(zhǔn)代碼444被返回來關(guān)閉連接。
從0.8.48開始,這是server name的默認(rèn)設(shè)定,所以server_name “” 可以被忽略。早期版本,機(jī)器的hostname被用作默認(rèn)的server name。
混合基于name和基于IP的虛擬server
???????看一下一些虛擬server監(jiān)聽在不同地址的更復(fù)雜的配置
server { listen 192.168.1.1:80; server_name example.org www.example.org; ... } server { listen 192.168.1.1:80; server_name example.net www.example.net; ... } server { listen 192.168.1.2:80; server_name example.com www.example.com; ... }
???????這里,nginx首先測(cè)對(duì)應(yīng)server塊的listen指令的request。然后測(cè)匹配Ip地址和端口的針對(duì)server塊的server_name 實(shí)體 request Host header field。如果server name沒有被發(fā)現(xiàn),request將被default server處理。例如,www.example.com的request接受在192.168.1.1:80 端口將被 192.168.1.1:80 port的default server處理,例如被第一個(gè),因?yàn)闆]有www.example.com被定義在這個(gè)端口。
???????nginx如已述,default server是監(jiān)聽端口的屬性,不同的default servers可以被不同的端口定義。
server { listen 192.168.1.1:80; server_name example.org www.example.org; ... } server { listen 192.168.1.1:80 default_server; server_name example.net www.example.net; ... } server { listen 192.168.1.2:80 default_server; server_name example.com www.example.com; ... }簡(jiǎn)單PHP配置
???????我們來看如nginx如何選擇位置來處理request,
server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* .(gif|jpg|png)$ { expires 30d; } location ~ .php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
???????nginx首先找最指定的前綴location,通過字面的字符串而不管順序。配置中僅有前綴location是/ 因?yàn)樗ヅ淙魏握?qǐng)求他將被用作保底。然后nginx檢查被正則表達(dá)式給出的location按照配置文件中的順序。第一個(gè)匹配的表達(dá)式終止搜索,nginx將使用這個(gè)location。如果沒有正則表達(dá)式匹配,那么nginx使用最匹配前綴location。
???????注意所有類型的location僅僅試探無參數(shù)的request行的URI部分。因?yàn)檎?qǐng)求字符串中的參數(shù)可能會(huì)有多種方式。
/index.php?user=john&page=1 /index.php?page=1&user=john
???????此外,任何人可能請(qǐng)求任何是在查詢字符串
/index.php?page=1&something+else&user=john
???????現(xiàn)在我們來看request將如何被處理。
/logo.gif
???????這個(gè)request將被前綴位置 /首次匹配然后被正則表達(dá)式.(gif|jpg|png)$匹配,因此,request被后location處理。使用指令root /data/www request被映射到文件/data/www/logo.gif,文件被送到客戶端。
/index.php
???????request也被/匹配然后被正則表達(dá)式.(php)$匹配。所以請(qǐng)求被后面的location處理同時(shí)請(qǐng)求被傳遞到FastCGI server 監(jiān)聽在localhost:9000。fastcgi_param 指令設(shè)置FastCGI參數(shù)SCRIPT_FILENAME 為 /data/www/index.php,root + uri,F(xiàn)astCGI server執(zhí)行這個(gè)文件。
/about.html
???????被/匹配,被處理。使用指令root /data/www; request 被映射到root + uri /data/www/about.html。
/
???????匹配的復(fù)雜。被前綴location / 匹配。因此被這個(gè)location處理。然后 index 指令填補(bǔ)參數(shù)和 root /data/www 指令一起,并測(cè)試文件是否存在。如果文件/data/www/index.html 不存在,/data/www/index.php 存在,那么指令要進(jìn)行內(nèi)部重定向(凡是請(qǐng)求中的沒有uri指定文件的,使用index自動(dòng)匹配上的,都會(huì)觸發(fā)重定向),nginx重新匹配location,如果這個(gè)新生成的request是從客戶端發(fā)來的一樣,而不是直接返回相應(yīng)資源。如我們所見,重定向請(qǐng)求最終被最后一個(gè)FastCGI server處理了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/39235.html
摘要:一個(gè)就像一個(gè)樂高玩具。問題是不是你小時(shí)候玩兒的那個(gè)有趣,它們不是充滿想象力的打氣筒,也不是一種樂高玩具。這是對(duì)的并不是給開發(fā)者使用的,它們是給庫作者使用的。不會(huì)超過這兩種情況。第二個(gè)是根據(jù)第一個(gè)處理函數(shù)如何運(yùn)行來自動(dòng)變成狀態(tài)成功或者失敗。 原文地址:http://blog.getify.com/promis... 在 Part4:擴(kuò)展問題 中,我討論了如何擴(kuò)展和抽象Promise是多么...
摘要:如果我們使用注入,如上所述,便通過調(diào)用方法注入依賴項(xiàng),這一點(diǎn)尤其重要,因?yàn)樵谡{(diào)用對(duì)象的構(gòu)造函數(shù)時(shí)這些依賴項(xiàng)并不可用。 如果你看到了注解,那么一定有什么代碼在什么地方處理了它. Alan Hohn 我教Java課程時(shí)強(qiáng)調(diào)的一點(diǎn)是注解是惰性的。換句話說,它們只是標(biāo)記,可能具有某些屬性,但沒有自己的行為。因此,每當(dāng)你在一段Java代碼上看到一個(gè)注解時(shí),就意味著必須有一些其他的Java代碼來尋...
摘要:前言基于做微服務(wù)架構(gòu)分布式系統(tǒng)時(shí),作為認(rèn)證的業(yè)內(nèi)標(biāo)準(zhǔn),也提供了全套的解決方案來支持在環(huán)境下使用,提供了開箱即用的組件。 前言 基于SpringCloud做微服務(wù)架構(gòu)分布式系統(tǒng)時(shí),OAuth2.0作為認(rèn)證的業(yè)內(nèi)標(biāo)準(zhǔn),Spring Security OAuth2也提供了全套的解決方案來支持在Spring Cloud/Spring Boot環(huán)境下使用OAuth2.0,提供了開箱即用的組件。但...
摘要:講到這里,超時(shí)原理基本上其實(shí)差不多了,這個(gè)類還有個(gè)地方需要注意,在初始化對(duì)象時(shí),會(huì)去創(chuàng)建一個(gè)超時(shí)的延遲任務(wù),延遲時(shí)間就是值,在這個(gè)延遲任務(wù)中也會(huì)調(diào)用方法喚醒阻塞 背景 在使用dubbo時(shí),通常會(huì)遇到timeout這個(gè)屬性,timeout屬性的作用是:給某個(gè)服務(wù)調(diào)用設(shè)置超時(shí)時(shí)間,如果服務(wù)在設(shè)置的時(shí)間內(nèi)未返回結(jié)果,則會(huì)拋出調(diào)用超時(shí)異常:TimeoutException,在使用的過程中,我們...
摘要:若該特性未指定,則數(shù)據(jù)會(huì)發(fā)送到包含該表單的頁面所在的。其中使用了來處理表單數(shù)據(jù)。特殊案例發(fā)送文件文件是表單中一個(gè)特殊的例子,其他數(shù)據(jù)都是文本數(shù)據(jù),而文件則一般是或者被認(rèn)為是二進(jìn)制數(shù)據(jù)。 系列文章說明 原文 多數(shù)時(shí)候,HTML表單的目的只是為了把數(shù)據(jù)發(fā)給服務(wù)器,之后服務(wù)器再處理這些數(shù)據(jù)并發(fā)送響應(yīng)給用戶。雖然看起來挺簡(jiǎn)單的,但我們還是得注意一些事情以確保傳送的數(shù)據(jù)不會(huì)破壞服務(wù)器、或者給...
閱讀 1123·2021-11-24 09:39
閱讀 3623·2021-09-02 15:21
閱讀 2161·2021-08-24 10:01
閱讀 722·2021-08-19 10:55
閱讀 2447·2019-08-30 15:55
閱讀 1212·2019-08-30 14:16
閱讀 2992·2019-08-29 15:17
閱讀 3235·2019-08-29 13:53