Total Pageviews

Tuesday, 31 January 2012

为你的LNMP加入IPV6支持


#想玩玩IPV6,所以就琢磨着网站对IPV6的支持。VPS是Linux的主机,所以不能使用ASP的脚本,所以采用的是最简单的LNMP的搭建方式,如果觉得麻烦的同学可以采用Virtualmin的面板,可以直接设置IPV6的支持的。下面进入正题,我们的环境是Centos5(好像很多Debian不支持IPV6)。
1.先安装LNMP
我们安装的是LNMP安装包,因为在lnmp0.7的版本中已经将Nginx的IPV6模块加入进去了,默认是支持IPV6的,执行安装:
# wget http://soft.vpser.net/lnmp/lnmp0.7.tar.gz
# tar zxvf lnmp0.7.tar.gz
# cd lnmp0.7
# ./centos.sh


2.安装完成之后,我们就开始加入对IPV6的端口侦听,执行:
vi /usr/local/nginx/conf/nginx.conf
在Server处修改IP及其端口,如下修改:
server
{
listen 你的IPV4地址:80;
listen [你的IPV6地址]:80;
server_name urdomain.com;
index index.html index.htm index.php;
root /home/wwwroot;
然后保存.

3.完成之后,我们需要先看看是否有错误,执行:
/usr/local/nginx/sbin/nginx -t
如果显示如下则成功了,否则会有错误代码提示
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful

4.检查完成,没有错误,我们最后再需要重启一下Nginx就OK啦:
# killall nginx
# /usr/local/nginx/sbin/nginx

现在你的服务器就支持IPV6啦
----------------------------------------------------------------------------
为nginx添加ipv6支持


由于Cernet2的纯ipv6特性,在大学校园内使用ipv6是很方便而且很快的。所以为nginx添加ipv6支持是很必要的了。当然首先你要有ipv6地址(没有的话可以用HE的tunnel broker),而且要有能设置AAAA记录的DNS。
nginx新版本貌似已经添加了ipv6支持,但是很多老版本还没有(至少我的没有),你用nginx -V看看有没有–with-ipv6就知道了。
重新编译Nginx使之支持IPv6。不详细说了,晒下命令,最关键的一句是“–with-ipv6”:
wget http://nginx.org/download/nginx-0.8.32.tar.gz
tar –xvzf nginx-0.8.32.tar.gz
cd nginx-0.8.32
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-ipv6
make && make install
下面是添加ipv6模块的方法:
1、首先进入nginx源码的解压目录。(PS:如果忘记放在那个目录了,可以执行:find / -name “nginx-0.7.67″  -type d)
2、找到目录之后,cd进去。
3、接下来给Nginx加上IPv6模块,执行:./configure –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-ipv6
4、如果编译没有错误,然后执行:make 但不要make install。
5、编译完,在objs目录下有一个nginx执行文件,先备份下原来老的nginx文件,执行:mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old ,再把新objs下的nginx cp到sbin下,执行:cp objs/nginx /usr/local/nginx/sbin/nginx
6、执行 /usr/local/nginx/sbin/nginx -t 测试下,显示没有问题。
7、再执行:make upgrade
8、执行:/usr/local/nginx/sbin/nginx -V 看一下,IPv6模块已经编译进去了。
9、修改nginx.conf等相关的conf文件,把
listen 80
改成
listen [::]:80
这是最简洁的方法,不需要多次Listen。
---------------------------------------------------------------------------
实现VPS支持IPv6 让你的网站也可IPv6 ready


即使你的VPS提供商并不支持IPv6,你可以将你网站做成IPv6 Ready!如果你的读者中的不少在教育网,做下这个就十分值得了,因为教育网没有国际连线,但是有免费的IPv6。

本文写给在用VPS的同学,即使你的VPS提供商并不支持IPv6,你可以将你网站做成IPv6 Ready!如果你的读者中的不少在教育网,做下这个就十分值得了,因为教育网没有国际连线,但是有免费的IPv6。如果你的VPS服务商支持IPv6那你可以直接从第5步看起,如果不支持,那就请从头看起。目前只在Diahosting的VPS上实验成功(独立服务器当然也没有问题,至于个人电脑,必须有公网IP地址的才行;因为需要内核支持IPv6和tun/tap,所以可能部分Xen、OpenVZ的不支持)。准备好了吗,Let’s begin!

1. 基本原理
虽然你的VPS不支持IPv6,但是我们可以通过IPv6 Tunnel来解决,也就是平时说的IPv6 Over IPv4,可以理解成在IPv4上建立的IPv6的小管道。我们使用的是HE(Hurricane Electronics)提供的免费的IPv6 Tunnel Broker,HE拥有世界是最大的IPv6骨干网,在世界各地都有提供IPv6 Tunnel Broker的服务。

2. 注册免费的HE IPv6 Tunnel Broker
注册地址:http://tunnelbroker.net/,点击“Register”即可注册,注册流程很简单,就不多讲了。

3. 添加Tunnel
点击左侧“Create Regular Tunnel”.

在“IPv4 endpoint”填入你VPS的IP地址,HE会根据你的浏览器的IP地址帮你选择服务器,但并不一定是最好的,你要根据你的VPS的地理位置,选择服务器的地址,我的是美国西部的VPS,于是我选择了Fremont, CA, US的服务器,点击“Override”可选择服务器。

再点击“Submit”,即可建立Tunnel成功。

4. VPS上的设置
回到HE IPv6 Tunnel Broker的首页,点击刚刚建立的Tunnel,会有这个Tunnel的详细信息.

可以看到,HE给你分配了/64的IPv6地址,也就是你有2的64次方个地址,这辈子都用不完,哈哈。在详细信息的下面,有一个设置你VPS的方法,点击“Show Config”就会出来设置方法:

把这些命令在你的VPS上执行下。测试下看设置成功没,ping6 he.net,如果跟下图差不多,就说明配置成功.

行啦,你的VPS也支持IPv6啦!

5. 让的网站IPv6 Ready

做完这些还不行,还得让你的HTTP服务器支持IPv6。Apache 2.0版本开始支持IPv6,Nginx从0.7.36之后开始支持IPv6。我们只讲Nginx的配置方法,其他可以自己摸索。

我的VPS上装的是lnmp一键安装包:http://lnmp.org/ ,下面讲解中安装路径就以lnmp中安装路径为准。

重新编译Nginx使之支持IPv6。不详细说了,晒下命令,最关键的一句是“--with-ipv6”:

wget http://nginx.org/download/nginx-0.8.32.tar.gz
tar –xvzf nginx-0.8.32.tar.gz
cd nginx-0.8.32
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-ipv6
make && make install
在终端执行ifconfig,可以看到你的IPv6地址.


把你虚拟机配置文件中listen 80;全部替换为listen ip:80;的形式,否则启动不了。再在你想支持IPv6的虚拟机里加一句listen [ipv6]:80,配置好之后,大体如下图所示:

server {
listen       216.45.55.20:80;
listen       [2001:470:1f04:873::2]:80;
server_name urdomain.com;

………………
}
安装配置完毕。停掉旧nginx,启动新编译的nginx:

killall nginx
/usr/local/nginx/sbin/nginx
6. 增加IPv6地址的DNS AAAA记录

这个需要你的DNS支持AAAA记录,也就是IPv6记录。现在基本所有的域名注册商的DNS都支持了,如果不支持,你可以使用dnspod的服务,是免费的,而且支持AAAA记录。

我的是Name.com的域名,本身就支持,就不麻烦了。加好之后,域名会有两条记录,一条A的,一条AAAA的.

搞掂,等生效吧。生效之后,如果用户网络支持IPv6的话,就会访问IPv6地址。如果只有IPv4网络就会访问IPv4的地址啦!

7. 后记

原来以为只有Native的IPv6才能提供网络服务,我错了,走Tunnel的也可以。这下子VPS商支不支持IPv6无所谓了,我们可以自己解决,DIY万岁.








No comments:

Post a Comment