[英]Node.js: Express set the “trust proxy” for CloudFront
我在AWS Cloudfront后面有一个Express后端。 如何正确设置 AWS Cloud Front 的信任代理:
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 地址范围。 他们的文档中提到了这一点。 您可以通过这一行来查看它们( source ,需要jq
,您可以从 MacOs 中的brew
获得。):
curl 'https://ip-ranges.amazonaws.com/ip-ranges.json' | jq -r '.prefixes[] | select(.service=="CLOUDFRONT") | .ip_prefix'
(更新:或直接来自http://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips ,如他们的文档中所述。)
现在,2021 年 4 月,它给了我 122 个范围。
您可以在 Node 中对该文件进行 AJAX 调用,解析 JSON 文件,将列表作为字符串数组 ( cloudFrontIps
),然后将其传递给app.set('trust proxy', ['loopback', ...cloudFrontIps])
。
好消息是其他人已经做到了! 检查https://github.com/nhammond101/cloudfront-ip-ranges 。
await
)您的应用程序启动,直到此列表可用。 但这不是必须的——在 HTTP 服务器启动后调用app.set
应该可以工作,认为在短时间内您将记录 CloudFront 的 IP。setTimeout
。app.set
将使新列表立即适用于未来的调用,而无需重新启动。 我对每个请求如何检查X-Forward-For
以及app.set
如何在调用时调用compileTrust
function获得了这种印象。 所以,TL;DR:您不需要每 12 小时重新启动一次服务器!app.set
每次调用它时都会覆盖(而不是附加)列表。 因此,如果您有自己的一些 IP(例如 AWS ELB 中的VPC's CIDR
),则每次在setTimeout
中调用此app.set
时,都必须手动将其添加到列表中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.