主要是 location 參數中的 if 判斷的配置跳轉,分流能減輕伺服器的負載和壓力,而這種是一種非常常見的伺服器部署架構。
根據ip 最後一段的範圍來跳轉
#域名,ip,端口等信息请自行修改 upstream huaji-01.com { server 192.168.1.100:8080; } upstream huaji-02.com { server 192.168.1.200:8080; } server { listen 80; server_name www.huaji.com; location / { if ( $remote_addr ~* ^(.*)\.(.*)\.(.*)\.[1,125]$) { proxy_pass http://huaji-01.com; break; } proxy_pass http://huaji-02.com; } }
以上為將ip 末段為1-125 的請求來源轉發到huaji-01.com,其他轉向huaji-02.com,同樣可以修改正規,例如
規則: $remote_addr ~* ^(.*)\.(.*)\.(.*)\.*[0268]$ 結尾為0268這樣的偶數ip,跳轉到huaji-01.com,其他跳到第二個網域;
規則:$remote_addr ~* ^(112)\.(.*)\.(.*)\.(.*) $ 開頭為112 的ip 跳到指定的網域名稱;
#規則:$http_x_forwarded_for ~* ^(112)\.(.*)\.(.*)\.(.*)$ 根據forward位址段來分流,開頭為112 的跳到指定網域名稱
if 指令條件判斷的含義:
正規表示式匹配,其中:
~ 為區分大小寫匹配
~* 為不區分大小寫匹配
!~ 和!~* 分別為區分大小寫不匹配及不區分大小寫不匹配
檔案及目錄匹配,其中:
-f 和!-f 用來判斷是否存在檔案
-d 和!-d 用來判斷是否存在目錄
-e 和!-e 用來判斷是否存在檔案或目錄
-x 和!-x 用來判斷檔案是否可執行
rewrite指令的最後一個參數為flag標記,flag標記有:
last 相當於apache 裡面的[l] 標記,表示rewrite。
break 本條規則匹配完成後,終止匹配,不再匹配後面的規則。
redirect 傳回 302 暫時重定向,瀏覽器位址會顯示跳轉後的 url 位址。
permanent 傳回 301 永久重定向,瀏覽器位址會顯示跳轉後的 url 位址。
以上是Nginx根據請求IP末段進行分流如何配置的詳細內容。更多資訊請關注PHP中文網其他相關文章!