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