首頁 > 軟體

關於nginx 反向代理 URL替換方案

2022-03-29 19:02:33

nginx 提供反向代理服務,日常開發過程中有時候我們需要使用nginx 作為代理服務根據url的不同去存取不同的伺服器或者不同埠,如下提供兩種方案。

1.直接替換location  匹配部分

1.proxy_pass的目標地址,預設不帶/,表示只代理域名,url和引數部分不會變(把請求的path拼接到proxy_pass目標域名之後作為代理的URL)

2.如果在目標地址後增加/,則表示把path中location匹配成功的部分剪下掉之後再拼接到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  以/結尾
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是實現URL重寫的關鍵指令,根據regex(正規表示式)部分內容,重定向到replacement,結尾是flag標記。

  rewrite    <regex>    <replacement>    [flag];
 
    關鍵字      正則        替代內容          flag標記
    關鍵字:其中關鍵字error_log不能改變
    正則:perl相容正規表示式語句進行規則匹配
    替代內容:將正則匹配的內容替換成replacement
    flag標記:rewrite支援的flag標記
flag標記說明:
last  #本條規則匹配完成後,繼續向下匹配新的location URI規則
break  #本條規則匹配完成即終止,不再匹配後面的任何規則
redirect  #返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址
permanent  #返回301永久重定向,瀏覽器位址列會顯示跳轉後的URL地址

把到本服務的所有請求轉發到www.summer.com

rewrite ^/(.*) http://www.summer.com/$1 break;

把到本伺服器的所有請求路徑中以/system開頭的請求 替換成不帶system的,例如http://192.168.25.132/system/sysMenu/tree ,匹配後地址變成 http://127.0.0.1:8080/sysMenu/tree

rewrite ^/system/(.*) /$1 break;        

說明:                                        

rewrite為固定關鍵字,表示開始進行rewrite匹配規則

regex部分是 ^/(.*) ,這是一個正規表示式,匹配完整的域名和後面的路徑地址

replacement部分是http://www.summer.com/$1   $1是取自regex部分()裡的內容。匹配成功後跳轉到的URL。

flag部分 break表示停止匹配,然後跳轉到新的 http://www.summer.com/$1 地址上。

server {
        listen       80;
        server_name  localhost;
 
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            #/data/manager可以存放靜態頁面
            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 企業應用場景

Nginx的rewrite功能在企業裡應用非常廣泛:

u 可以調整使用者瀏覽的URL,看起來更規範,合乎開發及產品人員的需求。

u 為了讓搜尋引擎搜錄網站內容及使用者體驗更好,企業會將動態URL地址偽裝成靜態地址提供服務。

u 網址換新域名後,讓舊的存取跳轉到新的域名上。例如,存取京東的360buy.com會跳轉到jd.com

u 根據特殊變數、目錄、使用者端的資訊進行URL調整等

到此這篇關於nginx 反向代理 URL替換方案的文章就介紹到這了,更多相關nginx 反向代理替換URL內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com