java获取nginx反向代理的客户端真实ip(非服务器ip)
在使用nginx方向代理后
Remote Address代表的就是服务器的ip地址,而不是客户端的ip地址了,想要获取真实ip,就需要在nginx里面配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | worker_processes 1 ; events { worker_connections 1024 ; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $http_x_forwarded_for - $http_x_real_ip' ; access_log logs/access.log main; sendfile on; keepalive_timeout 65 ; upstream tomcat_server_pool{ #server 172.17 . 0.14 : 3000 weight= 10 ; #server 172.17 . 0.14 : 3001 weight= 10 ; server 127.0 . 0.1 : 1001 weight= 10 ; } server { listen 80 ; server_name localhost; location / { proxy_pass http: //tomcat_server_pool; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; root html; index index.html index.htm; } } } |
其中X-Real-IP和X-Forwarded-For都是客户端真实地址
当nginx配置好的后,接下来需要在java中进行获取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public void login(HttpServletRequest request, Model model) { String remoteHost = request.getRemoteHost(); String clientIp = request.getHeader( "x-forwarded-for" ); log.info( "clientIp:{}" ,clientIp); String proxyClientIP = request.getHeader( "Proxy-Client-IP" ); log.info( "proxyClientIP:{}" ,proxyClientIP); String xRealIP = request.getHeader( "X-Real-IP" ); log.info( "xRealIP:{}" ,xRealIP); String host = request.getHeader( "Host" ); log.info( "host:{}" ,host); String remoteAddr = request.getRemoteAddr(); log.info( "remoteAddr:{}" ,remoteAddr); model.addAttribute( "year" , TimeUtils.getYear()); queryIp.judgeIp(model, remoteHost, request.getLocalAddr()); } |
结果
nginx相关命令
1 2 3 | /usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件 /usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx /usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx |
标签:
nginx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异