Url rewriting 使用重写cloudfront源主机lambda@edge怎么样?

Url rewriting 使用重写cloudfront源主机lambda@edge怎么样?,url-rewriting,amazon-cloudfront,aws-lambda-edge,Url Rewriting,Amazon Cloudfront,Aws Lambda Edge,我看到人们在谈论如何基于各种信息重写URI。但是我想对被请求的域名进行规范化。以下是我尝试过的: exports.handler = (event, context, callback) => { const request = event.Records[0].cf.request; if (request.method.toUpperCase() != 'GET') { callback(null, request); return;

我看到人们在谈论如何基于各种信息重写URI。但是我想对被请求的域名进行规范化。以下是我尝试过的:

exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;

    if (request.method.toUpperCase() != 'GET') {
        callback(null, request);
        return;
    }

    request.origin = {
        custom: {
            domainName: 'slashdot.org',
            port: 443,
            protocol: 'https',
            path: request.uri
        }
    };
    request.headers.host = {
        "key": "Host",
        "value": request.origin.custom.domainName
    };

    console.log("returning req:", request);

    callback(null, request);
}
我希望这会启动请求,然后cloudfront会针对我的规范化域发出请求。(对于示例和测试,我使用的是slashdot,因为它显然不是我的内容)


最终,我试图规范化一个请求,而不做重定向,而是在命中源代码之前重写请求。

哦,太好了。我终于想出了办法。首先,一些限制:

  • 对于https,这仅适用于证书下的域。所以我不能使用
    mydomain.com
    slashdot.org
    ,除非我是。很好,我的AWS证书包括三个域,其中一个是我的实际域。我将在下面称之为actualdomain.com
  • 不能对查看器请求执行此操作,只能对原始请求执行此操作
有鉴于此,我使用了“”并做了一些小的修改。这是完整的Lambda代码

'use strict';

exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;
    const destDomain = 'actualdomain.com';


    /* Set custom origin fields*/
    request.origin = {
        custom: {
            domainName: destDomain,
            port: 443,
            protocol: 'https',
            path: '',
            sslProtocols: ['TLSv1', 'TLSv1.1', 'TLSv1.2'],
            readTimeout: 5,
            keepaliveTimeout: 5,
            customHeaders: {}
        }
    };
    request.headers['host'] = [{ key: 'host', value: destDomain}];

    callback(null, request);
};

因此,与文档中给出的示例类似,
destDomain
是实际域,我的证书中的任何合法域都是该dest的代理,最终用户实际上看不到
actualdomain.com

您不应该针对任何其他人的站点进行测试,因为除了礼仪方面,他们可能有刮擦保护或其他反滥用机制,导致网站在这种情况下出现意外行为。这对你不起作用吗?不,不起作用。我无法重写请求。主机标题花费了我2个小时…谢谢!我在主机标题上损失了一天。非常感谢分享这个。