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的踩坑

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM