如何利用Nginx_geo模塊實現CDN調度

引入nginx的geo模塊

geo指令使用ngx_http_geo_module模塊提供的。默認情況下,nginx有加載這個模塊除非人為的 –without-http_geo_module。

ngx_http_geo_module模塊可以用來創建變量,其值依賴于客戶端ip地址。使用方法如下:

geo指令 語法:?geo?[$address]?$variable?{?...?} 默認值:?— 配置段:?http

定義從指定的變量獲取客戶端的ip地址。默認情況下,nginx從$remote_addr變量取得客戶端ip地址,但也可以從其他變量獲得。

在/usr/local/nginx/conf/nginx.conf文件內加入以下配置 geo?$geo?{ ????ranges;??????????#使用以地址段的形式定義地址,這個參數必須放在首位??? ????default?dn; ????include?ip_geo.conf; ??}  ????upstream?wuhan.server?{ ??????server???192.168.155.98:8081; ????}  ????upstream?shanghai.server?{ ??????server???192.168.155.98:8082; ????}  ????upstream?shenzhen.server?{ ??????server???192.168.155.98:8083; ????}  ????upstream?dn.server?{ ??????server???192.168.155.98:8084; ????}  ?server?{ ????listen????80; ????server_name?192.168.155.98?jiaoyu.media.cloudp.cc; ??????root???html; ??????index?index.html?index.htm; ????location?~*?.xml$?{ ??????root?/data/video; ????} ????location?/?{ ??????proxy_redirect?off; ??????proxy_set_header?host?$host; ??????proxy_set_header?x-real-ip?$remote_addr; ??????proxy_set_header?x-forwarded-for? ??????$proxy_add_x_forwarded_for; ??????proxy_pass?http://$geo.server$request_uri; ????} ??}  ??server?{ ????listen?8081; ????server_name?192.168.155.98; ????location?/?{ ??????rewrite?^?$scheme://192.168.155.106$request_uri??permanent; ????} ??}  ??server?{ ????listen?8082; ????server_name?192.168.155.98; ????location?/?{ ????????rewrite?^?$scheme://192.168.155.107$request_uri??permanent; ????} ??}  server?{ ????listen?8083; ????server_name?192.168.155.98; ????location?/?{ ????????rewrite?^?$scheme://192.168.155.109$request_uri??permanent; ????} ??}  ??server?{ ????listen?8084; ????server_name?192.168.155.98; ????location?/?{ ????????rewrite?^?$scheme://jiaoyu.dn.cloudp.cc$request_uri??permanent; ????} }

在/usr/local/nginx/conf/文件下增加ip_geo.conf文件,用來對ip區域進行劃分,注意劃分的時候不能出現ip重疊現象,不然會出現”overlaps”報錯

vim?/usr/local/nginx/conf/ip_geo.conf  192.168.128.6-192.168.128.10?wuhan; 192.168.128.11-192.168.128.15?shanghai; 192.168.128.16-192.168.128.20?shenzhen;

也可以以10.2.0.0/16 wuhan;這種形式來進行ip分段,這樣在nginx.conf中就不不需要使用range指令來進行定義

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享