[免费注册]
  • 腾讯QQ
  • 人人网
  • 新浪微博
  • 腾讯微博
BUG反馈 | 广告合作 | 网页游戏 | 帮助中心
站内公告:
首页 解决方案 项目开发 服务器 [分享]基于apache,nginx等分地区访问解决方案

[分享]基于apache,nginx等分地区访问解决方案

分享到:
lulu 离线 时间: 2011-05-05 10:05 阅读(347) 评论(0)
现有的服务有很多的情况对不同的地区对同一个域名,显示不同的内容。例如广告系统,针对一个不同的地域显示不同的广告内容。可以通过动态页面根据来源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等压力测试工具进行相关的压力测试,并进行相关的功能性测试。该结构 的优点是精确的判断,不需要应用程序作任何的修改。

网友评论: 共有0条评论

我来评论

guest

登录 (请登录发言,并遵守相关规定
小提示:
• 运行html请点击源码添加
• 添加完毕后加上<br />
• 显示html直接复制黏贴
• 高亮代码请点击插入代码

小贴士:

1. 请各位网友在回复的时候不为了回复而回复,尽量发一些有质量的回复内容。

2. 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。

3. 请勿到处挖坑绊人、招贴广告。即占空间让人厌烦,又没人会搭理,于人于己都无利。如果您发现自己的回复不见了,请参考以上3条。

设为首页 | 加入收藏 | 关于我们 | 著作权声明 | 合作信息 | 麦琪开源PHP框架 IT-知识库 Copyright 2010 - 2011 ITZSK Corporation,ALL Rights Reserved. 版权所有
内存使用:1,269.89KB 执行速度:0.02012seconds