場景:
服務器上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的踩坑