如何在 Nginx 中重新導向 URL

NGINX 是一款高效能 Web 伺服器和反向代理伺服器,以其處理高流量負載和高效能服務靜態內容的能力而聞名。其強大功能之一是重定向 URL 的能力,這是管理網路流量、改進 SEO 和確保流暢的用戶體驗的關鍵功能。 NGINX 中的 URL 重新導向可用於多種目的,例如將 HTTP 重新導向至 HTTPS、建立 URL 別名或管理網站遷移。

以下指南將示範如何在 Linux 或類 Unix 系統上使用命令列終端機在 NGINX 中重新導向 URL。透過設定 NGINX 強大且靈活的重定向功能,您可以有效地管理和控制 Web 流量,以滿足您的特定要求。

在 NGINX 中返回重定向 URL

NGINX 提供了兩個用於設定 URL 重定向的關鍵指令: returnrewrite。這些指令對於將網路流量從一個 URL 引導到另一個 URL 至關重要。

NGINX 中的 301 重定向

301 重定向對於永久重定向至關重要。當網站或網頁已永久移至新 URL 時,通常會使用它。要在 NGINX 中設定 301 重定向,您可以使用 return 伺服器區塊中的指令,指定 301 狀態代碼。這可確保使用者和搜尋引擎都導向到新 URL。

301 重定向範例

考慮您需要重定向流量 oldsite.comnewsite.com。 NGINX 配置如下所示:

server {
    listen 80;
    server_name oldsite.com;
    location / {
        return 301 $scheme://www.newsite.com$request_uri;
    }
}

此配置有效地重新導向所有傳入請求 oldsite.comwww.newsite.com,保持原來的請求URI。這種簡單而強大的方法可確保使用者和搜尋引擎找到您的新網站位置。

NGINX 中的 302 重定向

與永久重定向相反,302 重定向用於暫時重定向場景。例如,您可以在網站維護期間或臨時行動頁面時暫時重新導向使用者。

302 重定向範例

為了說明這一點,假設您想要重定向流量 temp.comanother-site.com 暫時地。 NGINX 設定如下:

server {
    listen 80;
    server_name temp.com;
    location / {
        return 302 $scheme://www.another-site.com$request_uri;
    }
}

在此配置中,所有流量 temp.com 暫時改道至 www.another-site.com。使用 302 狀態代碼表明此重定向是暫時的,這對於在短期變更期間保持 SEO 完整性非常重要。

NGINX 中的重寫指令重新導向 URL

rewrite NGINX 中的指令是處理複雜 URL 重新導向場景的強大工具。與直截了當的不同 return 指示, rewrite 利用正規表示式和更廣泛的變數。這種靈活性允許精確控制 URL 的重定向方式,特別是在簡單重定向不夠的情況下。

基於檔案副檔名的重定向

重定向特定檔案類型

一個常見的要求是重定向特定的檔案類型。例如,重定向所有 .jpg 映像請求到新目錄:

server {
    listen 80;
    server_name www.example.com;
    location ~* \.jpg$ {
        rewrite ^/images/(.*)\.jpg$ /new-images/$1.jpg permanent;
    }
}

在此配置中,任何對 .jpg 文件在 /images/ 目錄被重定向到 /new-images/。正規表示式 \.(jpg)$ 確保只有以以下結尾的 URL .jpg 被影響到的。

基於URI的動態重定向

透過 URI 操作進行重定向

另一個常見場景涉及根據 URI 元件動態重定向 URL。考慮根據產品類別重定向使用者:

server {
    listen 80;
    server_name www.example.com;
    location ~* ^/category/(.*)$ {
        rewrite ^/category/(.*)$ /new-category/$1 permanent;
    }
}

此設定可擷取以下任何 URL /category/ 並將其重定向到對應的 URL /new-category/,維護URI的後半部。

處理舊版 URL 架構

將舊 URL 重新導向到新模式

網站經常會隨著時間的推移而改變其 URL 結構。這 rewrite 指令可以順利處理這樣的轉換:

server {
    listen 80;
    server_name www.example.com;
    location ~* ^/old-structure/(.*)$ {
        rewrite ^/old-structure/(.*)/info$ /new-structure/$1/details permanent;
    }
}

此範例示範如何從舊模式重新導向 URL (/old-structure/[identifier]/info)到一個新的模式(/new-structure/[identifier]/details).

基於地理的重定向

按地理位置重新導向用戶

NGINX 還可以處理基於地理位置的重定向,利用 $geoip_country_code 多變的:

server {
    listen 80;
    server_name www.example.com;
    if ($geoip_country_code = "US") {
        rewrite ^/(.*)$ /us/$1 permanent;
    }
}

在此配置中,來自美國的訪客將被重新導向到網站的美國特定部分。這種方法需要在 NGINX 中啟用 GeoIP 模組。

NGINX 中的負載平衡重定向 URL

NGINX 擅長透過其負載平衡和重定向功能有效管理網路流量。 NGINX 中的負載平衡涉及在多個伺服器之間分配傳入流量。這種策略可以防止任何單一伺服器過載,從而提高系統的整體效能和可靠性。

配置 NGINX 進行負載平衡

負載平衡設定

基本負載平衡

以下是如何設定 NGINX 進行負載平衡的範例:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    
    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

在此配置中,NGINX 充當反向代理,並將傳入請求均勻分發到三個指定後端伺服器之一:backend1.example.com、backend2.example.com 和 backend3.example.com。此設定對於高流量網站至關重要,因為它確保有效的請求處理,從而保持快速回應時間並最大限度地減少伺服器停機時間。

具有運轉狀況檢查的進階負載平衡

為了提高可靠性,您可以設定 NGINX 對後端伺服器執行健康檢查,並僅將流量傳送到健康的伺服器:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
        
        # Enable health checks
        health_check;
    }
    
    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

透過此設置,NGINX 會定期檢查後端伺服器的運作狀況,並排除負載平衡池中任何已關閉的伺服器。這可確保流量僅定向到能夠處理請求的伺服器,從而提高整體可靠性。

負載平衡的最佳實踐

實現會話保持(粘性會話)

對於需要會話持久性的應用程序,您可以使用黏性會話來確保使用者一致地路由到同一後端伺服器:

http {
    upstream backend {
        ip_hash;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    
    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

在此配置中, ip_hash 指令確保來自相同客戶端 IP 位址的請求始終路由到相同後端伺服器,從而保持會話一致性。

配置 SSL 終止

為了安全通信,最佳實踐是在負載平衡器處終止 SSL:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    
    server {
        listen 443 ssl;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

在此設定中,NGINX 處理 SSL 終止、解密傳入的 SSL 請求並將它們作為常規 HTTP 請求轉送到後端伺服器。這可以減輕後端伺服器的 SSL 處理負擔,從而提高其效能。

結論

在本指南中,我們探討了使用 NGINX 進行 URL 重新導向、負載平衡等的實用性。我們介紹了一系列技術,從設定基本的 301 和 302 重定向到實現複雜的重寫規則和高效的負載平衡配置。 NGINX 的強大之處在於其靈活性和效能,使其成為管理任何網站(無論是小型還是大型)的寶貴工具。當您應用這些概念時,請不斷進行試驗和最佳化。 NGINX 是您的 Web 管理工具庫中的一個強大工具,因此請使用它來保持您的網站平穩且有效率地運作。

Joshua James
跟我來
Joshua James 的最新帖子 (看全部)

發佈留言