nginx增加header配置
server {
listen 80;
server_name admin.paascloud.net;
location ~ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}
}
後端擷取用戶端ip代碼
public static String getRemoteAddr(HttpServletRequest request) {
String ipAddress = request.getHeader(GlobalConstant.X_Real_IP);
if (StringUtils.isEmpty(ipAddress) || GlobalConstant.UNKNOWN.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader(GlobalConstant.X_FORWARDED_FOR);
log.info("X_FORWARDED_FOR ip: ", ipAddress);
}
if (StringUtils.isEmpty(ipAddress) || GlobalConstant.UNKNOWN.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader(GlobalConstant.PROXY_CLIENT_IP);
log.info("PROXY_CLIENT_IP ip: ", ipAddress);
}
if (StringUtils.isEmpty(ipAddress) || GlobalConstant.UNKNOWN.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader(GlobalConstant.WL_PROXY_CLIENT_IP);
log.info("WL_PROXY_CLIENT_IP ip: ", ipAddress);
}
if (StringUtils.isEmpty(ipAddress) || GlobalConstant.UNKNOWN.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader(GlobalConstant.HTTP_CLIENT_IP);
log.info("HTTP_CLIENT_IP ip: ", ipAddress);
}
if (StringUtils.isEmpty(ipAddress) || GlobalConstant.UNKNOWN.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader(GlobalConstant.HTTP_X_FORWARDED_FOR);
log.info("HTTP_X_FORWARDED_FOR ip: ", ipAddress);
}
if (StringUtils.isEmpty(ipAddress) || GlobalConstant.UNKNOWN.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
log.info("getRemoteAddr ip: ", ipAddress);
}
if (StringUtils.isEmpty(ipAddress) || GlobalConstant.UNKNOWN.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (GlobalConstant.LOCALHOST_IP.equals(ipAddress) || GlobalConstant.LOCALHOST_IP_16.equals(ipAddress)) {
//根據網卡取本機配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
logger.error("擷取IP位址, 出現異常={}", e.getMessage(), e);
}
assert inet != null;
ipAddress = inet.getHostAddress();
}
log.info("擷取IP位址 ipAddress={}", ipAddress);
}
// 對于通過多個代理的情況, 第一個IP為用戶端真實IP,多個IP按照','分割 //"***.***.***.***".length() = 15
if (ipAddress != null && ipAddress.length() > GlobalConstant.MAX_IP_LENGTH) {
if (ipAddress.indexOf(GlobalConstant.Symbol.COMMA) > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(GlobalConstant.Symbol.COMMA));
}
}
return ipAddress;
}
springboot 增加配置
server:
tomcat:
uri-encoding: UTF-8
remote-ip-header: x-forwarded-for
use-forward-headers: true
...