周一 23 五 2011
上周一个朋友和我说,他们的网站无法访问了。仔细一问,原来他们的域名备案刚被注销了,机房有白名单,没备案的域名无法访问。
朋友的服务器是自己购买的,托管在广东一家机房,已经付了一年费用,才刚过几个月。他们的网站数据库比较庞大,程序写的又比较烂,一般的服务器跑起来非常慢,备案花费时间据说2个星期到2个月都有可能。大家讨论了几个方案:
一. 干脆搬到国外去,不鸟这个备案了。 缺点:服务器是新买的,托管费也是才交了没几个月,这样子亏大了,他们也不是有钱的人。优点:以后都可以不用管TG的备案了。
二. 注册一个临时域名,将站搬到国外服务器,主域名继续留在国内备案。 缺点:能顺畅运行他们网站的服务器,月租大概要一千元,还是有点贵,网站数据需来回同步。优点:花费比方案一少。
三. 注册一个临时域名,购买一个VPS,通过反向代理方式访问。 缺点: 速度会比较慢,得绕地球一个来回呢。 优点:花费少,对国内速度较好的 linode vps 每月只要130出头。数据不用迁移。
最后大家讨论的结果是使用方案三先测试。
介绍一下环境:
国内服务器: Centos 5.0 32位, nginx 7.x + php 5.2.x 硬件: Cpu Xeon X34xx, 8G 内存 (对于32位系统,容我吐槽一下,安装配置操作系统的人真是天才啊)
国外VPS: Debian 6 64位 , nginx 7.x 硬件: cpu 是Xeon L5520 共享, 512M 内存
做法:
一. 两边服务器都安装openvpn, 建立VPN加密连接。 如果不会,请去Google ,应该有很多文档
二. 在国内服务器上配置nginx:
nginx.conf 的http 部分,增加两行, 10.10.8.0/24 是openvpn使用的IP范围,
set_real_ip_from 10.10.8.0/24;
real_ip_header X-Real-IP
虚拟主机配置上,增加新申请的临时域名
在这里,如果nginx抱怨 set_real_ip_from 是非法的配置,请重新编译你的nginx,加上选项 –with-http_realip_module
三.在国外的vps配置nginx
创建 /var/cache/nginx 目录,权限设为777
在nginx.conf 的http 部分,增加一行
proxy_cache_path /var/cache/nginx levels=2:2 keys_zone=one:100m max_size=5G;
创建一个虚拟主机配置,下面是例子:
server {
listen 80;
server_name newdomain.com www.newdomain.com;
access_log /var/log/nginx/newdomain.com.log;
root /var/www/default;
index index.html index.htm ;
location / {
proxy_pass http://10.10.8.1:80;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ .*\.(ico|png|jpg|gif|css|js)?$ {
proxy_cache one;
proxy_pass http://10.10.8.1:80;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_valid 200 304 60m;
proxy_cache_valid 404 1m;
}
}
newdomain.com 是新申请的域名,对于一些不会经常改动的文件,如图片文件,js文件,css文件,我设了让它缓存60分钟,以减少带宽消耗,加快用户速度。 10.10.8.1 是国内服务器的vpn ip。
经过测试,这个方案运作还算不错,除了速度比以前慢,其它表现完全一致。
最后就是一个收尾工作,将原来网站上,使用老域名的绝对连接改为相对连接。
可以将老域名也指到国外服务器上,发个公告通知用户,过几天再将老域名指回国内服务器,申请备案。
备案下来就可以启用老域名了,所有数据都一模一样。
飞天的梦想 is proudly powered by