请问如何获取用户访问的真实IP。单位是用深信服AD做负载的,was开启access日志后,发现来访地址都是AD上的虚拟IP地址,有什么办法获取用户真实的IP?
如果访问WAS的不是真实IP,那就不关WAS的事了,如果你想获取真实IP,那你看看在深信服那端看能否查到,正常来说,应该可以查到,除非那个深信服有建策略,让外面来的真实IP都自动跳转到一个虚拟IP。那就难查了。
收起在http传输层面尽量保持 原始ip ,如 存放在 X-FORWARDED-FOR
比如经过了 DDOS、反向代理、防火墙等时,需要注意每一个环节对相关字段是否有 清洗,必要时配置相关安全、负载设备 保持 原始ip 在 X-FORWARDED-FOR 头部字段
在Apache httpd(包括IBM HTTPServer) 的配置文件中 修改log配置
httpd.conf
#LogFormat "%h %l %u %t \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\"" combined
LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \\"%r\\" %>s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\"" combined
#LogFormat "%h %l %u %t \\"%r\\" %>s %b" common
LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \\"%r\\" %>s %b" common
收起建议可以尝试下WAS从HTTP请求头中的 X-Forwarded-For 中获取客户端真实IP,步骤参考如下:
1.应用程序服务器 > <server_name> > Web 容器传输链 > HttpQueueInboundDefault > HTTP 入站通道(HTTP_2)>定制属性,添加accessLogFormat属性值,内容如下:
名称:accessLogFormat
值:%{X-Forwarded-For}i %h %i %u %t "%r" %s %b
备注:accessLogFormat值根据实际需要定制,相关参数解释参数连接如下:
https://www.ibm.com/support/knowledgecenter/zh/SSEQTP_8.5.5/com.ibm.websphere.base.iseries.doc/ae/rrun_chain_httpcustom.html#accesslogformat
2.应用程序服务器 > <server_name> > Web 容器传输链 > HttpQueueInboundDefault > HTTP 入站通道(HTTP_2)页下方点击 “启用记录 ”,同时选中 “使用特定于链的记录 ”
填写访问日志文件路径、访问日志最大大小、最大历史记录文件数等值,参考如下:
访问日志文件路径:${SERVER_LOG_ROOT}/was_http_access.log
访问日志最大大小: 10
最大历史记录文件数: 10
3.重启server ,访问应用,查看was_http_access.log日志中内容是否为需要的值。
收起