1、获取用户外网IP,需在NGINX中添加,项目地址可外网访问
proxy_set_header X-Real-IP $remote_addr; # 直接记录客户端真实IP
proxy_set_header X-Forwarded-For $remote_addr; # 初始化XFF头(不要用$proxy_add_x_forwarded_for)
#pc服务端location /ym-meet/ {add_header 'Access-Control-Allow-Origin' '*' always; #不使用 always 可能会导致 header 只在成功的响应中被添加,而不会在错误响应中被添加,这可能会引发 CORS 相关的问题add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';add_header 'Access-Control-Allow-Headers' '*';add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';if ($request_method = 'OPTIONS') {return 204;}proxy_pass http://103.16.15.4:8099/ym-meet/;proxy_set_header X-Real-IP $remote_addr; # 直接记录客户端真实IPproxy_set_header X-Forwarded-For $remote_addr; # 初始化XFF头(不要用$proxy_add_x_forwarded_for)proxy_set_header Origin $http_origin;proxy_set_header Access-Control-Request-Headers $http_access_control_request_headers;proxy_set_header Access-Control-Request-Method $http_access_control_request_method;# 禁止缓存#proxy_cache_bypass $http_cache_control;#add_header Cache-Control 'no-cache, no-store, must-revalidate';#expires off;}
2、获取用户局域网IP,需用户访问的项目地址就是局域网地址
3、获取IP地址Java代码
public class IPUtils {public static String getClientIP(HttpServletRequest request) {//优先获取外网IP,没有再获取局域网IPString ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("X-Real-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {//获取局域网IPip = request.getRemoteAddr();}// 对于通过多个代理的情况,第一个IP为客户端真实IP,若不是则取最后一个IP(往往是用户局域网出口的IP)// 注意:这里简单处理了通过逗号分隔的多个IP的情况,实际应用中可能需要根据具体情况进行更细致的处理if (ip != null && ip.contains(",")) {ip = ip.split(",")[0];}return ip;}
}