首页 > 解决方案 > 不使用 Cloudfront CIDR IPS 从 Nginx 中的 Cloudfront 获取 ClientIp

问题描述

当 AWS EC2 之间有 Nginx 服务器时,如何在 NODE.JS 应用程序中从云端获取客户端 IP?

标签: node.jsnginxamazon-cloudfront

解决方案


我的建议是使用 CloudFront 提供的标题,链接 - [https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-cloudfront-headers.html]

  1. 您首先需要做的就是转到 Cloudfront -> 选择分发 -> 行为 -> 并在“缓存密钥和源请求”中执行以下操作

  2. 如果您不想缓存任何内容,请为“缓存策略”下拉菜单选择“ CachingDisabled ”。如果我没有选择此选项,我个人在我的应用程序中遇到了问题。

  3. 对于 Origin Request Policy,请执行以下操作 -

    创建一个新策略,如“Origin-Policy-For-Cloudfront”并选择“CloudFront-Viewer-Address”并检查其他选项。

    它看起来像这样 -

在此处输入图像描述

  1. 保存它,最后 Cloudfront Behavior 应该如下所示 -

在此处输入图像描述

  1. 现在,打开conf.d/node.confnginx.conf,无论您在哪里编写了“服务器 - > /位置”,只需编写以下内容 -

     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;
         }
     }
    
  2. 在 NodeJs 后端,您可以在请求中获取客户端 IP,如下所示 -

     exports.get = (req, res, next) => {
         console.log('Clinet IP:', req.headers['x-client-ip']);
     }
    

这是一种更简单的获取客户端 IP 的方法,而不是搞乱 Cloudfront CIDR IP 范围等。


推荐阅读