【发布时间】:2021-12-26 09:22:57
【问题描述】:
当 AWS EC2 之间有 Nginx 服务器时,如何在 NODE.JS 应用程序中从云端获取 Client-IP?
【问题讨论】:
标签: node.js nginx amazon-cloudfront
当 AWS EC2 之间有 Nginx 服务器时,如何在 NODE.JS 应用程序中从云端获取 Client-IP?
【问题讨论】:
标签: node.js nginx amazon-cloudfront
我的建议是使用 CloudFront 提供的标头,链接 - [https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-cloudfront-headers.html]
您首先需要做的就是转到 Cloudfront -> 选择分发 -> 行为 -> 并在“缓存密钥和源请求”中执行以下操作
如果您不想缓存任何内容,请为“缓存策略”下拉菜单选择“CachingDisabled”。如果我没有选择此选项,我个人会在我的应用中遇到问题。
对于源请求策略,请执行以下操作 -
创建一个新策略,如 'Origin-Policy-For-Cloudfront' 并选择 'CloudFront-Viewer-Address' 并检查其他选项。
它看起来像这样 -
现在,打开 conf.d/node.conf 或 nginx.conf,无论您在哪里编写了“服务器 -> /location”,只需编写以下内容-
server {
listen 80;
server_name my-server CLOUDFRONT_URL;
location / {
proxy_set_header X-Client-IP $http_CloudFront_Viewer_Address;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
在 NodeJs 后端,您可以按如下方式获取请求中的客户端 IP -
exports.get = (req, res, next) => {
console.log('Clinet IP:', req.headers['x-client-ip']);
}
这是一种更简单的获取客户端 IP 的方法,而不是搞乱 Cloudfront CIDR IP 范围等等。
【讨论】: