nginx的配置轉發到其他網站詳解
需求
有這樣一個需求:項目中跳轉到某個地址,但這個地址不想暴露給用戶。
因此我們想到要做一層代理,通過項目某個路徑直接用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直接訪問到百度頁面,如下圖
關於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地址,然後代理成功跳轉
但此時打開代理的頁面顯示沒有樣式,查看控制臺發現瞭報錯如下:
點進去查看錯誤如下圖
- 由此,問題就很明顯瞭,代理的網站用瞭根目錄絕對路徑去找到/static下的jquery文件,因此會直接在我們項目的域名下找http://myorigin.com/static文件,這樣是怎麼也無法找到代理項目的/static文件,因此jquery找不到報錯,頁面樣式失效
- 而且不隻是/static文件,可能還有其他文件也找不到,而且還有可能路徑與路由沖突,引發問題
- 因此,我們可以得出結論,前端項目的nginx的配置轉發到其他網站需要慎重,不是所有網站都可以走前端代理的,需要具體情況具體分析
以上就是nginx的配置轉發到其他網站詳解的詳細內容,更多關於nginx配置轉發網站的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Nginx反向代理入門實戰指南
- Nginx解決history模式下頁面刷新404問題示例
- nginx中的兩個模塊的proxy_pass的區別解析
- 教你nginx跳轉配置的四種方式
- 詳解nginx location指令