使用nginx的geo模块对指定IP做URL重写
当用户访问时候,geo模块先对用户ip进行匹配,然后将匹配到的结果放在配置的变量名中。接着便可以对该变量内容进行判断,再做相应的动作。
下面的例子使得 IP 192.168.0.1 和 192.168.0.10 访问 /download/ 目录时,将变量 $test_ip 设置为1(默认为0),根据策略,重写URL到 /download.test。
## file nginx.conf
http {
...
include "test.conf";
}
server {
...
if ($test_ip) {
rewrite ^/download/(.*)$ /download.test/$1;
}
...
}
## file test.conf
geo $test_ip {
default 0;
192.168.0.1/32 1;
192.168.0.10/32 1;
...
}
第2个例子:针对不同的ip段,访问代理到不同的主机
http {
geo $geo {
default default;
192.168.1.0/24 cn;
192.168.2.0/24 us;
192.168.3.0/24 tw;
}
upstream cn.server {
server 192.168.0.101; ## cn用户访问的server
}
upstream us.server {
server 192.168.0.102; ## us用户访问的server
}
upstream tw.server {
server 192.168.0.103; ## tw用户访问的server
}
upstream default.server {
server 192.168.0.100; ## 其他用户访问的server
}
}
server {
listen 80;
server_name www.test.com;
index index.html index.htm;
root html;
location / {
proxy_redirect off;
proxy_set_header Via "nginx";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
## 不同IP段的用户Proxy到不同的主机
proxy_pass http://$geo.server$request_uri;
}
}
原文链接是:http://lumte.com/?p=282