目錄
- 1.直接替換location 匹配部分
- 2.使用nginx 的rewrite 模塊
- rewrite 企業(yè)應(yīng)用場景
nginx 提供反向代理服務(wù),日常開發(fā)過程中有時候我們需要使用nginx 作為代理服務(wù)根據(jù)url的不同去訪問不同的服務(wù)器或者不同端口,如下提供兩種方案。
1.直接替換location 匹配部分
1.proxy_pass的目標地址,默認不帶/,表示只代理域名,url和參數(shù)部分不會變(把請求的path拼接到proxy_pass目標域名之后作為代理的URL)
2.如果在目標地址后增加/,則表示把path中l(wèi)ocation匹配成功的部分剪切掉之后再拼接到proxy_pass目標地址
server { listen 80; server_name localhost; location /system { proxy_pass http://127.0.0.1:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # proxy_pass 以/結(jié)尾 location /system { proxy_pass http://127.0.0.1:8080/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
例如:http://192.168.25.132/system/sysMenu/tree
如上兩個匹配成功后,實際代理的目標url分別是
http://127.0.0.1:8080/system/sysMenu/tree (把/system/sysMenu/tree拼接到proxy_pass 地址的127.0.0.1:8080之后)
http://127.0.0.1:8080/sysMenu/tree (把/system/sysMenu/tree去掉匹配到的location /system拼接到proxy_pass 地址的127.0.0.1:8080之后)
2.使用nginx 的rewrite 模塊
rewrite是實現(xiàn)URL重寫的關(guān)鍵指令,根據(jù)regex(正則表達式)部分內(nèi)容,重定向到replacement,結(jié)尾是flag標記。
rewrite <regex> <replacement> [flag]; 關(guān)鍵字 正則 替代內(nèi)容 flag標記 關(guān)鍵字:其中關(guān)鍵字error_log不能改變 正則:perl兼容正則表達式語句進行規(guī)則匹配 替代內(nèi)容:將正則匹配的內(nèi)容替換成replacement flag標記:rewrite支持的flag標記 flag標記說明: last #本條規(guī)則匹配完成后,繼續(xù)向下匹配新的location URI規(guī)則 break #本條規(guī)則匹配完成即終止,不再匹配后面的任何規(guī)則 redirect #返回302臨時重定向,瀏覽器地址會顯示跳轉(zhuǎn)后的URL地址 permanent #返回301永久重定向,瀏覽器地址欄會顯示跳轉(zhuǎn)后的URL地址
把到本服務(wù)的所有請求轉(zhuǎn)發(fā)到www.summer.com
rewrite ^/(.*) http://www.summer.com/$1 break;
把到本服務(wù)器的所有請求路徑中以/system開頭的請求 替換成不帶system的,例如http://192.168.25.132/system/sysMenu/tree ,匹配后地址變成 http://127.0.0.1:8080/sysMenu/tree
rewrite ^/system/(.*) /$1 break;
說明:
rewrite為固定關(guān)鍵字,表示開始進行rewrite匹配規(guī)則
regex部分是 ^/(.*) ,這是一個正則表達式,匹配完整的域名和后面的路徑地址
replacement部分是http://www.summer.com/$1 $1是取自regex部分()里的內(nèi)容。匹配成功后跳轉(zhuǎn)到的URL。
flag部分 break表示停止匹配,然后跳轉(zhuǎn)到新的 http://www.summer.com/$1 地址上。
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { #/data/manager可以存放靜態(tài)頁面 root /data/manager; index index.html index.htm; } location /system { proxy_pass http://127.0.0.1:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; rewrite ^/system/(.*) /$1 break; } }
regex 常用正則表達式說明
rewrite 企業(yè)應(yīng)用場景
Nginx的rewrite功能在企業(yè)里應(yīng)用非常廣泛:
u 可以調(diào)整用戶瀏覽的URL,看起來更規(guī)范,合乎開發(fā)及產(chǎn)品人員的需求。
u 為了讓搜索引擎搜錄網(wǎng)站內(nèi)容及用戶體驗更好,企業(yè)會將動態(tài)URL地址偽裝成靜態(tài)地址提供服務(wù)。
u 網(wǎng)址換新域名后,讓舊的訪問跳轉(zhuǎn)到新的域名上。例如,訪問京東的360buy.com會跳轉(zhuǎn)到j(luò)d.com
u 根據(jù)特殊變量、目錄、客戶端的信息進行URL調(diào)整等