»

Windows主机使用CDN后如何屏蔽透过CDN访问的真实IP地址

    网络安全  
插件工作Apache访问缓存网站镜像cookiesWordPress插件windows主机FAQ访客CDN网站优化IIS建站浏览器wordpress又拍云CDNweb.configCDN的问题防盗链客户申请状态爬虫网络安全

对于使用 WordPress 和 Windows主机的用户来说,如果不使用 CDN,我们可以直接通过 REMOTE_ADDR 在 web.config 文件中屏蔽一些来访的IP地址,例如:

<add input="{REMOTE_ADDR}" pattern="^79\.53\.54\.5$" />

但是,如果你选用了 CDN,那么此时 REMOTE_ADDR 的地址就可能是 CDN 服务器的地址了,所以很容易误杀。

这种情况怎么办?那么就需要使用 HTTP_X_FORWARDED_FOR 来获取通过 CDN 服务器来访的 IP 地址。这个具体是什么意思,可以搜索一下看看就明白了。

如果 CDN 支持请求头中含有 HTTP_X_FORWARDED_FOR 信息,那么就可以在你的网站根目录文件 wp-config.php 中开头添加如下代码:

  1. // 解决cdn后无法识别ip的问题  
  2. if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {  
  3.     $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);  
  4.     $_SERVER['REMOTE_ADDR'] = $list[0];  
  5. }  

 

之后在根目录的 web.config 文件中添加如下 rule:

  1. <rule name="Block Some IPs" stopProcessing="true">  
  2.     <match url="(.*)" ignoreCase="true" />   
  3.         <conditions logicalGrouping="MatchAny">  
  4.         <add input="{HTTP_X_FORWARDED_FOR}" pattern="^79\.53\.54\.5$" />  
  5.     </conditions>  
  6.     <action type="CustomResponse" statusCode="403" subStatusCode="0" statusReason="Forbidden" statusDescription="Access is forbidden." />  
  7. </rule>  

 

所以,{REMOTE_ADDR}{HTTP_X_FORWARDED_FOR} 是针对不使用 CDN 和使用 CDN 的两种情况分别设置的。

本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利

对于使用又拍云 CDN 的用户,他们家的技术文档中已经给出了明确的说明:

又拍云 CDN 回客户源的时候会带上 X-Real-IPX-Forwarded-For 的请求头下去,值为用户实际访问 CDN 的来源 IP 地址。
特别地,为了兼容部分服务端程序,我们额外还提供了 Client-IP 请求头的支持,其值和 X-Real-IP、X-Forwarded-For 相同。

 

本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利

所以上述的代码设置,又拍云 CDN 开启的情况下,你可以使用 {HTTP_X-Real-IP} 替换掉 {HTTP_X_FORWARDED_FOR} ,结果一样。

时光在路上扫码阅读、分享
  • 版权声明:该文章由 时光在路上 发表,共 1245字。除非特别标注来源,否则为原创。详见《版权声明》部分。
  • 转载请注明:文章标题和文章链接 - 时光在路上 - 也可直接“复制本文链接” 或 使用右边二维码分享本文 →