寻求IIS 10中高级日志功能替代方案及c-ip改写方法
解决IIS 10中替换日志
c-ip为X-Forwarded-For真实IP的方案 嘿克里斯蒂安,我刚好在IIS 10里折腾过一模一样的需求,Advanced Logging确实被弃用了,但咱们用原生功能就能搞定,给你几个亲测有效的方案:
方案一:用URL重写模块替换REMOTE_ADDR变量(直接覆盖c-ip)
这个方法能让日志里的c-ip直接显示真实用户IP,步骤如下:
- 先确认服务器安装了URL重写模块(IIS 10默认自带,没有的话从Web平台安装程序补装就行)
- 打开目标网站的「URL重写」功能,添加一条入站规则:
- 规则名称随便取,比如「替换REMOTE_ADDR为真实IP」
- 匹配URL:保持默认的「与」逻辑,添加条件:
- 条件输入填
{HTTP_X_FORWARDED_FOR} - 检查方式选「匹配模式」,正则表达式填
^([^,]+)(适配单IP或多层代理场景,取第一个IP)
- 条件输入填
- 操作选择「设置服务器变量」,变量名填
REMOTE_ADDR,值填{C:1}(对应正则匹配到的第一个IP)
- 保存规则后,IIS日志里的
c-ip就会自动替换成X-Forwarded-For里的真实IP了,因为REMOTE_ADDR就是c-ip对应的底层变量
方案二:自定义日志字段(灵活替换或新增字段)
如果不想动REMOTE_ADDR,可以直接修改日志格式,用真实IP替换或补充字段:
- 进入网站的「日志」功能,点击「选择字段」:
- 若要替换
c-ip:先移除默认的「客户端IP地址(c-ip)」,然后添加自定义字段:- 名称:可以叫
True-Client-IP,或者直接用c-ip(不过建议用不同名称避免混淆) - 来源选「请求头」,头名称填
X-Forwarded-For
- 名称:可以叫
- 若要保留
c-ip同时新增真实IP字段:直接添加上述自定义字段即可
- 若要替换
- 要是想在日志格式里用
%c-ip的占位符显示真实IP,还可以修改日志格式字符串,把原来的%c-ip替换成%{X-Forwarded-For}i
方案三:利用ARR的客户端IP保留功能(如果已用ARR负载均衡)
如果你服务器本身在用Application Request Routing(ARR)做负载转发,那更简单:
- 打开IIS管理器的服务器节点,找到「Application Request Routing Cache」
- 点击「服务器代理设置」,勾选「启用代理」,然后在「客户端IP地址保留」区域选择「使用X-Forwarded-For头」
- 保存后ARR会自动处理IP转发,日志直接记录真实用户IP
注意事项
- 务必确认你的负载均衡器已经正确在请求头中添加了
X-Forwarded-For,不然所有方法都无效 - 多层代理场景下,
X-Forwarded-For会包含多个IP(用逗号分隔),方案一的正则已经处理了取第一个的情况,你可以根据实际调整正则 - 测试时可以用
curl命令模拟请求:curl -H "X-Forwarded-For: 192.168.1.100" http://your-site.com,然后查看日志验证结果
内容的提问来源于stack exchange,提问作者cristian cruceru
相关产品推荐
相关产品推荐

