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地址,但也可以從其他變量獲得。如
geo $remote_addr $geo { default 0; 127.0.0.1 1;}geo $arg_ttlsa_com $geo { default 0; 127.0.0.1 1;}
如果該變量的值不能代表一個合法的IP地址,那么nginx將使用地址“255.255.255.255”。
nginx通過CIDR或者地址段來描述地址,支持下面幾個參數:
geo $country { default ZZ; include conf/geo.conf; delete 127.0.0.0/16; proxy 192.168.100.0/24; proxy 2001:0db8::/32; 127.0.0.0/24 US; 127.0.0.1/32 RU; 10.1.0.0/16 RU; 192.168.1.0/24 UK;}
vim conf/geo.conf
10.2.0.0/16 RU;192.168.2.0/24 RU;
地址段例子:
geo $country { ranges; default ZZ; 127.0.0.0-127.0.0.0 US; 127.0.0.1-127.0.0.1 RU; 127.0.0.1-127.0.0.255 US; 10.1.0.0-10.1.255.255 RU; 192.168.1.0-192.168.1.255 UK;}
geo指令主要是根據IP來對變量進行賦值的。因此geo塊下只能定義IP或網絡段,否則會報錯。
geo模塊實現全局負載均衡
server1 : 192.168.6.101
server2 : 192.168.6.102
server3 : 192.168.6.121
測試機1 IP:192.168.6.2
測試機2 IP:192.168.6.8
測試機3 IP:192.168.6.189
1.在每臺server上都編譯安裝 nginx ,我就不多說了!
server1,與server2 的配置我沒有改動~只把他的主頁改一下,這樣有利于測試!
新聞熱點
疑難解答