技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 网络系统 --> 分地区访问解决方案

分地区访问解决方案

浏览:1382次  出处信息

   现有的服务有很多的情况对不同的地区对同一个域名,显示不同的内容。例如广告系统,针对一个不同的地域显示不同的广告内容。可以通过动态页面根据来源IP显示不同的内容,毕竟动态页面消耗的资源还是比较的高,另外一个做法根据来源IP作一个301跳转。这两种方式做法消耗资源还是有点大,另外的一种做法是从local dns方面进行的一个dns view的方式进行的地区访问限制,这种方式的好处就是不需要在应用程序和服务器端做任何的修改,只需要配置一个dns的view就可以了,缺点是误判太多。国内还是有很多用户采用国外的google或者opendns的提供的dns服务,这样误判就比较的多了。而无法达到既定的需求,其实有好的解决方案就是在webserver的前端加一个nginx或者采用haproxy打一个 cttproxy的补丁,本文说说采用nginx的负载均衡方式对来源ip进行访问区分,具体操作方法如下:

   安装:

   #./configure -user=www -group=www-prefix=/usr/local/nginx/ -with-http_stub_status_module -with-http_realip_module -with-http_geoip_module

   #make

   #make install

   配置

   user www;

   worker_processes  8;

   error_log  /var/log/nginx/error.log;

   pid        /var/run/nginx.pid;

   events {

       worker_connections  1024;

   }

   http {

       include       /usr/local/nginx/mime.types;

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

       sendfile        on;

       keepalive_timeout  65;

       tcp_nodelay        on;

       gzip  on;

       geo $geo {

           default default;

           192.168.70.64/26 cnc;

           192.168.70.192/26 cnc;

       }

       upstream default.server {

           server 192.168.70.95:8080;

       }

       upstream cnc.server {

           server 192.168.70.95:8081;

       }

       server {

           listen       80;

           server_name  192.168.70.95;

           index index.html index.htm;

           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       8080;

           server_name  192.168.70.95;

           index index.html index.htm;

           root /var/www1;

       }

       server {

           listen       8081;

           server_name  192.168.70.95;

           index index.html index.htm;

           root /var/www2;

       }

   }

   在/var/www1下建立一个内容为8080的index.html文件,在/var/www2目录下建立一个内容为8081的index.html的文件

   结果展示

   从192.168.70.64/26、192.168.70.192/26段过去访问的结果是8081,从其它的ip访问过去时8080的结果,实现根据IP段进行负载均衡

   该结构已经把客户端的IP以及请求等信息已经转发给了后端的真实webserver,所以基本算是一个透明的代理。它的缺点需要添加新的机器进行WEB的透明代理(高并发情况下),同时单台nginx代理的有上限,预估计能到4W/s的并发左右(我曾经优化过一个线上的nginx web server并发连接数达到了4.5W/s),由于并未在正式环境中使用过该结构(不过使用的两个模块都是nginx的核心模块故,问题不大),为保险起见,建议在使用前使用使用loadrunner,ab,webbench,tsung等压力测试工具进行相关的压力测试,并进行相关的功能性测试。该结构的优点是精确的判断,不需要应用程序作任何的修改。

QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1