nginx-启用了ngx_http_realip_module的白名单cloudflare Ips

我在nginx上有一个运行cloudflare的网站,并希望阻止所有未通过cloudflare的请求.

通常,我会将nginx配置中的nginx IP列入白名单,并拒绝其他所有IP.

但是我正在运行ngx_http_realip_module,它将X-Forward-For地址(这是来自Visitor的实际Ip)设置为request-IP,因此请求被拒绝.

有没有一种方法可以使此白名单工作而无需停用ngx_http_realip_module?此外,此白名单应仅适用于对Nginx的请求,不适用于其他服务

提前致谢

解决方法:

我想出的唯一可以使用nginx完成的解决方案需要nginx 1.9.7或更高版本.

您可以使用ngx_http_geo_module识别和阻止不是cloudflare ip的任何ip的响应.

使用此地理位置块.

geo $realip_remote_addr $cloudflare_ip {
    default          0;
    103.21.244.0/22  1;
    103.22.200.0/22  1;
    103.31.4.0/22    1;
    104.16.0.0/12    1;
    108.162.192.0/18 1;
    131.0.72.0/22    1;
    141.101.64.0/18  1;
    162.158.0.0/15   1;
    172.64.0.0/13    1;
    173.245.48.0/20  1;
    188.114.96.0/20  1;
    190.93.240.0/20  1;
    197.234.240.0/22 1;
    198.41.128.0/17  1;
    199.27.128.0/21  1;
    2400:cb00::/32   1;
    2405:8100::/32   1;
    2405:b500::/32   1;
    2606:4700::/32   1;
    2803:f800::/32   1;
    2c0f:f248::/32   1;
    2a06:98c0::/29   1;
}

然后,您可以将其添加到服务器块中.

if ($cloudflare_ip != 1) {
    return 444;
}

对于所有不是来自$cloudflare_ip的连接,它将关闭连接.

之所以有效,是因为我在geo块中使用了$realip_remote_addr,当使用real_ip_header CF-Connecting-IP时,该块保留了原始客户端地址.

上一篇:android – 如何从IP地址解析网络主机名


下一篇:apache-Cloudflare SSL协议错误