阿里云计算服务实践

  1. 云栖社区>
  2. 博客>
  3. 正文

阿里云计算服务实践

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

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

3.2 CDN服务: 开通CDN服务、购买流量包(http和https 按照业务实际需求)
7dda697ee13904f95d799c08c3adc779ebe0543e

3.3 SLB服务:开通SLB服务(注意需与ECS实例在相同可用区)
cfd8067011af88e8590ac69cb93dfb67525f0428
becef48ed56703416d850284bcf500da40e96617

3.4 ECS服务:开通ECS服务(注意需与SLB实例在相同可用区)
bddf7a4c0d5dd4803c2225083b95351977607aab

3.5 SSL服务:购买SSL证书服务
0f3b1b926b82e279f7c6a6cee8880f9c485794b4

3.6 RDS服务:开通云数据库
bbacae47e9097c8429ebdf058e88bf9a05297bdf

3.7 DDOS服务:基础防护默认开通,按需选择,一般会选择高防来保障核心业务的稳定
24d9d84338b3c6729d6a6832369f264be1dc2cbf

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)
3bf6461ff7be6e296b88112b275e50002787aa7f

4.2 OSS上传图片并生成链接
ac65ae7ed6ed51a8632615d909653f32e46834bd

测试打开该地址可正常访问到图片
9b8650daae8c974e3bd3f81009a36b150176cf37

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;

        }

     }


c56dae57a173182aa3dbda9d89d399fcd64b2ac2
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;

        }

     }


86de768a5dafde5c25ce44e920710c22025802b0
相关默认页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监听
b85f266b214d93fe553222a1938c5b80f75da645
4.4.1 使用系统生成CSR 方式,系统将自动帮您生成证书私钥,并且在证书申请成功后可直接在证书管理列表中下载您的证书和私钥。
4.4.2 也可以自己生成 CSR(Certificate Signing Request)证书请求文件,并上传CSR,在证书申请成功后可直接在证书管理列表中下载您的证书。
4.4.3 如果是手工验证需要手动添加一条DNS TXT类型的解析记录进行验证。
96d90196c5c8d19cab668bf19784a528a23ef141253d7a68c020881e833a22929082d5e8a3c43a8a

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

选择默认服务器组,配置端口为80,权重默认100
91bca002f709eaf1303b21b5e3fb01ccba419585

默认启用监控检查,端口为默认
e6a1ae0a90afc85eb7bcfce3628a5ede8dd61cac

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

根据CDN控制台提供的CNAME进行配置,删除之前测试的主机为MVP的A记录,新建CNAME类型主机记录为mvp,记录值为mvp.yekangming.com.w.kunlungr.com。
8ba46fb85ef0e02e375e8b4e2a48e4a19ee14057
测试CNAME配置是否生效
a6d24a6f3062c2b6a6de959dbce8a97854e94cd9

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

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

回源设置下,确认回源Host未开启
022211d613695880d2660aebe79d76a2a7f604c6

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

4.8 ECS及RDS数据配置连接
4.8.1 开启外网IP(按照业务情况选择,大部分情况是在VPC网络中)
ef97bfdc9f4e173a844de8acab6e987f75c628aa

4.8.2 添加白名单
f7b8d0928b2e2aa5d380cd65e09b001714f882f0
4.8.3 在RDS上创建数据库
ab8b76f32178138881f6654c25558af343cb36ff
4.8.4 添加数据库用户
09d282df6f5dbfe0e70026e3ec1add3a68ad110b

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

mysql>  create table account(user varchar(15),password varchar(16));
2f570dab29b77db3f5feea50f3ce80bdba5c1db8

插入模拟数据

mysql> insert into mvp.account values ('ykm','123456');
mysql> insert into mvp.account values ('carry','123456');
bdb8f5656b6aee81250266deb957b7c491dba466
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注释掉后面的代码。
87213955b39a07a13eda7f2a4e4355983d3c6482
判断到SQL注入,访问被拦截。
286cc2dd9b2ea3dc62a78b6843b0f3a35113aeef
4.6.8 消息队列和弹性伸缩。
消息队列应用场景:
异步处理:比如在商城用户注册的场景。用户注册后需要发送邮件和短信的通知,可用过串或者并行的方式在注册后将通知发送给用户。
应用解耦:比如在商城下单后,下单的消息写入(生产)到消息队列中,对应的库存系统会获取(消费)该消息进行库存的扣减。
流量削锋:比如在商城的秒杀系统中,用户的请求将写入队列,由队列的消费端根据队列消息的顺序做处理,如果消费端已经确定秒杀系统已定于没有库存则直接丢弃全部消息并通知用户。
消息通讯:比如在商城促销活动通知中,用户对促销活动主题进行订阅。
弹性伸缩应用场景:
热点业务:比如某个促销活动访问量加大,需要按需自动化弹性伸缩、智能调度。


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


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

网友评论

登录后评论
0/500
评论
叶康铭
+ 关注