Loading... <div class="tip share">请注意,本文编写于 584 天前,最后修改于 583 天前,其中某些信息可能已经过时。</div> 物院学工办网站启用了两个域名,其一是 phyxgb.pku.edu.cn,解析到了服务器的v4地址;另一个域名为 *.pkuphy.cn,这个域名使用了 CloudFlare 的 CDN 服务,并使用服务器的 IPv6 地址进行回源。并做了重定向服务,即当访问 phyxgb.pku.edu.cn 这个域名时,如果监测到用户不在校内,会被重定向到 www.pkuphy.cn 域名下,而直接访问 www.pkuphy.cn 则不会做任何处理。 这么做的主要原因有以下几点: 1. 服务器的 v4 和 v6 都是使用的 CERNET 提供的服务, CERNET 对于 v4 流量收费很高(¥0.5/MB),而对于 v6 流量免费。 2. 学校防火墙对于非 pku 后缀域名的 v4 协议访问会直接阻断,也就是如果不使用 CloudFlare CDN 服务,将 www.pkuphy.cn 解析到服务器的 v4 地址,也无法正常访问。但神奇的是v6没有阻断,所以我用了智能cdn,如果客户有v6地址,则会解析到服务器的v6地址上,提供更快的访问速度,如果没有v6,则会解析到 CloudFlare 的 CDN 服务上。 这样处理后,有一个问题就是网站的访问记录中的 IP 地址全是 CloudFlare 的地址,不是访客的地址。这里记录一下怎么使得 log 文件中记录访客的地址。 ## 解决方法 服务器使用的是宝塔面板编译安装的 nginx,默认编译了 `gx_http_realip_module` 模块,所以只需要到`/www/server/nginx/conf` 目录下新建一个名为 `cf.conf`的文件,并将以下内容写入: ```conf 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 104.16.0.0/12; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 162.158.0.0/15; set_real_ip_from 172.64.0.0/13; set_real_ip_from 173.245.48.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 190.93.240.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 2400:cb00::/32; set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:8100::/32; set_real_ip_from 2606:4700::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2c0f:f248::/32; set_real_ip_from 2a06:98c0::/29; # use any of the following two real_ip_header CF-Connecting-IP; #real_ip_header X-Forwarded-For; ``` 然后到 nginx 的配置文件中,在 http 模块下添加一行 `include cf.conf`即可。 最后修改:2020 年 10 月 20 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏