簡體   English   中英

AWS CDN + Lambda@Edge MimeType 問題

[英]AWS CDN + Lambda@Edge MimeType Issue

我最近一直在使用 AWS CDN + S3 存儲桶作為來源。

Origin Request中沒有附加 lambda@edge function 時,它工作正常,但我需要 lambda@edge fn 來重新路由。 一些 js 文件的 mimetype 不是text/javascript而不是text/html 任何的想法?

Lambda@edge function 只是一個簡單的重新路由,沒有特殊功能。

這是 function:

'use strict';

exports.handler = (evt, context, cb) => {
  const { request } = evt.Records[0].cf;

  const uriParts = request.uri.split("/")[1];

  const locales = ['en-US', 'ja', 'ms'];

  if (!uriParts || !locales.includes(uriParts)) {
    request.uri = '/en-US/index.html';
    return cb(null, request)
  }

  request.uri = `/${uriParts}/index.html`;
  
  console.log(`Request Uri: ${request.uri}`);

  cb(null, request);

}

示例響應圖像

設置:

S3 Bucket
  en-US/
    index.html
    <bunch of js files from angular>
  ja/
    index.html
    <bunch of js files from angular>
  ms/
    index.html
    <bunch of js files from angular>


CDN Distribution + Origin is the S3

解決了。 首先,我不好理解 Lambda@Edge function 的觸發器。請參閱這篇文章

第一次嘗試,我使用origin request作為 s 觸發器,並且以某種方式了解到我的情況不需要它。

經過一些調試和閱讀,這次我使用了viewer request 此外,將我的 Lambda@Edge function 更改為此。

'use strict';

const path = require("path");

exports.handler = async (evt,context,cb) => {
  const { request } = evt.Records[0].cf;

  console.log(`Original Uri: ${request.uri}`);

  const uriParts = request.uri.split("/");

  const locale = uriParts.length > 1 ? uriParts[1] : "";
  const locales = ["en-US", "ja", "ms"];

  if (locale === "" || locale === "index.html") {
    request.uri = "/en-US/index.html";
    return cb(null, request);
  }

  if (!locales.includes(locale)) return cb(null, request);

  const lastPartUrl = uriParts[uriParts.length - 1];
  const fileExt = path.extname(lastPartUrl);

  if (!fileExt) request.uri = `/${locale}/index.html`;

  console.log(`New Uri: ${request.uri}`);
  return cb(null, request);
};

現在我們應用程序中的每個locale都可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM