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