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

前端之家收集整理的这篇文章主要介绍了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时,该块保留了原始客户端地址.

原文链接:https://www.f2er.com/nginx/532260.html

猜你在找的Nginx相关文章