热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

传统cdn与云cdn_从CDN提供私人内容

传统cdn与云cdnAmazonWebServices是一个云服务平台,可按需提供内容交付,数据库存储以及许多其他功能和基础架构,以帮助企

传统cdn与云cdn

Amazon Web Services是一个云服务平台,可按需提供内容交付,数据库存储以及许多其他功能和基础架构,以帮助企业采用“按需付费”的定价方法进行扩展和发展。

Amazon CDN是AWS的主要组成部分,目的是加快向全球用户分发静态或动态Web内容的速度。

例如:假设您在美国地区托管了您的网站。 并且,如果来自澳大利亚的某些用户试图访问您的网站,则路由通​​常会转到美国,并向您的用户接收内容。 如果您的用户再次访问该内容,该过程将花费一些时间来交付您的内容,这意味着高延迟。

对于此问题,amazon CDN提供将您的网站缓存在最近的边缘位置,并使用该边缘位置将内容交付给您在澳大利亚境内的用户。 在发送之前,它将与原始内容同步并向您发送最新详细信息。 这样,将需要较低的延迟。

但是,每个网站并不与用户共享所有内容。 有供付费用户使用的网站,或者有一些在订阅用户之间共享的私人内容。 还有一些公司通过互联网分发内容,这些内容限制了访问权限,例如业务数据,媒体流。

我们如何仅在成千上万的用户中共享私有内容给指定的用户?

例如,如果您的应用程序需要订阅,则意味着可以从Amazon CDN的私有内容功能中实现您的网站中只有私有内容在被订阅成员之间共享。 它将确保只有经过身份验证的用户才能访问并阻止其他用户访问您的私人内容。

使用签名的网址和签名的COOKIE访问私有内容。

签名的乌尔斯

Signed Urls是一个URL,其中包含私有内容中每个文件的信息,例如到期日期,密钥对ID和签名。 提到的数据将包含在我们发送的URL中。

Urls签名的工作方式,

在CDN分发中指定可以访问内容的受信任的签名者。开发应用程序后,为了访问您的内容,它将为受限制的应用程序对象或部分创建签名的URL。当用户请求文件时,然后,应用程序验证用户。验证后,应用程序创建并向用户返回签名的url。然后,可以将限制的数据访问给指定的用户。CDN使用公共密钥来验证签名并确认Url是否有效。 如果签名无效,则请求将被拒绝。

签名曲奇

CDN签名的COOKIE允许您控制您的私人数据,并将其分配到您要共享的用户中。 签名的COOKIE可以用于访问多个受限制的文件,而无需指定URL。

签名COOKIE的工作方式,

在CDN发行版中,我们指定了受信任的签名者以便对其进行访问。在开发应用程序之后,为了访问您的内容,我们必须向查看者(用户)发送三个set-COOKIE标头。 它们是CloudFront-Key-pair-id,CloudFront-SignatureCloudFront-Policy 。 在查看者请求之前,我们必须将set-COOKIE标头发送给用户。用户将访问您的私人内容(订阅者)。

我们的应用程序在响应中将set-COOKIE标头返回给用户,然后用户请求一个对象。在请求标头中,CDN在已签名的COOKIE中获取签名,然后使用之前在根帐户中创建的公钥对其进行验证。 使用密钥验证后,如果请求有效,它将检查策略,该策略将检查到期日期和其他选项。 然后它将访问用户请求的内容。

首先,有一些先决条件

在S3存储桶或自定义来源中托管的AWS AccountStatic Web托管lambda函数(API网关)

请注意,如果您使用AWS的免费套餐帐户,则成本将为零。 如果没有,您可以在给定的链接中参考CDN的价格,并且执行这些步骤不会涉及其他成本。 https://aws.amazon.com/cloudfront/pricing/

步骤1:创建CloudFront密钥对

从您的ROOT帐户登录

转到右上方的“用户”选项卡>选择“我的安全证书”>“ CloudFront密钥对”>“创建新密钥对”。

创建密钥对后,下载密钥对。 并且您可以在屏幕上找到“密钥对ID”作为访问密钥ID。 并在您下载的文件名中。

注意:您的根帐户中只能有一个密钥对,请确保在同一根帐户中没有创建多个活动密钥对。

步骤2:建立CDN发行版本

确保在“对象缓存”中选择“自定义”,然后为所有值输入0,然后浏览器将避免缓存任何COOKIE值,因为每次访问时您都会提供不同的COOKIE值,因此,即使缓存是CDN的主要原因,在这一点上这将是没有用的。 并选择“是”以限制查看者访问,因为这是使用签名COOKIE / URL的目的,以实现安全的内容分发。 出于测试目的,启用了所有COOKIE以及查询字符串转发和缓存。

现在,在CDN中创建私有内容之后,我们有两种访问内容的方法。

签名URL签名COOKIE

签名的URL和COOKIEs提供相同的基本功能,可让您控制私人内容。

固定政策和自定义政策

罐头策略是一种预先编写的策略,与自定义策略相比,其可控性较低。 下面的矩阵在AWS文档中提供。

步骤3.1 —使用签名的URL

您可以在带有所需模块的lambda函数中使用以下代码,以获取内容的签名URL。

1.包括“ aws-cloudfront-sign”模块。

2.输入您的私钥或pk-APXXXXXXXXXXXXX.pem文件

3.在选项中,定义密钥对ID,到期时间

4.输入您要限制的特定内容的cloudfront URL

var cf = require ( 'aws-cloudfront-sign' );
var privateKeyString = ` - - -BEGIN RSA PRIVATE KEY - - -
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX- - -END RSA PRIVATE KEY - - -` ;
var options = { keypairId : 'APXXXXXXXXXXXXXXXXX' , privateKeyString : privateKeyString, expireTime : new Date ().getTime() + 18000 }
exports.handler = ( event, context, callback ) => {const done = ( err, res ) => callback( null , {statusCode : err ? '400' : '200' ,body : err ? err.message : res,headers : {'Content-Type' : 'application/json' ,},});
var signedUrl = cf.getSignedUrl( 'http://xxxxxxxx.cloudfront.net/path/to/object' , options);
context.done( null , signedUrl);
};

步骤3.2 —签名的COOKIE

包括“ aws-cloudfront-sign”模块输入私钥或包括pk-APXXXXXXXXXXXXXXXX.pem文件在选项中,定义密钥对ID,到期时间输入cloudfront Url作为通配符。

var cf = require ( 'aws-cloudfront-sign' );
var privateKeyString = ` - - -BEGIN RSA PRIVATE KEY - - -
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX- - -END RSA PRIVATE KEY - - -` ;
var options = { keypairId : 'APXXXXXXXXXXXXXXXXX' , privateKeyString : privateKeyString, expireTime : new Date ().getTime() + 18000 }
exports.handler = ( event, context, callback ) => {const done = ( err, res ) => callback( null , {statusCode : err ? '400' : '200' ,body : err ? err.message : res,headers : {'Content-Type' : 'application/json' ,},});
var signedCOOKIEs = cf.getSignedCOOKIEs( 'http://xxxxxxxx.cloudfront.net/*, options);
context.done(null, signedCOOKIEs);
};

请参阅文档以了解进一步的更改,例如更改为自定义策略

http://docs.aws.amazon.com/AWSJavascriptSDK/latest/AWS/CloudFront/Signer.html

如果遇到错误,则在测试lambda函数时找不到模块,请包括节点模块。

https://github.com/jasonsims/aws-cloudfront-sign


1.在计算机上安装Node

2.创建一个文件夹,并在该文件夹内创建一个package.json文件

3.创建一个index.js文件,并在文件中的签名url或签名的COOKIE代码上方输入

4.安装aws-cloudfront-sign模块

5.压缩项目并在代码输入类型>上载zip文件下上载到lambda函数。

结论

希望这可以帮助您创建私人内容,并与Signed COOKIEs和Signed Urls一起提供。 对于签名的COOKIE,没有适当的教程来帮助您举例。 如果有任何问题,可以在下面发表评论。

翻译自: https://hackernoon.com/serving-private-content-from-cdn-f02eo3x78

传统cdn与云cdn



推荐阅读
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • EST:西湖大学鞠峰组污水厂病原菌与土著反硝化细菌是多重抗生素耐药基因的活跃表达者...
    点击蓝字关注我们编译:祝新宇校稿:鞠峰、袁凌论文ID原名:PathogenicandIndigenousDenitrifyingBacte ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本文通过思维导图的形式,深入解析了大型网站技术架构的核心原理与实际案例。首先,探讨了大型网站架构的演化过程,从单体应用到分布式系统的转变,以及各阶段的关键技术和挑战。接着,详细分析了常见的大型网站架构模式,包括负载均衡、缓存机制、数据库设计等,并结合具体案例进行说明。这些内容不仅有助于理解大型网站的技术实现,还能为实际项目提供宝贵的参考。 ... [详细]
author-avatar
神秘的绝代双角
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有