【问题标题】:Get ClientIp from Cloudfront in Nginx without using Cloudfront CIDR IPS不使用 Cloudfront CIDR IPS 从 Nginx 中的 Cloudfront 获取 ClientIp
【发布时间】:2021-12-26 09:22:57
【问题描述】:

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

【问题讨论】:

    标签: node.js nginx amazon-cloudfront


    【解决方案1】:

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

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

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

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

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

      它看起来像这样 -

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

    1. 现在,打开 conf.d/node.confnginx.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;
           }
       }
      
    2. 在 NodeJs 后端,您可以按如下方式获取请求中的客户端 IP -

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-01
      • 2014-03-07
      • 2015-01-03
      • 2021-09-23
      • 2018-09-26
      • 2021-02-19
      • 2012-02-14
      • 2016-02-05
      • 2014-07-18
      相关资源
      最近更新 更多