最近我们在开发的某SLG游戏的某业务要做如下场景:

         要求在全球各个区域访问离他最近的服务器节点:用户通过访问域名A,在服务器端解析用户来源,根据ip地址来源来转发到对应的最近的服务器节点。

 由于我们之前的业务一些设计很难调整,所以我将通过nginx来进行做转发处理,本片文章我将使用nginx/apache做反向代理来识别访问用户的ip区域来做转发。


首先,准备好安装 nginx服务器:

1. yum search nginx-module 先查找是否有geoip模块


2.安装geoip模块:

yum install nginx-module-geoip*

3.安装geoip安装。 

   yum install geoip-devel

4.配置nginx.conf

 添加模块

load_module /usr/lib64/nginx/modules/ngx_http_geoip_module.so; 

 配置数据源:geoip_country  /usr/share/GeoIP/GeoIP.dat;
               fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;


user  nginx;
worker_processes 1;


error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


load_module /usr/lib64/nginx/modules/ngx_http_geoip_module.so;


events {
worker_connections 65535;
}


http {
include /etc/nginx/mime.types;
default_type application/octet-stream;


geoip_country /usr/share/GeoIP/GeoIP.dat;
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#'$geoip_country_name $geoip_region $geoip_city';


access_log /var/log/nginx/access.log main;


sendfile on;
#tcp_nopush on;


keepalive_timeout 65;


#gzip on;


include /etc/nginx/conf.d/*.conf;
}



5.在配置文件里加入如下信息:

server {
listen 80;
server_name localhost;


#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;


location / {
if ($geoip_country_code = CN) {
proxy_pass http://www.baidu.com;
}
if ($geoip_country_code !~ CN) {
proxy_pass http://www.sohu.com;
}
}


}


6.这样不通区域的用户就被转发到就近的服务器节点上了。