1. 程式人生 > 實用技巧 >Nginx location匹配後 跳轉問題

Nginx location匹配後 跳轉問題

場景:

伺服器上81和82埠部署了兩個網站,想通過listen 80埠,實現 ip/引數,來轉發到不同的埠

一開始使用了location /引數

server
{
     #省略其他配置 
     listen 80;
     location /one{
         proxy_pass  http://location:81
    
    }
    location /tow{
         proxy_pass  http://location:82
    
    }
}

但是這樣寫的話,問題就來了

此時如果我們訪問:localhost/one ,並不會轉發到location:81這個地址,而是location:81/one ,此時就會404了,因為我81埠的網站沒有 one這個目錄或介面方法

因為proxy_pass 後面的地址尾部沒有加 / ,那麼就會把location後的 引數帶過去,但是加了 / 又會有問題,會變成絕對路徑,這樣的話,網站的 靜態檔案(js/css等等)路徑 可能會出現問題

最後終於找到了一個辦法,使用rewrite(可以實現對url的重寫,以及重定向)

上程式碼:

server
{
     #省略其他配置 
     listen 80;
     location /one{
         rewrite ^/(.*) http://伺服器ip/域名:81;  
    
    }
    location /tow{
         rewrite ^/(.*) http://伺服器ip/域名:82;  
    
    }
}

這樣的話,訪問:localhost/one ,就會重定向到http://伺服器ip/域名:81;

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

以上就是nginx location的踩坑