前言
站长配置只允许来自 Cloudflare IP 的访问可以增强网站的安全性和性能优化。通过限制访问者只能通过 Cloudflare 访问,站长可以获得 DDoS 保护、恶意流量过滤、加速网站加载速度等好处。此外,这种配置还有助于隐藏实际服务器的 IP 地址,提高服务器的安全性。然而,在实施此类限制之前,站长需要仔细考虑潜在影响,并确保正确配置了 Cloudflare 的 IP 地址范围,以避免误封锁合法访问。
Cloudflare 的 IP 地址范围可以查看: https://www.cloudflare.com/zh-cn/ips/
配置方法
要配置 Nginx 仅允许来自 Cloudflare IP 的访问,可以使用 Nginx 的 allow
和 deny
指令结合 Cloudflare 的 IP 地址范围来实现。
以下是一个完整示例,展示了如何在一个 server
块内配置只允许来自 Cloudflare IP 的访问:
server {
listen 80;
server_name your_domain.com;
# 允许 Cloudflare 的 IP 地址访问
# 定义允许的 IPv4 地址范围
allow 173.245.48.0/20;
allow 103.21.244.0/22;
allow 103.22.200.0/22;
allow 103.31.4.0/22;
allow 141.101.64.0/18;
allow 108.162.192.0/18;
allow 190.93.240.0/20;
allow 188.114.96.0/20;
allow 197.234.240.0/22;
allow 198.41.128.0/17;
allow 162.158.0.0/15;
allow 104.16.0.0/13;
allow 104.24.0.0/14;
allow 172.64.0.0/13;
allow 131.0.72.0/22;
# 定义允许的 IPv6 地址范围
allow 2400:cb00::/32;
allow 2606:4700::/32;
allow 2803:f800::/32;
allow 2405:b500::/32;
allow 2405:8100::/32;
allow 2a06:98c0::/29;
allow 2c0f:f248::/32;
# 禁止其他 IP 地址访问
deny all;
# 此处添加其他 Nginx 配置,如 location 等
}
注意: 无需加下面代码,不然会获取到真实用户 IP,而非 Cloudflare 的 IP;
# 定义允许的 IPv4 地址范围
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
# ... (其他 IPv4 地址范围)
# 定义允许的 IPv6 地址范围
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
# ... (其他 IPv6 地址范围)
# 设置 Nginx 使用真实 IP 地址
real_ip_header CF-Connecting-IP;
set_real_ip_from
和 real_ip_header
是 Nginx 配置中用于处理真实 IP 地址的两个关键指令,它们一起用于从代理服务器中提取真实客户端的 IP 地址。
set_real_ip_from
: 该指令用于定义可信的代理服务器的 IP 地址范围。你告诉 Nginx 哪些 IP 地址是可以信任的代理服务器,从这些地址中提取真实的客户端 IP 地址。示例:
set_real_ip_from 103.21.244.0/22; set_real_ip_from 2400:cb00::/32;
real_ip_header
: 该指令用于指定用于提取真实 IP 地址的 HTTP 头字段。一旦 Nginx 通过 set_real_ip_from
定义了可信代理的 IP 地址范围,real_ip_header
告诉 Nginx 在这些 IP 地址中查找真实 IP 的 HTTP 头字段。
示例:
real_ip_header CF-Connecting-IP;
- 在这个示例中,
CF-Connecting-IP
是 Cloudflare 代理使用的头字段,包含了真实客户端的 IP 地址。
协同使用这两个指令的步骤如下:
- 使用
set_real_ip_from
定义可信的代理服务器 IP 地址范围。 - 使用
real_ip_header
指定用于提取真实 IP 的 HTTP 头字段。
这样配置后,Nginx 将从定义的可信代理 IP 地址范围中提取真实客户端 IP 地址,而不是使用代理服务器的 IP 地址。这对于在代理服务器后正确识别用户的真实 IP 地址非常重要,尤其是在使用反向代理或负载均衡器的情况下。
然后 Nginx 重新加载配置就 OK 了!