改造网站支持IPV6访问 使用Nginx反向代理方式解决(一)

工作需要,需要将某个网站改造为支持ipv6访问。

简单叙述改造方案

1.将需要改造支持IPV6的网站使用Nginx做反向代理。
2.在DNS解析中添加AAAA记录。
3.把Nginx的服务器配置IPV6地址
本篇只介绍 使用Nginx代理IPV6涉及的Nginx配置、Centos安装,DNS中4A记录和Nginx服务器IPV6地址下篇介绍

不建议用windows版的nginx

不建议尝试windows版的nginx,官方windows版的不包含v6模块,编译起来又非常麻烦,需要各种工具和依赖,见下图:

一、下载安装centos

两个版本,一个标准版,一个精简版。推荐使用标准版

下载完后安装,一路下一步就可以了,具不表述
修改网络配置:vi /etc/sysconfig/network-scripts/ifcfg-ens18
设置固定IP
centos 7不再使用ifconfig命令,使用ip addr
centos7默认是关闭网络的,修改两处配置:BOOTPROTO、ONBOOT、静态IP需要增加以下配置

重启网络:

systemctl restart network
ip addr重新查看配置

ping 测试不通
因为是在超融合平台上部署的虚拟机,调整超融合平台的虚拟网络。
重新测试,网络正常。配置好遇到测试不通的同学请注意查看自己的网络问题。

二、安装配置nginx

获取到本地,先安装wget
yum -y install wget
使用wget下载到本地,下载稳定版
wget -c https://nginx.org/download/nginx-1.14.2.tar.gz
下载完毕解压 tar -zxvf nginx-1.14.2.tar.gz

配置编译安装

./configure,报错提示c compiler cc is not found
缺少gcc环境编译器,安装
yum install gcc-c++
安装PCRE pcre-devel
 yum install -y pcre pcre-devel
安装zlib
yum install -y zlib zlib-devel
重新执行./configure命令,正常
make
makeinstall
查找安装路径
whereis nginx

启动、停止、重载配置文件

cd /usr/local/nginx/sbin/
启动

./nginx

停止
此方式停止步骤是待nginx进程处理任务完毕进行停止。
./nginx -s stop
此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。

./nginx -s quit

重载,当 ngin x的配置文件 nginx.conf 修改后,要想让配置生效需要重启 nginx,使用-s reload不用先停止 ngin x再启动 nginx 即可将配置信息在 nginx 中生效,如下:

./nginx -s reload

重启
先停止再启动(推荐):
对 nginx 进行重启相当于先停止再启动,即先执行停止命令再执行启动命令。如下:
./nginx -s quit
./nginx
查询nginx进程:
ps aux|grep nginx 或者ps -ef | grep nginx
加入开机启动
vi /etc/rc.local
增加一行 /usr/local/nginx/sbin/nginx
设置文件权限755
 chmod 755 /etc/rc.local
至此,nginx就安装完毕了,启动、停止、重启操作也都完成了。

三、测试Nginx

启动Nginx,访问10.240.5.9,无法访问!
先查看nginx是否开启:ps -ef | grep nginx
再查看端口是否正常 :netstat -lnt |grep 80
若netstat命令不识别,安装net-tools:yum install net-tools
在测试本机访问是否正常
curl -i 127.0.0.1
可以正常访问。
查看防火墙状态:systemctl status firewalld
将80端口加入防火墙:firewall-cmd –zone=public –add-port=80/tcp –permanent
重启防火墙:systemctl restart firewalld.service
访问地址成功:

四、增加IPV6模块

查看是否支持IPV6模块:./nginx -V
说明我们刚才安装的Nginx默认没有编译ipv6包
重新配置、编译、安装
./configure –user=www –group=www –prefix=/alidata/server/nginx –with-http_stub_status_module –without-http-cache –with-http_ssl_module –with-http_gzip_static_module –with-ipv6
报错:
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using –with-openssl=<path> optio
缺少openssl,安装:yum install openssl-devel
重新执行上边./configure 加模块编译参数
成功,继续执行make,编译完毕后,会在当前目录下创建objs目录,新的nginx执行文件将生成在该目录中
替换Nginx文件
先将原来的nginx备份:(养成好习惯)
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak(后边证实这一步其实是没用的,因为configure时候加入Prefix了,安装目录都不是这个了)
停止Nginx,不停止无法替换成功

./nginx -s stop

覆盖新的Nginx到原来的
cp nginx /usr/local/nginx/sbin/nginx (后边证实这一步其实是没用的,因为configure时候加入Prefix了,安装目录都不是这个了)
重启测试:
启动:./nginx
报错:nginx: [emerg] getpwnam(“www”) failed
问题原因:没有创建www用户
解决:增加www用户和组
/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www
解决完再次重启:./nginx,成功启动
查看nginx是否支持Ipv6:./nginx-V
至此,可以看到我们的nginx已经加入ipv6模块。

五、进行IPV6配置

到此为止我们已经有了一台可以正常访问的带IPV6模块的nginx服务器,下面我们将进行ipv6的相关配置来监听ipv6进来的请求
编辑nginx配置文件:vi nginx.conf
监听部分加入:listen [::]:80 ipv6only=on; 我们没有Https,这里只加80端口的监听。
加入反向代理的服务器转发IP
重启nginx:
./nginx -s quit
./nginx
访问浏览器:10.240.5.9没有正常转发,貌似修改配置文件无效
查看nginx配置文件
配置文件路径:/alidata/server/nginx/conf/nginx.conf
编译的时候指定路径参数了!!新的Nginx按照路径:Alidata/Server/Nginx
按照上述描述重新修改
修改后重启nginx
查看是否监听IPV6请求:netstat -tuln
出现 :::80表示正常监听IPV6请求
第二次加入ipv6模块后,Nginx的安装目录变更为 /alidata/server/nginx/ ,一定要注意!

五、DNS修改增加AAAA记录,Nginx代理服务器地址增加V6地址

请参考下篇文章介绍