阿里云计算服务实践

0. 项目背景
一家跨境电商公司电商平台将采用上云,上云前根据目前架构痛点进行深入浅出的了解剖析,得出需求对促销活动或节日等爆发性的用户访问请求流量进行自适应、自动化的提供弹性扩容、伸缩的扩展。在业务不停的壮大发展时提供水平、垂直的云服务应对增长的需求。在大数据环境下,针对用户的行为画像进行分析精准化营销,创造高效率高价值的数据支撑,为企业带来新营销模式。依托云安全体系,为企业电商平台保障高安全、高可用、高价值的环境。
1. 涉及产品说明
DNS(云解析)
CDN(内容分发网络)
SLB(负载均衡)
ESS(弹性伸缩)
ECS(云服务器 )
RDS(云数据库)
OSS(对象存储服务)
MQ(消息队列)
WAF(应用防火墙)
DDOS(高防)
SSL(数字证书)

2. 项目流程架构
用户访问网站时经过DNS(云解析)去获取到DDOS(高防IP)进行恶意流量判断清洗后由CDN(内容分发网络)节点IP后进行资源请求,如不存在缓存需源站响应请求的流量经过WAF(应用防火墙)进行恶意流量过滤后响应给SLB(负载均衡),SLB会调度后端的ECS(云服务器)应用请求,在业务高峰时ESS(弹性伸缩)会创建ECS实例,对于产生数据计算会从RDS(云数据库)进行查询等操作、如在缓存中已有则优先从缓存层OCS(缓存服务)中提取,如无则调度到持久化层;对于共享文件存储的使用OSS(对象存储服务)进行多ECS间的存储共享,因对于各服务存强依赖或流量过大时用MQ(消息队列)进行消峰或者解耦。SSL(数字证书)保证用户访问网站中间链路数据加密的安全性,VPC(专有网络)从网络层面隔绝了中间件和应用层与用户保障到安全性,通过云监控、趋势感知、安骑士等进行安全方面运维。阿里云平台从应用、安全、架构等方面解决了一站式大型建站服务。
3. 创建基础服务
3.1 域名服务: 注册域名 yekangming.com
阿里云计算服务实践

3.2 CDN服务: 开通CDN服务、购买流量包(http和https 按照业务实际需求)
阿里云计算服务实践

3.3 SLB服务:开通SLB服务(注意需与ECS实例在相同可用区)
阿里云计算服务实践
阿里云计算服务实践

3.4 ECS服务:开通ECS服务(注意需与SLB实例在相同可用区)
阿里云计算服务实践

3.5 SSL服务:购买SSL证书服务
阿里云计算服务实践

3.6 RDS服务:开通云数据库
阿里云计算服务实践

3.7 DDOS服务:基础防护默认开通,按需选择,一般会选择高防来保障核心业务的稳定
阿里云计算服务实践

4. 服务配置
4.1 DNS纪录解析:
DNS云解析服务-->创建A记录:
域名: yekangming.com
主机: mvp --> 值: 120.77.229.156(SLB)
主机: mvp-node01 --> 值: 120.76.232.8(ECS IP)
主机: mvp-node02 --> 值: 120.76.235.129(ECS IP)
阿里云计算服务实践

4.2 OSS上传图片并生成链接
阿里云计算服务实践

测试打开该地址可正常访问到图片
阿里云计算服务实践

4.3 ECS配置运行环境(在购买实例时可直接选择模板安装,可省略这一步)
wget http://nginx.org/download/nginx-1.15.5.tar.gz

wget http://distfiles.macports.org/openssl/openssl-1.0.2p.tar.gz

wget http://cn2.php.net/distributions/php-7.0.33.tar.gz

Nginx编译参数
./configure --prefix=/usr/local/nginx --with-openssl=../openssl-1.0.2p --with-http_ssl_module --with-http_v2_module 
配置完编译参数之后运行make,make install即可
PHP编译参数
./configure --prefix=/usr/local/php --enable-fpm --with-pdo-mysql --with-mysqli
配置完编译参数之后运行make,make install即可
4.4 ECS配置网页页面
在这里我使用的是nginx,配置监听80端口,并创建一个默认页面。
ECS A Nginx Config
 server {

        listen 80;

        server_name localhost;

        server_name mvp-node01.yekangming.com;

        location / {

            root           /data/webroot/mvp;

            index index.php index.html mvp.html;

        }

        location ~ \.php$ {

            root           /data/webroot/mvp;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /data/webroot/mvp$fastcgi_script_name;

            include        fastcgi_params;

        }

    }

    server {

        listen 80;

        server_name mvp.yekangming.com;

        location ~ \.php$ {

            root           /data/webroot/mvp;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /data/webroot/mvp$fastcgi_script_name;

            include        fastcgi_params;

        }

        location / {

            root /data/webroot/mvp;

            index index.htm mvp.html;

        }

     }


阿里云计算服务实践
ECS B Nginx Config
    server {

        listen 80;

        server_name localhost;

        server_name mvp-node02.yekangming.com;

        location / {

            root /data/webroot/mvp;

            index index.php index.html mvp.html;

        }

        location ~ \.php$ {

            root  /data/webroot/mvp;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /data/webroot/mvp$fastcgi_script_name;

            include        fastcgi_params;

        }

    }

    server {

        listen 80;

        server_name mvp.yekangming.com;

        location ~ \.php$ {

            root /data/webroot/mvp;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /data/webroot/mvp$fastcgi_script_name;

            include        fastcgi_params;

        }

        location / {

            root /data/webroot/mvp;

            index index.htm mvp.html;

        }

     }


阿里云计算服务实践
相关默认页HTML代码:

<h1> Aliyun MVP Site - Node02

</br>

</br>

</br>

<img src="https://sz-bucket-ykm-01.oss-cn-shenzhen.aliyuncs.com/aliyun.jpg?OSSAccessKeyId=LTAIqyMVuL4JpQaJ&Expires=10001545124135&Signature=bvySMu2mmSenKklxTdAlZhxYpFY%3D">



4.4 申请SSL证书提供HTTPS监听
阿里云计算服务实践
4.4.1 使用系统生成CSR 方式,系统将自动帮您生成证书私钥,并且在证书申请成功后可直接在证书管理列表中下载您的证书和私钥。
4.4.2 也可以自己生成 CSR(Certificate Signing Request)证书请求文件,并上传CSR,在证书申请成功后可直接在证书管理列表中下载您的证书。
4.4.3 如果是手工验证需要手动添加一条DNS TXT类型的解析记录进行验证。
阿里云计算服务实践阿里云计算服务实践

4.5 SLB负载均衡配置监听和调度策略
4.5.1 添加默认服务器组
在默认服务器组页面,点击添加,然后选择ECS两台实例添加到组里。
阿里云计算服务实践
阿里云计算服务实践
4.5.2 配置监听HTTPS 443端口
在监听页面,点击添加监听
阿里云计算服务实践
选择负载均衡协议为HTTPS,监听端口为443,调度算法为WRR加权论询
阿里云计算服务实践
选择证书为上一个步骤申请的SSL证书
阿里云计算服务实践

选择默认服务器组,配置端口为80,权重默认100
阿里云计算服务实践

默认启用监控检查,端口为默认
阿里云计算服务实践

提交创建该HTTPS 443端口的监听
阿里云计算服务实践
4.5.3 配置监听HTTP 80端口,重定向到HTTPS 443端口
添加监听配置,监听协议为HTTP,监听端口为80,开启监听转发,目的为上一个步骤配置的HTTPS 443端口。
阿里云计算服务实践
提交该HTTP监听配置
阿里云计算服务实践
HTTP和HTTPS的监听配置已经完成
阿里云计算服务实践
4.5.4 负载均衡调度检查
重定向检查:由http重定向到了https,状态码为301.
阿里云计算服务实践
轮询调度检查:每个节点的页面被调度的次数是一样的
阿里云计算服务实践
因为浏览器有缓存的原因可能会测试不到效果,可采用在CentOS上使用命令测试
while true ; do curl -l https://mvp.yekangming.com ; sleep 1 ; done
4.6 添加CDN为网站加速
4.6.1 在CDN的管理控制台中添加需要加速的域名,选择业务类型为小文件(按照业务场景),源站信息为IP(SLB IP),选择端口为443端口,加速区域为*。
阿里云计算服务实践
提交加速域名的配置
阿里云计算服务实践
等待CDN配置,CNAME的字段将会显示mvp.yekangming.com.w.kunlungr.com
阿里云计算服务实践

根据CDN控制台提供的CNAME进行配置,删除之前测试的主机为MVP的A记录,新建CNAME类型主机记录为mvp,记录值为mvp.yekangming.com.w.kunlungr.com。
阿里云计算服务实践
测试CNAME配置是否生效
阿里云计算服务实践

修改回源协议为HTTPS
阿里云计算服务实践
添加CDN链路为HTTPS,并选择云盾证书(之前申请的mvp.yekangming.com)
阿里云计算服务实践
管理台已经见到该域名配置的CDN加速已经生效,并且启用了HTTPS。
阿里云计算服务实践
4.6.2 验证CDN加速已经成功.
阿里云计算服务实践
为了演示只配置了静态资源加速,OSS未有配置,实际生产环境可配置(按照业务要求)。

4.7 添加应用防火墙WAF保障业务应用安全
4.7.1 新增添加网站
填写要保障安全的域名:mvp.yekangming.com ,协议类型选择HTTPS,服务器地址填写SLB的IP地址,端口选择443 HTTPS,因为WAF前有CDN加速服务,所以选择是,负载均衡算法选择IP HASH(按业务实际情况选择,一般会选择哈希用来持久化用户会话),因为无统计场景,无需填写流量标记Header。
阿里云计算服务实践
关于服务器地址:如果源站在阿里云,一般填写的为ECS的公网IP地址;当ECS前面有SLB时,则填写SLB的公网IP地址;
4.7.2 添加DNS解析记录将访问执行到WAF应用防火墙服务
成功创建网站配置后,Web应用防火墙为该域名生成一个专用的CNAME地址
阿里云计算服务实践
4.7.3 将CDN配置中的源站修改为应用防火墙WAF分配的CNAME地址
阿里云计算服务实践

回源设置下,确认回源Host未开启
阿里云计算服务实践

4.7.4 配置应用防火墙WAF SSL证书
阿里云计算服务实践
阿里云计算服务实践
DNS解析异常的原因是没有配置CNAME导致的,因为CDN和WAF联合部署不需要去配置WAF的CNAME记录在DNS中,在CDN的回源中已经配置WAF的地址。
因为用户流量经过CDN后会回源给WAF,WAF清洗流量后会响应给SLB负载均衡服务。

4.8 ECS及RDS数据配置连接
4.8.1 开启外网IP(按照业务情况选择,大部分情况是在VPC网络中)
阿里云计算服务实践

4.8.2 添加白名单
阿里云计算服务实践
4.8.3 在RDS上创建数据库
阿里云计算服务实践
4.8.4 添加数据库用户
阿里云计算服务实践

4.8.5 连接RDS MVP库中创建数据表

mysql>  create table account(user varchar(15),password varchar(16));
阿里云计算服务实践

插入模拟数据

mysql> insert into mvp.account values ('ykm','123456');
mysql> insert into mvp.account values ('carry','123456');
阿里云计算服务实践
4.8.6 创建登录页
index.html
<!DOCTYPE HTML>

<html>

	<head>

		<meta charset="utf-8">

		<title>SQL注入测试页面</title>

	</head>

	<body style="background-color: #000000">

		<h2 align="center" style="color: white">System Login</h2>

		<form align="center" action="login.php" method="post" enctype="multipart/form-data">

			<p style="width: 100%;height: 30px;display: block;line-height: 200px;text-align: center;color:white;font-size:16px;">账 号:<input type="text" name="user" value="" max="10"></p>

			<p style="width: 100%;height: 30px;display: block;line-height: 200px;text-align: center;color:white;font-size:16px;">密 码:<input type="password" name="pass" value="" min="6" max="16"></p>

			<p style="width: 100%;height: 30px;display: block;line-height: 200px;text-align: center;"><input type="submit" name="submit" value="登录"></p>

		</form>

	</body>

</html>


login.php
<?php

    $con=mysqli_connect("rm-wz9430u4t5im323309o.mysql.rds.aliyuncs.com","ykm","MVP-ykm-demo01","mvp");

    if(!$con) {

   	 die("error:".mysqli_connect_error());

    }

   $user=$_POST['user'];

   $pass=$_POST['pass'];

   $sql="select * from account where user='$user' and password='$pass'";


   $res=mysqli_query($con,$sql);


   $row=mysqli_fetch_array($res,MYSQLI_NUM);

   if(!is_null($row))

   {

	echo "Login successfully!<br> Welcome: $user";

   }

   else 

   {

	echo "Error, Account password mismatch.";

   }

?>



4.6.7 模拟登录测试,正常返回登录成功的信息。
模拟SQL注入的情况
账号填入:admin' and 1=1 --hack
即是将条件修改为正,--hack注释掉后面的代码。
阿里云计算服务实践
判断到SQL注入,访问被拦截。
阿里云计算服务实践
4.6.8 消息队列和弹性伸缩。
消息队列应用场景:
异步处理:比如在商城用户注册的场景。用户注册后需要发送邮件和短信的通知,可用过串或者并行的方式在注册后将通知发送给用户。
应用解耦:比如在商城下单后,下单的消息写入(生产)到消息队列中,对应的库存系统会获取(消费)该消息进行库存的扣减。
流量削锋:比如在商城的秒杀系统中,用户的请求将写入队列,由队列的消费端根据队列消息的顺序做处理,如果消费端已经确定秒杀系统已定于没有库存则直接丢弃全部消息并通知用户。
消息通讯:比如在商城促销活动通知中,用户对促销活动主题进行订阅。
弹性伸缩应用场景:
热点业务:比如某个促销活动访问量加大,需要按需自动化弹性伸缩、智能调度。


5. 个人建议
除了访问层(例如SLB、WAF)必须暴露在公网之外,如非业务特殊的需要时,各个服务间采用私网的方式进行连接,在高可安全要求下,可采用WAF应用防火墙、DDOS高防服务来保障业务的安全性,全站访问建议全部使用HTTPS(SSL加密),收紧安全组规则配置,按照最小化的方式进行管理配置。在高流量的环境下启用弹性伸缩服务进行应对。后期运维人员可依托云运维工具例如备份、监控等进行持续化的运维。


6. 总结
依托阿里云云计算产品提供了一系列基础服务,以更加安全、可靠的方式服务,大大的降低了企业运营成本,人力成本。在业务角度,不用再担心基础设施服务出现故障,在一个平台中即可管理全部的基础服务业务,主要核心重点更倾向于业务发展。