原文鏈接: 何曉東 博客
主要是 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 地址。
參考鏈接:
繼續推薦幾個課程哈 -> 去看看