Javascript Node.js:Express为CloudFront设置“信任代理”

Javascript Node.js:Express为CloudFront设置“信任代理”,javascript,node.js,amazon-web-services,express,amazon-cloudfront,Javascript,Node.js,Amazon Web Services,Express,Amazon Cloudfront,我有一个后端。如何正确设置AWS云端: app.set('trust proxy', function (ip) { if ( ???????????? ) return true; // trusted IPs else return false; }); AWS Cloudfront使用了大量的ip地址,因此验证所有AWS ip地址是不安全的,因为任何拥有AWS EC2实例的人都拥有有效的ip。问题出在哪里 正如您所提到的,AWS CloudFront使用了一长串IP地址范围。有人

我有一个后端。如何正确设置AWS云端:

app.set('trust proxy', function (ip) {
  if ( ???????????? ) return true; // trusted IPs
  else return false;
});
AWS Cloudfront使用了大量的ip地址,因此验证所有AWS ip地址是不安全的,因为任何拥有AWS EC2实例的人都拥有有效的ip。

问题出在哪里 正如您所提到的,AWS CloudFront使用了一长串IP地址范围。有人提到过。您可以通过这一行代码看到它们,需要jq,您可以从MacOs中的brew获得jq:

卷曲'https://ip-ranges.amazonaws.com/ip-ranges.json“|jq-r”.prefixes[]| select.service==CLOUDFRONT |.ip_prefix” 更新:或直接从前面提到的

现在,2021年4月,它给了我122个范围

解决方案 您可以在节点中对此文件进行AJAX调用,解析JSON文件,以字符串cloudFrontIps数组的形式获取列表,并将其传递给app.set'trust proxy',['loopback',…cloudFrontIps]

好消息! 好消息是已经有人做了!退房

最后说明 很明显,但值得一提的是,异步获取此列表!因此,您可能需要延迟,例如等待应用程序启动,直到此列表可用。虽然这不是必须的,但在HTTP服务器启动后调用app.set应该可以工作,因为在短时间内您将记录CloudFront的IP。 您可能希望调用此文件并定期获取新列表。软件包建议每12小时使用setTimeout。 我的理解是,在运行的服务器上调用app.set将使新列表立即适用于未来的调用,而无需重新启动。我是通过X-Forward-For的方式以及app.set在其调用中的方式得到这种印象的。因此,TL;DR:你不需要每隔12小时重新启动一次服务器! 我看了一下express的代码,似乎app.set会覆盖列表,而不是每次调用时都附加列表。因此,如果您有自己的IP,例如AWS ELB中的VPC的CIDR,则每次在setTimeout中调用此app.set时,您必须手动将其添加到列表中。 您可以添加一个