[已解决]通过多层nginx,tomcat服务无法获取外网真实IP
问题描述:
使用腾讯的御天验证码,提示IP非法IP,内网的tomcat,经过2层nginx代理,服务获取的IP地址为内网ip地址,由于腾讯云的御天验证码对单一IP的频繁访问有拦截的,认定为非法IP(刷验证码),需要让内网的tomcat服务获取到外网用户的真实IP,即可解决问题!!!
问题解决:
01、nginx段配置
proxy_pass http://xxxcluster$request_uri;
proxy_set_header Host $http_host; #获取访问IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
02、tomcat-server.xml 在server.xml-host段
<Valve className="org.apache.catalina.valves.RemoteIpValve" #获取的真实IP
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" #访问日志的显示
prefix="localhost_access_log." suffix=".txt"
pattern="%{X-Real-IP}i %l %u %t "%r" %s %b" /> #%h --->%{X-Real-IP}i
测试观察:
查看tomcat/logs/localhost_access_xxx.log //看到访问IP地址有内网变化为外网访问用户的真实IP