摘要:概述有定位的意思根據(jù)來(lái)進(jìn)行不同的定位在虛擬主機(jī)的配置中是必不可少的可以把網(wǎng)站的不同部分定位到不同的處理方式上偽靜態(tài)反向代理負(fù)載均衡等等都離不開(kāi)語(yǔ)法中括號(hào)可以不寫(xiě)任何參數(shù)此時(shí)稱(chēng)為一般匹配也可以寫(xiě)參數(shù)因此大類(lèi)型可以分為種精準(zhǔn)匹配一般匹配正則匹配
概述
location 有"定位"的意思, 根據(jù)Uri來(lái)進(jìn)行不同的定位.
在虛擬主機(jī)的配置中,是必不可少的,location可以把網(wǎng)站的不同部分,定位到不同的處理方式上.偽靜態(tài),反向代理,負(fù)載均衡等等都離不開(kāi)location.
location [=|~|~*|^~] patt {}
中括號(hào)可以不寫(xiě)任何參數(shù),此時(shí)稱(chēng)為一般匹配,也可以寫(xiě)參數(shù).因此,大類(lèi)型可以分為3種:
location = patt {} [精準(zhǔn)匹配] location patt{} [一般匹配] location ~ patt{} [正則匹配]匹配說(shuō)明 精準(zhǔn)匹配 =
完全匹配指定的 pattern ,且這里的 pattern 被限制成簡(jiǎn)單的字符串,也就是說(shuō)這里不能使用正則表達(dá)式.
server { server_name website.com; location = /abcd { […] } } http://website.com/abcd # 正好完全匹配 http://website.com/ABCD # 如果運(yùn)行 Nginx server 的系統(tǒng)本身對(duì)大小寫(xiě)不敏感,比如 Windows ,那么也匹配 http://website.com/abcd?param1 # 忽略查詢串參數(shù)(query string arguments),也同樣匹配 http://website.com/abcd/ # 不匹配,因?yàn)槟┪泊嬖诜葱备埽╰railing slash),Nginx 不認(rèn)為這種情況是完全匹配 http://website.com/abcde # 不匹配,因?yàn)椴皇峭耆ヅ?一般匹配 (None)
可以理解為左前綴匹配(like pattern%),這種情況下,匹配那些以指定的 patern 開(kāi)頭的 URI,注意這里的 URI 只能是普通字符串,不能使用正則表達(dá)式.
server { server_name website.com; location /abcd { […] } } http://website.com/abcd # 正好完全匹配 http://website.com/ABCD # 如果運(yùn)行 Nginx server 的系統(tǒng)本身對(duì)大小寫(xiě)不敏感,比如 Windows ,那么也匹配 http://website.com/abcd?param1 # 忽略查詢串參數(shù)(query string arguments),這里就是 /abcd 后面的 ?param1 http://website.com/abcd/ # 末尾存在反斜杠(trailing slash)也屬于匹配范圍內(nèi) http://website.com/abcde # 仍然匹配,因?yàn)?URI 是以 pattern 開(kāi)頭的正則匹配 ~
對(duì)大小寫(xiě)敏感(在window上無(wú)效),且 pattern 須是正則表達(dá)式
server { server_name website.com; location ~ ^/abcd$ { […] } } http://website.com/abcd # 完全匹配 http://website.com/ABCD # 不匹配,~ 對(duì)大小寫(xiě)是敏感的 http://website.com/abcd?param1 # 忽略查詢串參數(shù)(query string arguments),這里就是 /abcd 后面的 ?param1 http://website.com/abcd/ # 不匹配,因?yàn)槟┪泊嬖诜葱备埽╰railing slash),并不匹配正則表達(dá)式 ^/abcd$ http://website.com/abcde # 不匹配正則表達(dá)式 ^/abcd$正則匹配 ~*
不區(qū)分大小寫(xiě),pattern 須是正則表達(dá)式
server { server_name website.com; location ~* ^/abcd$ { […] } } http://website.com/abcd # 完全匹配 http://website.com/ABCD # 匹配,這就是它不區(qū)分大小寫(xiě)的特性 http://website.com/abcd?param1 # 忽略查詢串參數(shù)(query string arguments),這里就是 /abcd 后面的 ?param1 http://website.com/abcd/ # 不匹配,因?yàn)槟┪泊嬖诜葱备埽╰railing slash),并不匹配正則表達(dá)式 ^/abcd$ http://website.com/abcde # 不匹配正則表達(dá)式 ^/abcd$正則匹配 ^~
匹配情況類(lèi)似一般匹配,以指定匹配模式開(kāi)頭的 URI 被匹配
!~和!~*分別為區(qū)分大小寫(xiě)不匹配及不區(qū)分大小寫(xiě)不匹配的正則
通用匹配 /任何請(qǐng)求都會(huì)匹配到.
特殊匹配 @用于定義一個(gè) Location 塊,且該塊不能被外部 Client 所訪問(wèn),只能被 Nginx 內(nèi)部配置指令所訪問(wèn),比如 try_files or error_page
匹配優(yōu)先級(jí)http://www.test.com/ 從域名后面(uri:http請(qǐng)求行的第二列)開(kāi)始匹配,也就是/,匹配原則一般都是左前綴匹配,location / {} 能夠匹配所有HTTP 請(qǐng)求,因?yàn)槿魏蜨TTP 請(qǐng)求都必然是以"/"開(kāi)始的,但是,正則location 和其他任何比"/"更長(zhǎng)的普通location (location / {} 是普通location 里面最短的,因此其他任何普通location 都會(huì)比它更長(zhǎng),當(dāng)然location = / {} 和 location ^~ / {} 是一樣長(zhǎng)的)會(huì)優(yōu)先匹,由此可見(jiàn)匹配的優(yōu)先級(jí)可以總結(jié)為:
越詳細(xì)就越優(yōu)先
是不是有點(diǎn)像css的選擇器?
Example1
# 首先看有沒(méi)有精準(zhǔn)匹配,如果有,則停止匹配過(guò)程. location = patt { config A } location / { root /usr/local/nginx/html; index index.html index.htm; }
如果訪問(wèn)http://test.com/
定位流程是
1: 精準(zhǔn)匹配中"/" ,得到index頁(yè)為index.htm
2: 再次訪問(wèn) /index.htm , 此次內(nèi)部轉(zhuǎn)跳uri已經(jīng)是"/index.htm",根目錄為/usr/local/nginx/html
3: 最終結(jié)果,訪問(wèn)了 /usr/local/nginx/html/index.htm
Example2
location / { root /usr/local/nginx/html; index index.html index.htm; } location /foo { root /var/www/html; index index.html; }
我們?cè)L問(wèn) http://test.com/foo
對(duì)于uri "/foo", 兩個(gè)location的patt,都能匹配他們
即 "/"能從左前綴匹配 "/foo", "/foo"也能左前綴匹配"/foo",
此時(shí), 真正訪問(wèn) /var/www/html/index.html
原因:"/foo"匹配的更長(zhǎng),因此使用之;
Example3
location ~ image { root /var/www/image; index index.html; }
如果我們?cè)L問(wèn) http://test.com/image/logo.png
此時(shí), "/" 與"/image/logo.png" 匹配
同時(shí),"image"正則 與"image/logo.png"也能匹配,誰(shuí)發(fā)揮作用?
正則表達(dá)式的成果將會(huì)使用.因?yàn)榇藭r(shí)的正則表達(dá)式更詳細(xì)
圖片真正會(huì)訪問(wèn) /var/www/image/logo.png
再次總結(jié)優(yōu)先級(jí)序如下:
1. = 2. (None) 前提是 pattern 完全匹配 URI 的情況(不是只匹配 URI 的頭部,這點(diǎn)很重要) 3. ^~ 4. ~ 或 ~* 5. (None) pattern 匹配 URI 的頭部
貌似與location的書(shū)寫(xiě)順序無(wú)關(guān)? 但實(shí)際上還是有關(guān)系的
# 配置一 server { listen 9090; server_name localhost; location ~ .html$ { allow all; } location ~ ^/prefix/.*.html$ { deny all; } } # 配置二 server { listen 9090; server_name localhost; location ~ ^/prefix/.*.html$ { deny all; } location ~ .html$ { allow all; } }
URI 請(qǐng)求 | 配置一 | 配置二 |
---|---|---|
curl http://localhost:9090/regextest.html | 404 Not Found | 404 Not Found |
curl http://localhost:9090/prefix/regextest.html | 404 Not Found | 403 Forbidden |
Location ~ ^/prefix/.*.html$ {deny all;} 表示正則 location 對(duì)于以 /prefix/ 開(kāi)頭, .html 結(jié)尾的所有 URI 請(qǐng)求,都拒絕訪問(wèn); location ~.html${allow all;} 表示正則 location 對(duì)于以 .html 結(jié)尾的 URI 請(qǐng)求,都允許訪問(wèn). 實(shí)際上,prefix 的是 ~.html$ 的子集.
在"配置一 "下,兩個(gè)請(qǐng)求都匹配上 location ~.html$ {allow all;} ,并且停止后面的搜索,于是都允許訪問(wèn), 404 Not Found ;在"配置二 "下, /regextest.html 無(wú)法匹配 prefix ,于是繼續(xù)搜索 ~.html$ ,允許訪問(wèn),于是 404 Not Found ;然而 /prefix/regextest.html 匹配到 prefix ,于是 deny all , 403 Forbidden .
優(yōu)先級(jí)最終總結(jié)1. = 2. (None) 前提是 pattern 完全匹配 URI 的情況(不是只匹配 URI 的頭部,這點(diǎn)很重要) 3. ^~ 4. ~ 或 ~* 5. (None) pattern 匹配 URI 的頭部
越詳細(xì)就越優(yōu)先,但是同優(yōu)先級(jí)的情況下,按書(shū)寫(xiě)順序誰(shuí)先出現(xiàn)就以誰(shuí)為準(zhǔn)(就近原則)
依然和css選擇器的優(yōu)先級(jí)很像...root&alias文件路徑配置
http://www.ttlsa.com/nginx/ng...
推薦必須的location#直接匹配網(wǎng)站根,通過(guò)域名訪問(wèn)網(wǎng)站首頁(yè)比較頻繁,使用這個(gè)會(huì)加速處理,官網(wǎng)如是說(shuō). #這里是直接轉(zhuǎn)發(fā)給后端應(yīng)用服務(wù)器了,也可以是一個(gè)靜態(tài)首頁(yè) # 第一個(gè)必選規(guī)則 location = / { proxy_pass http://127.0.0.1:88; } # 第二個(gè)必選規(guī)則是處理靜態(tài)文件請(qǐng)求,這是nginx作為http服務(wù)器的強(qiáng)項(xiàng) # 有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用 location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*.(js|css)?$ { expires 12h; } location ~ /. { deny all; # 其他的任意后綴都不讓其訪問(wèn); } #第三個(gè)規(guī)則就是通用規(guī)則,用來(lái)轉(zhuǎn)發(fā)動(dòng)態(tài)請(qǐng)求到后端應(yīng)用服務(wù)器 location / { try_files $uri @apache; #try_files 將嘗試你列出的文件并設(shè)置內(nèi)部文件指向 } location @apache { internal; # internal指令指定某個(gè)location只能被“內(nèi)部的”請(qǐng)求調(diào)用,外部的調(diào)用請(qǐng)求會(huì)返回”Not found” proxy_pass http://127.0.0.1:88; proxy_connect_timeout 300s; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 32k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_redirect off; proxy_hide_header Vary; proxy_set_header Accept-Encoding ""; proxy_set_header Host $host; proxy_set_header Referer $http_referer; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/40469.html
摘要:傳給微信的參數(shù)進(jìn)行轉(zhuǎn)義其中參數(shù)是可以被微信原樣返回,這樣就可以按你自己的需求完成反向代理了??梢匀サ舸罱y(cè)試環(huán)境另一條運(yùn)維的原則是不要在生產(chǎn)環(huán)境上直接改,在測(cè)試環(huán)境修改并經(jīng)過(guò)測(cè)試,測(cè)試通過(guò)后,再上傳到生產(chǎn)環(huán)境。 前言 在與第三方系統(tǒng)進(jìn)行接口開(kāi)發(fā)時(shí),需要不斷的改進(jìn)和測(cè)試,以常見(jiàn)的微信登錄支付和 Alipay 支付和登錄為例. 相對(duì)來(lái)講 Alipay 做起來(lái)容易一些, 一是接口 SDK 封...
摘要:使用生成靜態(tài)頁(yè),再配置在爬蟲(chóng)訪問(wèn)時(shí)提供靜態(tài)頁(yè)中的內(nèi)容。如何在爬蟲(chóng)訪問(wèn)時(shí)讓爬蟲(chóng)獲取到靜態(tài)頁(yè)中的內(nèi)容要演練此部分內(nèi)容,首先你要把網(wǎng)站用部署。 Angular 的優(yōu)點(diǎn)有很多,但如果用它來(lái)開(kāi)發(fā)網(wǎng)站的話,就不得不面對(duì)它的兩大缺點(diǎn): 首頁(yè)加載慢 搜索引擎的爬蟲(chóng)獲取不到頁(yè)面內(nèi)容 由于 Angular 是通過(guò) js 動(dòng)態(tài)生成 dom 并插入到頁(yè)面中,搜索引擎默認(rèn)只能獲得頁(yè)面的標(biāo)題。我們可以使用 c...
摘要:配置文件說(shuō)明定義運(yùn)行的用戶和用戶組進(jìn)程數(shù),建議設(shè)置為當(dāng)前主機(jī)的總核心數(shù)。注站點(diǎn)目錄和域名盡量一樣,養(yǎng)成一個(gè)好習(xí)慣基于端口的虛擬主機(jī)配置邏輯運(yùn)算的配置中不支持條件的邏輯中包含或的運(yùn)算,而且不支持的嵌套語(yǔ)法,否則會(huì)報(bào)下面的錯(cuò)誤。 配置文件說(shuō)明 #定義Nginx運(yùn)行的用戶和用戶組 user www www; #nginx進(jìn)程數(shù),建議設(shè)置為當(dāng)前主機(jī)的CPU總核心數(shù)。 worker_proc...
閱讀 3177·2019-08-30 15:56
閱讀 1301·2019-08-29 15:20
閱讀 1635·2019-08-29 13:19
閱讀 1570·2019-08-29 13:10
閱讀 3447·2019-08-26 18:27
閱讀 3124·2019-08-26 11:46
閱讀 2301·2019-08-26 11:45
閱讀 3934·2019-08-26 10:12