【问题标题】:Nginx - Allowing origin IPNginx - 允许源 IP
【发布时间】:2016-07-16 01:29:55
【问题描述】:

Nginx 支持allowdeny 语法来限制IP,例如allow 192.168.1.1;。但如果流量通过反向代理,则 IP 将引用代理的 IP。那么如何将其配置为将特定源 IP 列入白名单并拒绝所有其他传入请求?

【问题讨论】:

    标签: nginx proxy whitelist


    【解决方案1】:

    我使用http_geo 模块使用以下配置:

    geo $remote_addr $give_access {
        proxy 172.0.0.0/8; # <-- Private IP range here
        default 0;
        11.22.33.44 1; # <-- Allowed IP here
    }
    
    
    server {
    
        # more config ... 
    
        location ^~ /secure_url_here {
            if ($give_access = 0) {
              return 403; 
            }
            try_files $uri $uri/ /index.php?$args; # <-- Your directive here
        }
    }
    

    参考:http://nginx.org/en/docs/http/ngx_http_geo_module.html

    【讨论】:

      【解决方案2】:

      remote_addr 将引用代理,但您可以配置代理以发送带有标头字段 X-Real-IP/X-Forwarded-For 的客户端地址。

      结合ngx_http_realip模块,可以修改传入的header使用remote_addr的真实客户端地址。我相信这将使用允许/拒绝语法按预期工作。

      澄清一下——启用和配置模块后允许/拒绝的语法应该相同。在下面替换您的 IP 和代理地址。

      后端 nginx 允许/拒绝:

      location / {
          allow <your ip>;
          allow 127.0.0.1;
          deny  all;
      }
      

      后端nginx realip配置:

      set_real_ip_from  <your proxy>;
      real_ip_header    X-Forwarded-For;
      

      在你的 nginx 代理配置上:

      proxy_set_header        X-Real-IP       $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      

      如果您涉及多个中间代理,则需要启用 real_ip_recursive 并使用 set_real_ip_from 指令将其他地址列入白名单。

      【讨论】:

      • 谢谢 - 你能展示一下配置如何查找这个,因为模块页面只展示了如何获取变量,但没有展示如何加入白名单。
      • 我明白了,它用原始 IP 替换了代理 IP。谢谢。
      • 是的。抱歉评论这么乱。更新了我原来的帖子。
      猜你喜欢
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 2021-11-10
      相关资源
      最近更新 更多