回答:
それは現在不可能です。それについての議論のためにhttps://forums.aws.amazon.com/thread.jspa?threadID=162252を見てください。
編集:Lambda @ Edgeによって可能になりました。以下を参照してください。
これに関する更新...
Lambda @ edge関数を介してHTTP応答ヘッダーをカスタマイズできるようになりました。ドキュメントについては、http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.htmlを参照してください。これを試すには、AWSコンソールで新しいラムダ関数を作成します。言語として「Edge Nodge.js 4.3」を選択し、cloudfront-modify-response-headerテンプレートを探します。これを行うと、Lambdaは関数を適用するCloudFrontディストリビューションとイベントを尋ねます。Cloudfrontの動作タブに移動することで、いつでもこれを編集または変更できることに注意してください。
ここにラムダ関数の例があります...
'use strict';
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
response.headers['Strict-Transport-Security'] = 'max-age=2592000; includeSubDomains';
callback(null, response);
};
アンドリューの答えに追加するには:
私はこれといくつかのメモを試しました:特定のエッジnodejsランタイムはなくなりましたが、ラムダはバージニア北部リージョンで作成され、cloudfront origin-responseまたはviewer-responseによってトリガーされる必要があります。
箱から出したコードはもう機能していないようです。ERR_CONTENT_DECODING_FAILEDになります。
解決策は、json構文を次のように使用することです。
response.headers['Strict-Transport-Security'] = [ { key: 'Strict-Transport-Security', value: "max-age=31536000; includeSubdomains; preload" } ];
response.headers['X-Content-Type-Options'] = [ { key: 'X-Content-Type-Options', value: "nosniff" } ];
正解です。Lambda@ Edgeは一般に利用可能であるため、バージニア北部に限定されており、ノード4.3ではなくノード6.10を選択する必要があります。
以下のコードの関連部分(この目的のため、これは常に302パーマネントリダイレクトになります):
'use strict';
exports.handler = (event, context, callback) => {
var request = event.Records[0].cf.request;
const response = {
status: '302',
statusDescription: '302 Found',
httpVersion: request.httpVersion,
headers: {
Location: [
{
"key":"Location",
"value":"someURL"
}
],
'Strict-Transport-Security': [
{
"key":"Strict-Transport-Security",
"value":'max-age=63072000; includeSubDomains; preload'
}
],
},
};
callback(null, response);
};
CloudFrontで異なる動作を構成することにより、どのリクエストがLambda関数を呼び出すかを制限できます。