Nginx 启用ngx_http_realip_模块的cloudflare IP白名单

Nginx 启用ngx_http_realip_模块的cloudflare IP白名单,nginx,cloudflare,Nginx,Cloudflare,我在nginx上有一个运行cloudflare的网站,希望阻止所有不是通过cloudflare发出的请求 通常,我会在nginx配置中将nginx ip列为白名单,并拒绝所有其他IP 但是我已经运行了ngx_http_realip_模块,它将X-Forward-For地址(来自访问者的真实Ip)设置为请求Ip,因此请求被拒绝 有没有办法在不停用ngx_http_realip_模块的情况下让这个白名单工作?此外,此白名单应仅适用于对nginx的请求,而不适用于其他服务 提前感谢为什么不在iptab

我在nginx上有一个运行cloudflare的网站,希望阻止所有不是通过cloudflare发出的请求

通常,我会在nginx配置中将nginx ip列为白名单,并拒绝所有其他IP

但是我已经运行了ngx_http_realip_模块,它将X-Forward-For地址(来自访问者的真实Ip)设置为请求Ip,因此请求被拒绝

有没有办法在不停用ngx_http_realip_模块的情况下让这个白名单工作?此外,此白名单应仅适用于对nginx的请求,而不适用于其他服务


提前感谢

为什么不在iptables而不是Nginx中阻止这些?在Nginx处理流量之前阻止流量(这将节省资源)


如果你要走这条路,我很乐意分享我的iptables配置(v4和v6)以了解如何做到这一点。

我提出的唯一一个可以用nginx单独完成的解决方案需要nginx版本1.9.7或更高版本

您可以使用来识别和阻止非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\u ip
的任何连接


这是因为我在geo block中使用了
$realip\u remote\u addr
,当使用
real\u ip\u头CF Connecting ip

时,它保留了原始的客户端地址。您可以发布它吗?在nginx中而不是iptables中进行阻止的一个原因是,在同一台主机上可能有一些站点不使用Cloudflare。