对于使用 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 中开头添加如下代码:
- // 解决cdn后无法识别ip的问题
- if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
- $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
- $_SERVER['REMOTE_ADDR'] = $list[0];
- }
之后在根目录的 web.config 文件中添加如下 rule:
- <rule name="Block Some IPs" stopProcessing="true">
- <match url="(.*)" ignoreCase="true" />
- <conditions logicalGrouping="MatchAny">
- <add input="{HTTP_X_FORWARDED_FOR}" pattern="^79\.53\.54\.5$" />
- </conditions>
- <action type="CustomResponse" statusCode="403" subStatusCode="0" statusReason="Forbidden" statusDescription="Access is forbidden." />
- </rule>
所以,{REMOTE_ADDR}
和 {HTTP_X_FORWARDED_FOR}
是针对不使用 CDN 和使用 CDN 的两种情况分别设置的。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
对于使用又拍云 CDN 的用户,他们家的技术文档中已经给出了明确的说明:
又拍云 CDN 回客户源的时候会带上
X-Real-IP
和X-Forwarded-For
的请求头下去,值为用户实际访问 CDN 的来源 IP 地址。
特别地,为了兼容部分服务端程序,我们额外还提供了 Client-IP 请求头的支持,其值和 X-Real-IP、X-Forwarded-For 相同。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
所以上述的代码设置,又拍云 CDN 开启的情况下,你可以使用 {HTTP_X-Real-IP}
替换掉 {HTTP_X_FORWARDED_FOR}
,结果一样。