javascript - 从 AWS lambda@edge 访问原始 URL

标签 javascript node.js aws-lambda amazon-cloudfront aws-lambda-edge

我正在尝试在 AWS Cloudfront 上使用 lambda@edge 为多个网站实现“代理”。

我的设置大致是:

DNS:*.domain.com -> some_uuid.cloudfront.net(云端分发)

Cloudfront:some_uuid.cloudfront.net -> s3 存储桶源

s3 bucket: websites/(包含多个网站的文件夹)

lambda@edge 函数:定义为 origin-request

我的 lambda@edge 函数非常简单:

  1. 检查网站资源是否存在于s3 bucket中。

  2. 如果是,请将请求 uri 更改为资源 s3 url。

  3. 如果没有,向后端服务器发送请求以呈现资源,存储在 s3 上并返回。

我在获取网站的原始域时遇到问题。例如,如果我尝试访问“my_website.domain.com”——在我的 lambda 函数中,我没有来自请求的域信息。

我认为我可以实现另一个 lambda@edge 函数作为查看器请求以将域作为 header 传递,但如果可以的话,我宁愿避免这种情况。

还有其他解决办法吗?

谢谢

最佳答案

这里的主要问题是 Cloudfront 覆盖了对原始主机的请求中的主机 header 。 我能够通过结合使用 viewer-request L@E 和 origin-request L@E 来解决这个问题。

在查看器请求 L@E 中,将主机 header 复制到另一个 header 中,例如 x-forwarded-host。

// viewer-request.js
exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request
    request.headers['x-forwarded-host'] = [
      { key: 'X-Forwarded-Host', value: request.headers.host[0].value }
    ]
    return callback(null, request)
}

将您的云端配置为在行为中将 x-forwarded-host 主机 header 列入白名单。 这样,Cloudfront 在缓存时也会考虑 x-forwarded-host,并将 header 传递给 origin-request lambda

现在在您的原始请求 lambda 中,您可以访问 x-forwarded-host header

// origin-request.js
exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;
    const headers = request.headers;
    const requestHost = headers['x-forwarded-host'][0].value;
    console.log(requestHost);
    callback(null, request);
}

关于javascript - 从 AWS lambda@edge 访问原始 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47817019/

相关文章:

node.js - 如何获取目录中文件的总大小?

node.js - 将 autoprefixer 脚本添加到react-create-app项目中

node.js - TFS 上的 Node 构建问题

amazon-web-services - AWS Cloudwatch 事件 - 如何针对不同的时区触发?

Javascript - 获取一行中的最后一个词

javascript - postcss 正在处理/css/app.css 并在导入 vue2-daterange-picker 后抛出 CssSyntaxError

javascript - 为什么我的待办事项功能不起作用?

amazon-web-services - 如何从命令行将 lambda 代码下载/拉到本地机器?

django - 在 AWS Lambda 函数中使用 Django ORM

javascript函数意见