nginx代理配置根据ip地址来转发到不同的地址端口
原创
©著作权归作者所有:来自51CTO博客作者游戏开发司机的原创作品,请联系作者获取转载授权,否则将追究法律责任
最近我们在开发的某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.这样不通区域的用户就被转发到就近的服务器节点上了。