获取客户端的公网IP地址
1.优化Nginx配置
确保Nginx的配置文件中包含了正确的代理头设置,例如:
location / {
proxy_pass http://your-backend-service;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这样,Nginx会将客户端的真实公网IP通过X-Real-IP和X-Forwarded-For头传递给后端服务。
public static String getRealIp(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
2.使用外部API查询公网IP
import org.springframework.web.client.RestTemplate;
@RestController
public class IpController {
private final RestTemplate restTemplate = new RestTemplate();
@GetMapping("/publicIp")
public String getPublicIp() {
String response = restTemplate.getForObject("https://api.ipify.org", String.class);
return response;
}
}