當前位置: 華文頭條 > 推薦

透過Nginx實作URL轉發

2024-02-20推薦

概覽

透過Nginx的轉發功能來自行搭建URL轉發伺服器,實作網域名稱轉發功能。

需求場景

需求場景一:顯性URL轉發

用的是301重新導向技術,效果為瀏覽器網址列輸入 http://a.com 回車,開啟網站內容是目標地址 http://cloud.baidu.com/ 的網站內容,且網址列顯示目標地址 http://cloud.baidu.com/ 。

需求場景二:隱性URL轉發

用的是 iframe 框架技術、非重新導向技術,效果為瀏覽器網址列輸入 http://a.com 回車,開啟網站內容是目標地址 http://cloud.baidu.com/ 的網站內容,但網址列顯示當前地址 http://a.com 。

實作概述

目前使用者需要手動搭建一個nginx伺服器或者集群,將網域名稱在註冊商那裏設定解析IP為自行搭建的Nginx伺服器地址。

Nginx可以透過rewrite或者proxy_pass兩種方式將流量牽引到目標業務。

  • 利用rewrite功能可以實作顯性轉發。該方式配置下使用者請求nginx後,nginx返回重新導向的url(301永久重新導向、302臨時重新導向)給客戶端,客戶端在用重新導向後的url再次請求對端server。如果使用了永久重新導向使用者瀏覽器中就會緩存該地址,使用者再次存取過程就不會再次請求nginx,而是直接命中最終的server
  • 透過proxy_pass可以實作隱性轉發。該方式nginx伺服器作為一個代理伺服器,接收使用者流量轉發到真正的後端服務。
  • 說明: 一般情況不建議使用隱形轉發,流量過Nginx伺服器對運維和負載均衡都存在挑戰。

    顯性URL轉發

    301永久重新導向

    server { listen 80; server_name $your_domain; rewrite /.* http://$new_domain$uri permanent;}

    這裏 $uri 是指匹配正則後跳轉的目標地址,比如存取 $your_domain/about 就會跳轉到 http://$new_domain/about。

    302臨時重新導向

    server { listen 80; server_name $your_domain; rewrite /.* http://$new_domain$uri redirect;}

    註意修改完重新開機nginx。

    隱性URL轉發

    我們將存取service.baidu.com:9988的流量代理到redirect.baidu.com:6666上去.