每一个问题都是机会

Nginx 只允许来自 Cloudflare IP 的访问

文章目录
  1. 前言
  2. 配置方法

前言

配置只允许来自 Cloudflare IP 的访问,有助于隐藏实际服务器的 IP 地址,提高服务器的安全性。

Cloudflare 的 IP 地址范围可以查看: https://www.cloudflare.com/zh-cn/ips/

配置方法

要配置 Nginx 仅允许来自 Cloudflare IP 的访问,可以使用 Nginx 的 allowdeny 指令结合 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_fromreal_ip_header 是 Nginx 配置中用于处理真实 IP 地址的两个关键指令,它们一起用于从代理服务器中提取真实客户端的 IP 地址。

  1. set_real_ip_from 该指令用于定义可信的代理服务器的 IP 地址范围。你告诉 Nginx 哪些 IP 地址是可以信任的代理服务器,从这些地址中提取真实的客户端 IP 地址。

    示例:

    set_real_ip_from 103.21.244.0/22;
    set_real_ip_from 2400:cb00::/32;
  2. 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 地址。

协同使用这两个指令的步骤如下:

  1. 使用 set_real_ip_from 定义可信的代理服务器 IP 地址范围。
  2. 使用 real_ip_header 指定用于提取真实 IP 的 HTTP 头字段。

这样配置后,Nginx 将从定义的可信代理 IP 地址范围中提取真实客户端 IP 地址,而不是使用代理服务器的 IP 地址。这对于在代理服务器后正确识别用户的真实 IP 地址非常重要,尤其是在使用反向代理或负载均衡器的情况下。

然后 Nginx 重新加载配置就 OK 了!

赞(0)
未经允许不得转载:技术好学屋 » Nginx 只允许来自 Cloudflare IP 的访问
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址