在过去的几个月中,我的网络服务器收到的很大一部分请求都来自单个用户对 /favicon.ico 的请求:
# tail -n 3 access_log
XXX - - [24/Jan/2021:17:40:18 +0000] "GET /favicon.ico HTTP/1.1" 200 1845 "-" "WidgetKitExtension/3279 CFNetwork/1209 Darwin/20.2.0" "-"
XXX - - [24/Jan/2021:17:41:22 +0000] "GET /favicon.ico HTTP/1.1" 200 1845 "-" "WidgetKitExtension/3279 CFNetwork/1209 Darwin/20.2.0" "-"
XXX - - [24/Jan/2021:17:41:25 +0000] "GET /favicon.ico HTTP/1.1" 200 1845 "-" "WidgetKitExtension/3279 CFNetwork/1209 Darwin/20.2.0" "-"
(我已审查了 IP 地址。)这是一个合法用户,偶尔会向网站发出人工请求(使用不同的用户代理并通过 http/2)。最近的一次人工访问是在几周前,但 /favicon.ico 请求持续不减,平均每小时四次,但通常每隔几分钟或几秒钟一次,如上所示。特别是,favicon.ico 请求与网站上任何其他资源的请求无关。我不知道这是否相关,但 favicon 是通过 https 提供的(我相信没有相应的 http 请求)并且似乎被压缩了,因为 favicon.ico.gz 是 1599 字节。
在搜索中,我看到了有关各种奇怪的 favicon.ico 请求模式的各种其他问题,但没有任何问题可以在没有普通 Web 请求的情况下解释 favicon.ico 请求。
这些过多的请求可能由什么原因造成?我认为这是用户代理的某种配置问题,但我是否可以对服务器配置进行一些更改以说服用户代理缓存图标?服务器正在使用 nginx。谢谢。
答案1
显然,这是由“WidgetKitExtension/3279”完成的,它是安装在用户 MacOS 上的一种 widgetkit。现在的主要问题是弄清楚如何解决您的问题:
- 联系小部件的作者,并请他通过增加请求之间的时间来优化它
- 考虑一下像 Redis 这样的缓存服务,它将文件保存在内存中
如果您的网站托管在 Linux 上 - 该文件应该已经被缓存,那么您就不需要 Redis。但是,您可以尝试添加“expires” 指令。