应用场景
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用Nginx网站用户有百度、京东、新浪、网易、腾讯、淘宝等。
本案例中,使用一台Nginx做反向代理服务器,三台Nginx做负载均衡的代理服务。因为使用用户可能非常多,所以需要做负载均衡。后端使用天翼云的弹性文件服务。天翼云弹性文件服务用于存储文件,如图片、视频、镜像回源文件或者一些用户的静态数据等。不同的Nginx代理服务器之间共享访问文件系统数据。
方案使用云产品
弹性文件服务,弹性云主机
方案架构
配置的架构如下图:
准备工作
在开始之前需要创建一个虚拟机私有云VPC,一个文件系统,四台云主机,其中一台做反向代理服务器,三台做负载均衡的代理服务。具体操作如下:
- 在需要操作的地域创建虚拟私有云VPC,具体操作步骤参见创建虚拟私有云VPC。
- 创建该VPC下的弹性云主机,操作系统为Linux,此处以CTyunOS 2.0.1为例演示,具体操作步骤参见创建弹性云主机。
- 创建该VPC下的文件系统,文件系统的协议类型为NFS,具体操作步骤参见创建文件系统。
操作步骤
步骤一:放开云主机TCP22330端口
-
登录“控制中心”,点击“计算>弹性云主机”进入弹性云主机控制台页面。
-
找到目标云主机,点击名称进入云主机详情页。
-
在详情页下方,点击“安全组”页签,在该页签默认安全组下点击“添加规则”,具体操作请参考添加安全组规则。
-
添加“入方向”规则,各参数选项如下图。
-
添加完成之后,在默认安全组下会显示相应的规则。
-
重复以上步骤,对四台云主机均放开22330端口。
步骤二:部署Nginx负载均衡代理服务
注意操作都是以root账号操作,云主机中没有运行其他的进程,避免端口被占用。
在三个代理服务器的主机上挂载文件系统,安装部署Nginx。
-
以root用户登录弹性云主机,登录方式参考登录Linux弹性云主机,执行如下命令,安装NFS客户端。
yum install nfs-utils -y
-
等待安装完成,执行如下命令,安装Nginx。
yum install nginx -y
-
执行如下命令,挂载文件系统到Nginx需要代理的目录,参考挂载NFS文件系统到弹性云主机 (Linux)。挂载地址在文件系统详情页获取,参考查看文件系统。
"/usr/share/nginx/html/"是需要挂载在本地主机的目录,也是Nginx默认使用的代理目录。
mount -t nfs -o vers=3,proto=tcp,async,nolock,noatime,nodiratime,wsize=1048576,rsize=1048576,timeo=600 挂载地址 /usr/share/nginx/html/
-
执行如下命令,为共享目录下编辑一个index.html。
echo "Test for CT-SFS!" > /usr/share/nginx/html/index.html
-
重复1-4步骤,对三台Nginx都挂载同一个NFS文件系统。
-
执行
vi /etc/nginx/nginx.conf
命令,在该文件中修改Nginx的默认端口80为22330,然后执行以下命令为每一个代理服务器启动Nginx。
systemctl restart nginx
-
验证代理结果。若三台Nginx代理服务都可以访问index.html文件,则表示配置成功。在每一个代理服务器上使用curl命令验证如下,其中{ip}为云主机的内网ip,可以在云主机详情页“弹性网卡”页签下获取。
curl "http://{ip}:22330"
在云主机详情页“弹性IP”页签下找到云主机的公网地址,并在浏览器上输入“{公网IP地址}:22330",预期结果如下:
如网页请求不通但是本地curl没有问题,那么执行以下命令关闭防火墙:
systemctl stop firewalld
systemctl stop iptables
步骤三:部署Nginx反向代理服务
在第四台云主机上安装反向代理。
-
登录第四台云主机,执行如下命令,安装Nginx。
yum install nginx -y
-
执行如下命令配置反向代理的Nginx服务。
vi /etc/nginx/nginx.conf
修改默认的http配置如下,其中192.168.xxx.xx为步骤二中三台负载均衡服务器IP,即三台云主机的内网IP,可以在云主机详情页“弹性网卡”页签下获取,使用时注意替换。
http { upstream nfs { server 192.168.xxx.xx:22330; server 192.168.xxx.xx:22330; server 192.168.xxx.xx:22330; } server { listen 22330; location / { proxy_pass http://nfs; } } }
-
执行如下命令,启动反向代理的Nginx服务。
systemctl restart nginx
步骤四:测试验证
在第四台云主机,即反向代理服务器上使用curl命令请求,其中{ip}为云主机的公网IP,可以在云主机详情页“弹性IP”页签下获取。也可以使用内网IP,在云主机详情页“弹性网卡”页签下获取。
curl "http://{ip}:22330"
在浏览器上输入“{公网IP地址}:22330",预期结果如下:
如网页请求不通但是本地curl没有问题,那么执行以下命令关闭防火墙:
systemctl stop firewalld
systemctl stop iptables