[英]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.