服务器日志与隐私你的主机商停止了记录。你的服务器没有。

本站其他每一篇指南问的都是主机商记录了你的哪些信息。这一篇把问题反过来问:因为一旦你自己运营一个网站,你自己就成了别人打听的那家公司—而记录着你读者信息的那份文件,正是你自己配置的,架在一台出问题也怪不到别人头上的机器上。

阅读用时 13 分钟·最后核实于 8 九月 2026·此页并非销售页面

你现在就是别人写信索取的对象

想知道是谁访问过你网站的人,不会从你的主机商查起,而是从你查起。因为在这条链条上,只有你这一方对保留这份记录有直接的利害关系,有一个可以被写信送达的法定地址,而且事后也没有透明度报告可以发布。

对一家主机商来说,这句话写起来并不舒服,所以不妨把背后的算法摆出来看看。这里公开的清单写明:HTTP 访问日志会在二十四小时的计时器到点后销毁,此后任何地方都不存在地址历史。而在从我们这里租用的机器上,一台未经改动的网页服务器,会把自己的访问日志保留约两周,在每晚的备份里再保留一年,而这两个数字都不是谁刻意设定的。精心挑选主机商的用心,就这样被一个没人读过的默认设置抵消了。

一行访问日志到底记录了什么

两款主流网页服务器的默认日志格式,二十五年来都没怎么变过,但几乎没有人把它当成一份关于某个人的记录来读。值得这样读一次,因为下面的每个字段都是一次独立的信息披露,而且它们会相互叠加。

字段记录的内容可用来识别的信息
客户端地址请求发出时所带的完整地址一条可被分配方追溯到具体住户或雇主的用户线路,任何持有相应数据库的人也能借此定位到城市
精确到秒的时间戳请求到达的时间,带有时区偏移一种先显出工作日、再显出地区、最后显出生活作息的时间规律
请求行方法、完整路径(含问号后的所有内容)以及协议你网站上曾经放进 URL 里的每一个令牌、会话标识符和一次性链接
状态码与字节数请求是否成功,返回了多少内容提供了哪份文档。哪怕连接是加密的,一个已知长度的 200 状态码也能指出具体是哪个页面
来源地址读者进入这个页面之前所在的那个页面他们收到的私密链接、讨论过你的论坛,以及他们在老式来源地址中曾经搜索过的关键词
用户代理浏览器、版本、引擎、操作系统,有时还有设备型号单独看没什么信息量,组合起来却信息量巨大—它是有史以来每一次指纹识别的第一个字段
已认证用户你的应用程序或基本身份验证写在那里的任何人一个具名账户,与上面六个字段一起,同处一行

七个字段,一行记录,浏览器每发出一次请求就要写一行—对于单独一次页面浏览,通常是二十到八十行。其中没有一个字段是谁刻意做出的决定。但全部加在一起,就是一份记录。

你的技术栈写下访客信息的九个地方

几乎所有关于日志的争论,都只围绕第一行展开。这是大家都知道存在的那一项,却远远算不上这台机器上最能暴露信息的东西。

位置会记录哪些内容通常能保存多久
访问日志针对每一次请求,上面那七个字段一个你自己没有选过的轮转周期。常见的默认值是两周
错误日志失败和被拒绝的请求,包含地址、完整 URL,往往还有来源页面同样的轮转周期,而且从来没人打开看过
应用日志你的框架认为值得记一笔的任何东西:账户标识符、电子邮件地址,有时甚至是整个请求体在很多部署里,直到硬盘写满为止
数据库日志逐字记录的慢查询,包含参数直到有人注意到它是开着的
邮件日志你发送过的每一个地址、退回的每一个地址,以及每一次投递发生的时刻一个轮转周期,外加卡在队列里的所有东西
前端的代理或 CDN同一个请求又被记录了一次,这次是在另一家公司那里,真实地址被搬进了请求头里那家公司的保留期限,既不由你决定,也不会公布在你的隐私政策页面上
网站分析一次访问、一个地址、一块屏幕、一个来源,以及在网站上留下的一条有序路径默认是几个月,如果没人动过默认设置,就是几年
错误追踪工具一份堆栈跟踪、触发它的地址,以及当时恰好在作用域内的任何东西取决于你的套餐付费保留多久
以上八项的每一份备份以上所有内容再来一遍,定格在快照运行的那一刻备份的保留期限—几乎总是这张表里最大的那个数字

最后一行,才是让大多数良好意图落空的那一项。把日志轮转周期从十四天缩短到一天,改变的是硬盘上的内容,却丝毫改变不了凌晨三点做的那份、会被保留一年的副本。删除一份已经被复制过的记录,改变的只是它的位置,而不是把它删掉。

比地址更能暴露信息的两个字段

地址是大家都爱争论的那个字段,也是有效期最短的一个:它会变化、会被共享,在移动网络上,它归运营商所有,而不是归某个人所有。而它旁边的两个字段,其实更糟糕,只是没人声张。

来源地址描述的是读者,而不是这次请求

它回答了一个你从未问过的问题:这个人一秒钟之前在哪里。那可能是转发给他们的一个私密文档链接、一个内部工单系统、一个邮件客户端的预览页面,也可能是某个他们绝不希望被和你的网站联系在一起的页面。如今,当目标地址与当前页面不同源时,浏览器会截断路径,这确实有帮助—但对你自己网站内部的链接毫无用处,因为其中的完整路径依然会被发送、依然会被写进日志。

用户代理是指纹识别的种子

单看用户代理,它只是芸芸众生中的一个。可一旦和地址、语言请求头、请求顺序,以及一组可接受的格式组合起来,它往往能在几周时间里,稳定指向同一个访客—不需要 cookie,不需要同意,也没有任何人决定要追踪什么。正是这个机制,让“我们只保留服务器日志”这句话,比说这句话的人自己以为的要脆弱得多。

机密信息之所以会进日志,是因为它们本来就在 URL 里

这是最值得你读完这整篇文章的一个失误,因为它很常见、悄无声息,而且完全在你的掌控之内。问号后面的任何内容,都是请求行的一部分,而请求行正是会被写进日志的东西。

  • 密码重置链接。查询字符串里的一次性令牌,会以明文形式被记录在访问日志里、访问日志的备份里,以及读者和你之间的每一道代理上。
  • 邀请链接和退订链接。形式相同,存活时间更长,而且通常根本不会过期。
  • 通过 URL 传递的会话标识符。在新代码里已经少见,但在旧代码里依然存在,对任何拿到这份文件的人来说,都等于完整接管一个账户。
  • 交给浏览器的 API 密钥。查询字符串里的密钥,就是日志里的密钥,也是随来源地址一起发送给第三方的密钥,还是读者浏览历史里的密钥。
  • 搜索框。如果站内搜索用 GET 方式提交,就会把任何人在你网站上输入过的每一次查询,连同输入者的地址一起记录下来。

解决办法不是调一个日志设置。把这个值移到请求头或请求体里,那里的默认格式不会记录它,然后把已经写下来的内容做一次轮转清理。而一个专门剔除令牌的日志过滤器,是需要额外维护的第二套系统,一旦有人新加一个参数,它第一时间就会失灵。

可以向你索取什么,又是谁能索取

本站其他指南讲的,都是法律文书送达一家主机商,而这家主机商所在的管辖区是刻意挑选过的。而送达你自己日志的文书要简单得多:它是直接送达给你本人的,送到你所在的地方,机器放在哪里根本不是问题的一部分。

  • 你所在国家的民事诉讼要求。因为一条评论、一次泄露或一笔交易而提起诉讼的人,会要求网站运营者交出其掌握的信息。而运营者就是你,两周的访问日志,正是很容易被下令交出的东西。
  • 来自读者的请求。根据欧洲数据保护法,个人有权要求你说明掌握了他们的哪些信息,而地址是可以构成个人数据的:欧盟法院已于2016年在 Case C-582/14 中确认了这一点,认定网站运营者持有的动态地址之所以构成个人数据,是因为存在合法途径可借此定位到该订户。保留期限同样需要正当理由—Article 5(1)(e) 规定,保留时间不得超出必要限度,而“软件包默认就是这么发的”并不构成一个目的。
  • 攻破这台机器的任何人。最有可能读到你访问日志的,根本不是法院。日志很少被加密,很少被监控,也几乎从不被纳入威胁模型,而且在任何按常规方式搭建的服务器上,它们都放在一个可以预料到的路径下。
  • 你的备份所触及的任何人。一份异地副本,就是存放在另一家公司、处于另一个管辖区、要对你从未读过的法律文书负责的副本。

以上都不是法律建议,本站也不是你的律师。这只是把同一套清单逻辑,用到了你这一端:你拿不出来的东西,就不可能被要求交出,除此之外的一切,都取决于是哪国的法院在问。这套逻辑在主机商那一端如何运作,见警方向主机商索要数据时究竟会发生什么

少留痕迹,但不至于两眼一抹黑

读到这里,很多人的本能反应是干脆把日志关掉,但这是错误的做法:没有日志的服务器,没法调试,没法合理限流,也没法告诉你它正在被人攻破。目标不是清零。而是留下能回答运维问题的那部分,丢掉只能回答某个人身份问题的那部分。

改动作用代价
写入时就截断地址在日志格式本身里,把 IPv4 地址的最后一段字节清零,或者把 IPv6 地址的最后八十位清零,这样完整的值就永远不会被写到硬盘上事后针对单个访客的取证能力。封禁和限流依然有效,因为两者都作用于实时请求,而不是这份文件
有意缩短轮转周期面向公众的网站保留一天,这个数字是你自己选的,而不是某个软件包替你选的调查早于你所选时间窗口的任何事情的能力
停止记录静态资源去掉五分之四的行数,却不丢失任何有意义的信息没有代价。这是唯一一行没有取舍的改动
丢弃来源地址不再记录读者刚才在哪个页面知道是哪个链接或哪场讨论在为你带来读者,而这个问题经过同意的网站分析工具同样可以回答
把安全日志和分析日志分开两份文件、两种用途、两个保留期限,其中只有一份保留了地址一次性花二十分钟配置好
把日志放进备份排除清单阻止每晚的快照,悄悄把轮转刚刚销毁的内容又保留下来不会让你损失任何东西。从来没有人为了读一份旧访问日志而去恢复备份

这六项改动里,有两项完全没有代价,却能消除这个页面上提到的大部分暴露风险。而最后一项,是大家都想不到的那个,也正是另外五项效果打折扣的原因。

替你记录读者信息的第三方

以上说的都是你自己控制的机器上的文件。而浏览器在加载你的页面时,还会向页面里提到的每一个其他源都发起连接,这些连接对象都会收到访问者的地址、用户代理,以及一个说明正在读你哪个页面的来源信息—而且是在任何同意横幅被点击之前就已经发生,因为请求早就已经发出去了。

  • 由别人提供的字体。样式表里的一行代码,就会让每个页面的每一位读者,都为了一个本可以和网站其他文件放在同一目录下的文件,而被暴露给第三方。
  • 嵌入的视频或地图。只要出现在页面上就会被加载,不管有没有人真的点击播放。
  • 聊天插件或标签管理器。按设计会出现在每一个页面上,而且能够加载你从未审查过的更多代码。
  • 错误追踪工具。这几项里最有用、也最能暴露信息的一个:它存在的意义,就是把别人会话的状态发送给你。
  • 架在整个网站前面的 CDN。这不是反对使用 CDN 的理由—这是一笔合理的取舍—但它终究是一家在你之前就能看到每一个请求、保留着自己的日志、并且要对自己所在管辖区负责的公司。

自行搭建前面这三项,通常只需要一个下午,而且比调整自己服务器上的任何设置,都更能减少第三方的窥探。这也是这个页面里,真正改善读者体验而不只是改善你被要求交出什么的部分,所以值得优先去做。把视角从读者的暴露面换成你自己的暴露面,对应的清单见暴露一个网站身份的九件事

本站能做到什么,又做不到什么

老老实实划清这条界线,比给你一句空洞的安慰更有价值,所以不妨从我们这一侧说清楚。

  • 我们自己的 HTTP 访问日志会在二十四小时的计时器到点后销毁,不存在地址历史,不存在登录地点记录,也没有任何指纹信息能留存下来。真正会留存下来的完整清单,以清单的形式公开发布,一共只有七项记录。
  • 通过法律程序而来的请求,都会计入透明度报告,而一份有效命令实际会换来什么,也是事先写清楚的,而不是临场决定的。
  • 在 VPS 或独立服务器上,这个页面里说的这些日志,都在你自己的操作系统里面。我们不会去读它们,也不会把它们发送到任何地方,但同样也没法替你去配置它们—单租户是一把双刃剑,而这正是它的意义所在。
  • 我们能承担的,是下面那一层:注册时不留身份记录,结算只走链上,机器所在的管辖区由你自己挑选,而不是你发卡机构所在的那一个。

这个页面真正想说的一句话是:按主机商拒绝保留什么来挑选主机商,自己却又把同样的东西保留两周,这个隐私决定,会被一份配置文件彻底抵消。这两件事所花的功夫根本不对等:一个花了一周去研究,另一个只需要一个下午去做,而只有一个是真正做完的。

一次一小时的日志自查

以下内容都不需要购买任何工具,而且每一步都会告诉您一些前一步没有告诉您的信息。

  1. 打印你自己访问日志里的一行,像陌生人那样,逐个字段大声读出来。
  2. 列出日志目录下的每一个文件,然后标出过去一年里你打开过的那些。没被标出来的,就是纯粹的负担。
  3. 读一遍轮转配置,写下它实际保留的天数,而不是你记忆里当初同意的那个数字。
  4. 把上个月的备份恢复到一个临时目录里,找一找你以为两周前就已经删掉的那份日志。
  5. 在你的访问日志里搜索 token、reset、key、session、password 这几个词。凡是搜到的,都是已经被写到硬盘上的机密信息,需要的是轮换,而不只是修复。
  6. 打开浏览器的网络面板,加载你自己的首页,写下每一个不属于你的、被联系过的域名。每一个都是一家按自己的保留规则掌握着你读者信息的公司。
  7. 查一下在你的代理或 CDN 背后,是哪个请求头携带着真实地址,并确认源站是否把它记录了下来。CDN 并不会阻止源站记录日志,它只是把这个字段挪了个位置。
  8. 打开错误追踪工具里最新的一条事件,数一数它的数据负载里,包含了多少条关于真实读者的细节。
  9. 有意识地定下三个保留期限的数字—安全日志、网站分析、备份—并且把它们写在下一个接手这台服务器的人一定能找到的地方。
  10. 把清单写下来:存在什么、存放在哪里、保留多久,以及如果明天早上收到一份有效命令,你会交出什么。如果这份文档写起来让你感觉不舒服,那它就是这份清单里最有价值的一个小时。

人们实际提出的问题

服务器日志算不算个人数据?

很多时候算,原因就在于地址。欧盟法院已于2016年裁定,只要存在合法途径可以识别出该订户,网站运营者持有的动态地址就构成个人数据,如今同样的推理在其他地方也很常见。实际后果不是罚款,而是一项义务:你持有什么,就可能被问及什么;你保留什么,就必须证明保留它的正当性。

访问日志应该保留多久?

保留到足够回答你真正会问它们的问题就行,对多数网站来说,这个问题是“过去一两天里发生了什么”。默认的两周,是一个从没见过你网站的软件包维护者定下来的。自己选一个数字,写下理由,再检查一下备份有没有在过期之后,悄悄把副本又多留了一年。

应不应该干脆彻底关闭日志记录?

不该,这是最常见的矫枉过正。一台没有日志的服务器,出问题时没法排查,被攻击的时候也没法告诉你正在发生什么。截断地址、丢弃静态资源、缩短保留窗口,这几件事能去掉几乎所有的暴露风险,同时还能让这份文件继续有用。

离岸主机能保护我自己的访客日志吗?

它能保护这些日志,使其免受送达主机商的法律文书影响。但对送达你本人、要求你在所居住的国家交出所掌握内容的文书,它没有任何作用—而你所掌握的,正是这台机器的操作系统。搬迁机器和更换运营者,是两个不同的决定,其中只有一个能靠花钱解决。

截断 IP 地址就够了吗?

这是单独一项最有效的改动,但光靠它本身还不够。一份去掉了地址、却仍然保留精确到秒的时间戳、完整路径和用户代理的日志,依然能在一个会话里,甚至常常跨会话地,追踪同一个访客。先截断地址,再缩短保留期限,两者加在一起,效果比单独使用任何一个都更好。

我的网站分析工具保留的日志呢?

它们通常比服务器日志存活更久、信息也更丰富,而且如果这个工具是别人托管的,它们就存放在另一家公司、另一个管辖区里。自行搭建、打开地址遮蔽、并且自己有意识设定保留期限的网站分析工具,能用一小部分的记录量,回答同样的业务问题。

错误日志和访问日志一样重要吗?

往往更重要,受到的关注却只有一小部分。错误日志记录的是出错的请求,格式错误的 URL、打到一半的凭据,以及包含真实数据的堆栈跟踪,最终都会落到这里。它也是最不可能有人专门为它设定过保留期限的文件。

今天就值得做的一项改动是什么?

把日志目录排除在备份之外,然后在日志格式里截断地址。前者能防止你已经配置好的删除操作,每晚都被悄悄撤销;后者去掉的,是让这一行其余内容能指向具体某个人的那个字段。两者加起来大约花二十分钟,却是大多数人从来不会去做的那两件事。

本机房的每一项价格都在同一处完整公开。 查看完整目录