如何实现 nginx 套 cloudflare 时实现白名单和获取客户端真实地址?

 

问题描述:

nginx 对接cloudflare 后,可以使用

set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
real_ip_header CF-Connecting-IP;

来配置获取客户端真实 IP

使用

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;
deny all;

可以配置白名单,只允许客户端从 cf 访问,但是两者结合便无法实现同时生效,请问应该进行配置来实现只允许 cf 接入,并且配置用户真实地址。


 

第 1 个答案:

server {
    listen 80;
    server_name mywebsite.com;
    
    set_real_ip_from 173.245.48.0/20;
    set_real_ip_from 103.21.244.0/22;
    ...
    real_ip_header CF-Connecting-IP;
    
    location / {
        allow 173.245.48.0/20;
        allow 103.21.244.0/22;
        ...
        deny all;

        try_files $uri $uri/ =404;
    }
}

 

第 2 个答案:

我觉得你那一堆allow也不保险,cloudflare是分布式的CDN,难免IP发生变动甚至有缺漏。

我觉得你可以通过host头做判断。我看cloudflare会把host头也带过来,因此理论上你只需要一个虚拟主机配置就可以搞定了:

server {
  listen 80;
  server_name www.example.com; # 用户在浏览器访问的域名
  # ... 你的其他配置 ...
}

再加一个默认虚拟主机,全部给deny掉就行了:

server {
  listen 80 default;
  server_name _;
  location / {
    return 403;
  }
}

组件提示框中的数据想展示在页面的别的位置,请问如何把echarts的组件提示框中的值赋值给另外一个变量?