记录客户端真实IP
#Nginx示例
#Nginx示例
log_format upstream
'$time_iso8601 $http_x_forwarded_for $host
$upstream_response_time $request $status
$upstream_addr';
#Apache示例
SetEnvIf REMOTE_ADDR "(.+)" CLIENTIP=$1
SetEnvIf X-Forwarded-For "^([0-9.]+)"
CLIENTIP=$1
LogFormat "%{CLIENTIP}e %D %u %t "%r" %>s %O
"%{Referer}i" "%{User-Agent}i"" trueip_combined
#Tomcat示例
https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/AccessLogValve.html
https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/AccessLogValve.html
#PHP示例
public static String
getIpAddr(HttpServletRequest request) {
String ip =
request.getHeader(" X-Forwarded-For ");
if (ip == null ||
ip.length() == 0 || " unknown ".equalsIgnoreCase(ip))
{
ip = request.getHeader("
Proxy-Client-IP ");
}
if (ip == null ||
ip.length() == 0 || " unknown ".equalsIgnoreCase(ip))
{
ip = request.getHeader("
WL-Proxy-Client-IP ");
}
if (ip == null ||
ip.length() == 0 || " unknown ".equalsIgnoreCase(ip))
{
ip =
request.getRemoteAddr();
}
return
ip;
}
屏蔽客户端真实IP
配置Apache屏蔽某源地址
参考下面的内容修改配置文件:
“Order deny, allow”的顺序可以根据使用方式自定义。 “SetEnvIf”用来定义一个环境变量。这里将”X-Forwarded-For”字段作为一个变量,并使用了一个正则表达式匹配某IP(192.168.0.1)。 后续的Deny将根据该变量将所匹配IP进行屏蔽。
配置Nginx屏蔽某源地址
参考下面的内容修改配置文件:
其中”set_real_ip_from”资源的”10.10.251.0/24”IP地址为UCloud北京BGP-C机房的ULB所在网段地址。 nginx会将来源为该网段的”X-Forwarded-For”作为真实IP地址。 deny后面的IP,既为所需要屏蔽的IP地址。