You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求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重写」功能,添加一条入站规则:
    1. 规则名称随便取,比如「替换REMOTE_ADDR为真实IP」
    2. 匹配URL:保持默认的「与」逻辑,添加条件:
      • 条件输入填 {HTTP_X_FORWARDED_FOR}
      • 检查方式选「匹配模式」,正则表达式填 ^([^,]+)(适配单IP或多层代理场景,取第一个IP)
    3. 操作选择「设置服务器变量」,变量名填 REMOTE_ADDR,值填 {C:1}(对应正则匹配到的第一个IP)
  • 保存规则后,IIS日志里的c-ip就会自动替换成X-Forwarded-For里的真实IP了,因为REMOTE_ADDR就是c-ip对应的底层变量

方案二:自定义日志字段(灵活替换或新增字段)

如果不想动REMOTE_ADDR,可以直接修改日志格式,用真实IP替换或补充字段:

  • 进入网站的「日志」功能,点击「选择字段」:
    1. 若要替换c-ip:先移除默认的「客户端IP地址(c-ip)」,然后添加自定义字段:
      • 名称:可以叫True-Client-IP,或者直接用c-ip(不过建议用不同名称避免混淆)
      • 来源选「请求头」,头名称填X-Forwarded-For
    2. 若要保留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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:17:32