問題描述:
使用騰訊的御天驗證碼,提示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