首頁 >運維 >Nginx >nginx的設定怎麼轉送到其他網站

nginx的設定怎麼轉送到其他網站

王林
王林轉載
2023-05-11 19:28:164937瀏覽

需求

有這樣一個需求:專案中跳到某個位址,但這個位址不想暴露給使用者。

因此我們想到要做一層代理,透過專案某個路徑直接用ngnix代理到這個位址。

查詢相關文件後,發現方案如下:

用return 302

location /myBaidu {
  return 302 http://baidu.com;
}
  • 這個方案會直接跳到baidu,並且會改變域名,相當於直接location.href = 'baidu.com' ,顯然不適合我們的需求。

  • 我們想要的效果是代理到百度,但瀏覽器的url框內還是/sparkMonitor,那就用proxy_pass

用proxy_pass

假設我們的網站網域為http://myorigin.com/

location /myBaidu {
  proxy_pass http://www.baidu.com/;
}

這樣設定後就可以由http://myorigin.com/myBaidu直接存取到百度頁面,如下圖

nginx的設定怎麼轉送到其他網站

關於proxy_pass使用的語法,與/有關

當路徑加上/:相對路徑,此時相當於代理到http:// www.baidu.com/

location /myBaidu {
  proxy_pass http://www.baidu.com/;
}

如果造訪http://myorigin.com/myBaidu/abc就相當於造訪http://www.baidu.com/abc

當路徑不加/:絕對路徑,,此時相當於代理到http://www.baidu.com/myBaidu

location /myBaidu {
  proxy_pass http://www.baidu.com;
}

如果訪問http://myorigin.com/myBaidu/abc就相當於訪問http: //www.baidu.com/myBaidu/abc

當路徑加上/xxx/

location /myBaidu {
  proxy_pass http://www.baidu.com/xxx/;
}
  • 如果造訪http://myorigin.com/myBaidu/abc就相當於訪問http://www.baidu.com/xxx/abc

當路徑加上/xxx

location /myBaidu {
  proxy_pass http://www.baidu.com/xxx;
}
  • #如果訪問http://myorigin.com/myBaidu/abc就相當於訪問http://www.baidu.com/xxxabc

其他問題

  • ##用proxy_pass的方案反向代理到百度頁面,沒有任何問題。

  • 但是我們專案中是要求跳到某個內網域名,而且此域名和http://myorigin.com/並沒有互通,因此配置代理時,需要配置成ip位址,然後代理成功跳轉

但此時開啟代理程式的頁面顯示沒有樣式,檢視控制台發現了報錯如下:

nginx的設定怎麼轉送到其他網站

點進去查看錯誤如下圖

nginx的設定怎麼轉送到其他網站

  • #由此,問題就很明顯了,代理程式的網站用了根目錄絕對路徑去找到/static下的jquery文件,因此會直接在我們專案的網域下找http://myorigin.com/static文件,這樣是怎麼也無法找到代理專案的/static文件,所以jquery找不到報錯,頁面樣式失效

  • 而且不只是/static文件,可能還有其他文件也找不到,還有可能路徑與路由衝突,引發問題

  • 因此,我們可以得出結論,前端專案的nginx的配置轉發到其他網站需要慎重,不是所有網站都可以走前端代理的,需要具體情況具體分析

以上是nginx的設定怎麼轉送到其他網站的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除