在不使用 Cloudfront CIDR IPS 的情况下从 Nginx 中的 Cloudfront 获取 ClientIp

Get ClientIp from Cloudfront in Nginx without using Cloudfront CIDR IPS

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

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

  1. 您首先需要做的就是转到 Cloudfront -> Select Distribution -> Behaviors -> 然后在 'Cache key and origin requests'

    中执行以下操作
  2. Select 'CachingDisabled' 对于 'Cache policy' 下拉列表,如果您不想缓存任何内容。如果我没有 select 这个选项,我个人在我的应用程序中遇到了问题。

  3. 对于源请求策略,请执行以下操作 -

    创建一个新策略,例如 'Origin-Policy-For-Cloudfront' 和 select 'CloudFront-Viewer-Address' 并检查其他选项还有。

    看起来像这样 -

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

  1. 现在,打开conf.d/node.confnginx.conf,随便你已经写好了你的'server -> /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;
         }
     }
    
  2. 在NodeJs Backend,你可以在请求中获取Client IP,如下所示-

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

这是一种获取客户端 IP 的更简单方法,而不是摆弄 Cloudfront CIDR IP 范围和所有内容。