首页 文章 精选 留言 我的

精选列表

搜索[热点技术征文第九期],共10010篇文章
优秀的个人博客,低调大师

【AWS征文】如何利用 AWS CloudFront 给您的站点全站安全加速

如何给你的站点加速,如何做到静态资源动态资源同时加速,本文将详细为你介绍 AWS CloudFront,并且如何利用 CloudFront 为您的站点加速,以及使用 CloudFront 的注意事项。 CloudFront 是什么 现在越来越多的产品开始走出国内,迈向全球。现在移动互联网越来越火热,大家都是通过官方网站去浏览产品的特性,那么我们就需要为产品建立一个全球化的网站,把产品介绍推送给全球用户。那么如何才可以让全球的用户以最快的速度打开站点呢?我们知道,全球的网络传输依托于光纤,而光的速度是不变的,距离服务器越远的用户延迟注定会越高,经过的路由也会越多多,速度也会越慢。 如何克服困难,给用户一个好的体验,AWS 云服务中哪个产品可以帮助我们实现?我们需要了解一下 AWS CloudFront,CloudFront 是什么,拥有什么功能,相比于其他的 CDN 服务,又有什么优势呢,我们后面一一解答。 CloudFront 是 AWS 推出的 CDN 服务,可以对网站资源进行缓存加速。我们通常理解的 CDN 就是对静态资源加速,静态资源会分发到 AWS 全球的边缘节点,用户就近访问所需要的资源。那么针对动态资源怎么办?这个我们也不用担心,AWS 拥有非常庞大的基础设施,利用这些基础设施,CloudFront 同样可以对动态资源加速,比如我们的 PHP、ASP 等动态资源。这里的加速并不是把这些资源分发的全球,而是让用户的流量最快进入 AWS 的骨干网。骨干网依托于 AWS 的基础设施,骨干网由 AWS 自己维护,拥有高速带宽,智能路由,AWS 会制定最优的路由策略,让用户的请求最快稳定的到达源站。 那么废话不多说,我们下面看看如何设定,让我们的站点推向全球吧。 准备站点 我这次以一个 wordpress 站点做演示,我们不需要破坏站点的任何结构,就可以实现全站加速,静态资源缓存到全球边缘节点,请求动态资源通过 AWS 骨干网动态路由到源站。 CloudFront 虽然说可以加速第三方站点,但是为了最好的效果,非常推荐把站点放在 AWS 的服务中,这次我们把站点放置在 EC2 上面进行测试。 我 EC2 的系统是 Amazon Linux 2,环境是用 LNMP 一键安装包创建的,关于 LNMP 的使用方式我这里不再介绍,一台 EC2 可以部署多个虚拟主机网站,默认我们的 EC2 只提供 HTTP 的服务,如果需要 HTTPS 的话,那我们把证书挂载 ALB 或者 CloudFront。 我们从最开始指导大家如何一步步操作,最终配置完成 CloudFront 实现全站加速。 查看默认站点 默认域名是直接解析到 EC2 的,使用的是 HTTP 请求访问,我们查看一下效果。 配置 ALB 启用 HTTPS 虽然说 CloudFront 可以直接为网站加速,但是那需要我们准备两个域名,一个加速域名,一个源站域名,弄起来比较复杂,我们借助 ALB 中间这个工具,只负责一个域名就可以了,管理起来非常简单,关于 ALB 的配置,我这里也不再介绍,大家看我配置好的效果吧。 当我们使用 HTTPS 访问的时候,发现很多连接都被浏览器 blocked 掉了,那么这是为什么呢? 我们首先就是要解决这个 HTTPS 的问题,不然使用 CloudFront 会有同样的问题,我们首先了解一下目前的架构情况。 虽然用户使用的 HTTPS 发起请求,但是在经过 ALB 之后,转换成 HTTP 请求源站的 wordpress,wordpress 其实并不知道用户使用的 HTTPS 请求的,发现过来的请求是 HTTP,于是 wordpress 构建的 document 里面嵌入的是 HTTP 的资源链接,返回给浏览器之后,浏览器因为一些安全的设定,会 blocked 这些 HTTP 的资源请求,这也就导致了我们的站点不能正常展示,顺便说一下,我使用的是 Chrome 浏览器,其他浏览器是否会 blocked 大家可以去试一下。 那么如何解决这个问题呢?打个不恰当的比如,我们要“欺骗” wordpress,让它认为我们是用 HTTPS 请求的,其实也就是给 wordpress 做个设置,不管用户使用什么协议请求,都给客户端返回 HTTPS,那么我们需要给 wordpress 的配置文件wp-config.php增加下面一段内容。 if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on'; 然后我们再次请求,看到 HTTPS 已经可以正常访问。 配置 CloudFront 创建 Distribution 打开 CloudFront 控制台,创建一个 WEB Distribution,因为很多小伙伴并不清楚站点的结构,不知道哪些目录是静态资源,哪些目录是动态资源,如果默认直接都缓存的话,那会产生很多问题,比如无法登陆,无法提交信息等。所以我们换个思路去操作,那就是我们先全站动态加速,不进行任何缓存,然后再去检查哪些目录是静态文件,在设置规则,对这些目录的文件进行缓存,初次创建,那大家就按照我下面的参数设置吧。 注意:表格里面没有写的,选择默认即可。 Parameter Value Origin Domain Name AuroraMigrationTask Origin Protocol Policy HTTP Only Allowed HTTP Methods GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE Cache Based on Selected Request Headers All Forward Cookies All Query String Forwarding and Caching Forward all, cache based on all Alternate Domain Names wp.wzlinux.com SSL Certificate Custom SSL Certificate,域名证书在 us-east-1 区域申请 查看效果 然后我们创建分发,在修改域名解析之前,我们测试一下站点现在全球的延时情况,目前网站所在区域为爱尔兰。 可以看到除了欧洲区域,其他地域延迟都比较高,现在我们修改域名解析指向 CloudFront Domain Name,然后再测试一下延迟情况。 使用 CDN 之后,我们可以看到海外的延迟明显降了下来,因为大陆防火墙的原因,下降没有那么明显,不过也比之前好多了。 我们继续浏览器访问一下,又发现了很多链接没有返回 https,所以被 blocked 了,这是为什么,我们继续分析一下现在的架构图。 前面用户访问 ALB 使用的 HTTPS,用户的请求协议其实透过请求头通过 ALB 传递到了后端服务器,现在访问 ALB 变成了 HTTP,虽然用户访问 CDN 使用的 HTTPS,CloudFront 没有把请求头没有传到后端,所以后端一直以为是用 HTTP 访问的,导致返回的链接被浏览器 blocked。那这种情况该怎么办呢?既然请求协议没有传递到后端,那我们可以在 CloudFront 上面添加请求头X-Forwarded-Proto。 打开我们创建好的 distribute,选择 Origins and Origin Groups,编辑添加 Origin Custom Headers。 等待生效,本以为这样就可以了,但是还是不行,后来了解到 ALB 会更换请求头X-Forwarded-Proto,因为 ALB 看到 CloudFront 使用的 HTTP 请求的,所以即便我们在 CloudFront 上面添加请求头,也是会被 ALB 重置,那么我们只有从 wordpress 上面去下手解决问题了。 应该还记得我们前面对 wordpress 添加的一个配置,里面有一个 if 判断条件,我们可以去掉这个条件,让 wordpress 不管用户使用什么请求,都返回给用户 HTTPS 的链接。那我们就这样做,把之前的配置修改如下: $_SERVER['HTTPS']='on'; 因为我们是全站动态加速,所以看到缓存结果没有命中,这是正常的,那下面我们来针对站点进行缓存优化,毕竟不进行缓存,那 CDN 和咸鱼又有什么区别呢? 优化缓存 我们打开开发者模式,多访问几个页面,查看一下静态资源都在什么路径下面,比如我找到的几个静态资源URL 地址如下: https://wp.wzlinux.com/wp-content/uploads/2020/07/mp53182456_1452216795463_2.jpeg https://wp.wzlinux.com/wp-includes/css/dist/block-library/style.min.css?ver=5.4.2 https://wp.wzlinux.com/wp-includes/js/wp-embed.min.js?ver=5.4.2 https://wp.wzlinux.com/wp-content/themes/twentytwenty/style.css?ver=1.2 https://wp.wzlinux.com/wp-content/themes/twentytwenty/assets/js/index.js?ver=1.2 你们找到的 URL 可能比我多,不同的主题 URL 会有些不同,我们就拿着几个为例子进行设置一下,可以大胆一点,我们对整个目录进行缓存,我们整理的路径有如下几个。 wp-content/uploads/* wp-includes/css/* wp-includes/js/* wp-content/themes/twentytwenty/* 如果有什么问题,我们可以再针对具体情况调整,那下面我们就开始优化缓存吧。 打开 Distribution,选择创建 Behaviors,把上面的路径填写在 Path Pattern 里面,因为我们后端服务是虚拟主机,需要我们把 Host 这个 Request Header 传递过去,加入白名单中,其他选择默认即可: 按照这样的模式,我们把其他几个路径也填写好。 然后我们再去请求站点,查看我们进行缓存的一些文件是否缓存命中。 目前看来一切正常了,大家可以慢慢完善需要缓存的内容。还等什么,给你的站点去做全站加速吧! 注意:因为我们开启了 HTTPS 访问,所以遇到了一些问题,本文一一解释了问题的原因以及如何解决办法,如果你不需要 HTTPS,那整个过程会更加简单。 欢迎大家扫码关注,获取更多信息

优秀的个人博客,低调大师

邀您参与阿里云MaxCompute2.0最佳实践征文活动

DT时代,越来越多的企业应用数据步入云端。与传统Hadoop相比,阿里云大数据计算服务MaxCompute(原名ODPS)向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。 最新推出的MaxCompute 2.0,在高性能方面主要依托于全新的SQL 2.0计算引擎。同时,基于MaxCompute2.0新一代的SQL引擎,MaxCompute显著提升了SQL语言编译过程的易用性与语言的表达能力。在新功能方面提供了非结构化的处理能力,在云上开始使用OSS(开放的对象存储)、OTS(开放的表格存储),MaxCompute对其进一步分析和计算提供了连接性。安全方面,提供了Label字段级别数据访问控制及数据脱敏。用量控制方面,推出了禁止全表扫描FullScan

优秀的个人博客,低调大师

热点】微信的消息收发机制

微信可能是国内最早一批做微服务架构体系的,毕竟微服务的理念与腾讯一直倡导的“大系统小做”有很多相通之处,当然微信的功能有很多,衣食住行都能找到入口。我们今天单说它的原生功能:即时通信。 这块内容本座想分两部分来讲,第一部分是点到点聊天,第二部分是群组聊天。这两种聊天模式有共同点,比如说已读信息不会在服务端保留,因此换新手机是找不到历史消息的。也有不同点,比如服务端的架构和数据流等等。 先说点到点聊天,手机端通过打开微信软件建立了到腾讯云的微信网关,当然考虑到就近访问与负载平衡,不同客户端可能连到不同的网关。当A用户通过网关B发送微信给在线用户B时,会话微服务会记录当前所有用户的连入信息,维护如下的用户-网关表: 用户 网关A BB CC C 如果对端用户不在线,则会记录上次连接的网关,如果从来没在线过则随机分配网关。这张表虽然有高达10亿的记录(微信用户数量),但好在只是一张二维表而且可做冷热分离,因此存储量并不大,然后各个网关上会有热数据的分布式缓存。 为什么要这样做呢,因为我们知道让一台网关服务器来维持每一个客户端的TCP连接是非常消耗内存的,鉴于微信用户的数量,一般硬件的性能是无法达到的,因此通过会话微服务来记录这些信息可以很好地为网关减负。 接下来当消息进入到会话微服务找到B对应的网关,然后通过该网关将消息传递给B用户。 等等,什么,网关在没有用户请求的情况下还能直接给用户发消息,这是我认识的CS架构么?当然通过长轮询(Long Polling)可以定期从服务端拉数据,但这就影响了消息的实时性了。传统的HTTP看似无法实现了,我们想到的办法是WebSocket(WSS)。WSS是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议。它允许用户和服务器之间的流连接,并允许即时信息交换。 Ok,消息传递到在线用户B了,B用户回复给服务器“已收到”的回执(不论已读还是未读),会话服务器再以WSS形式将回执转发给A。当然如果B用户离线,消息会存放在消息数据库中直到过期(三天?)。因此点对点聊天在服务器上并不消耗太多的存储资源。 接下去我们说说群组消息,当会话微服务识别到消息的接收方是一个群组时,会去调用群组微服务,群组微服务的表结构是一张一对多的分布式数据表: 群组ID 用户XXX AXXX BXXX CYYY CYYY DYYY E 得到目标群的用户列表后,会话微服务再查询自己的会话数据库找到用户对应的网关,通过WebSocket的形式发送给该群组的所有成员。 当然就像新浪在李晨发“我们”,鹿晗发“官宣”,中国国家男子足球队发“对不起”的时候会发生服务器宕机现象,新浪的处理方式是将粉丝群切片,分批次发给不同子群。微信也会在成员过多的群通过异步的消息队列进行批量组播,但即便如此,与点到点微信不同的是,网关的负担会大很多,因此除了将会话微服务从网关上拆解,还需要进一步将验证服务、语义分析服务(各种网络协议的解包)从网关服务器上拆解下来,由此就形成了微信的群族消息的数据流。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册