Nginx是一款輕量級(jí)的Web服務(wù)器、反向代理服務(wù)器,由于它的內(nèi)存占用少(一個(gè)worker進(jìn)程只占用10-12M內(nèi)存),啟動(dòng)極快,高并發(fā)能力強(qiáng),在互聯(lián)網(wǎng)項(xiàng)目中廣泛應(yīng)用。
什么是反向代理?
反向代理(Reverse Proxy)方式是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器。
Location表達(dá)式類(lèi)型
-
~ 表示執(zhí)行一個(gè)正則匹配,區(qū)分大小寫(xiě)
-
~* 表示執(zhí)行一個(gè)正則匹配,不區(qū)分大小寫(xiě)
-
^~ 表示普通字符匹配。使用前綴匹配。如果匹配成功,則不再匹配其他location
-
= 進(jìn)行普通字符精確匹配。也就是完全匹配
Location優(yōu)先級(jí)
在nginx的location和配置中l(wèi)ocation的順序沒(méi)有太大關(guān)系,與location表達(dá)式的類(lèi)型有關(guān)。相同類(lèi)型的表達(dá)式,字符串長(zhǎng)的會(huì)優(yōu)先匹配。
以下是按優(yōu)先級(jí)排列說(shuō)明:
-
等號(hào)類(lèi)型(=)的優(yōu)先級(jí)最高。一旦匹配成功,則不再查找其他匹配項(xiàng)。
-
^~類(lèi)型表達(dá)式。一旦匹配成功,則不再查找其他匹配項(xiàng)。
-
正則表達(dá)式類(lèi)型(~ ~*)的優(yōu)先級(jí)次之。如果有多個(gè)location的正則能匹配的話,則使用正則表達(dá)式最長(zhǎng)的那個(gè)。
-
常規(guī)字符串匹配類(lèi)型。按前綴匹配。
示例
配置項(xiàng)如下:
location = / {
# 僅僅匹配請(qǐng)求 /
[ configuration A ]
}
location / {
# 匹配所有以 / 開(kāi)頭的請(qǐng)求。
# 但是如果有更長(zhǎng)的同類(lèi)型的表達(dá)式,則選擇更長(zhǎng)的表達(dá)式。
# 如果有正則表達(dá)式可以匹配,則優(yōu)先匹配正則表達(dá)式。
[ configuration B ]
}
location /documents/ {
# 匹配所有以 /documents/ 開(kāi)頭的請(qǐng)求。
# 但是如果有更長(zhǎng)的同類(lèi)型的表達(dá)式,則選擇更長(zhǎng)的表達(dá)式。
# 如果有正則表達(dá)式可以匹配,則優(yōu)先匹配正則表達(dá)式。
[ configuration C ]
}
location ^~ /images/ {
# 匹配所有以 /images/ 開(kāi)頭的表達(dá)式,如果匹配成功,則停止匹配查找。
# 所以,即便有符合的正則表達(dá)式location,也不會(huì)被使用
[ configuration D ]
}
location ~* .(gif|jpg|jpeg)$ {
# 匹配所有以 gif jpg jpeg結(jié)尾的請(qǐng)求。
# 但是 以 /images/開(kāi)頭的請(qǐng)求,將使用 Configuration D
[ configuration E ]
}
請(qǐng)求匹配示例:
/ -> configuration A
/index.html -> configuration B
/documents/document.html -> configuration C
/images/1.gif -> configuration D
/documents/1.jpg -> configuration E