标签: cache

Apache:发送预先打包的 gzip 文件

我希望 Apache 通过网络发送 gzip 压缩的静态文件,但也希望 Apache 不总是一遍又一遍地对它们进行 gzip。所以我想如果 .gz 文件存在的话,它是否不可能交付。这个设置:

文件结构:

static/
|
|--- style.css
|
\--- style.css.gz
Run Code Online (Sandbox Code Playgroud)

以及 .htaccess 中的以下内容:

mod_rewrite 规则:

RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz [L]
Run Code Online (Sandbox Code Playgroud)

而这个设置:

AddEncoding x-gzip .gz
Run Code Online (Sandbox Code Playgroud)

实际上,只要发送 .gz 文件而不是 .css 文件,如果请求转到/static/style.css. 问题只是,该文件作为“application/x-gzip”而不是“text/css”交付。使用 mod_rewrite 的 T 标志不会改变这一点。也没有明确的

AddType text/css .css
Run Code Online (Sandbox Code Playgroud)

有没有人有想法,我如何才能实现所需的行为?或者出于某种我不认为的原因是不必要的?

编辑:还有一个额外的困难:将原始文件发送给没有 gzip 支持的客户端。有谁知道这是如何工作的?

rewrite cache gzip apache-2.2

8
推荐指数
1
解决办法
2600
查看次数

你能设置一个最小的 linux 磁盘缓冲区大小吗?

我有一台相当老的 Linux 机器,有 2GB 的内存,没有交换,它运行得很好,系统使用每块未使用的内存进行缓存,效果很好。

然而,当我快要耗尽内存时(例如,分配了 >1950MB),它会变慢到爬行;我怀疑这是因为没有剩余的磁盘缓冲区。我知道 OOM 杀手很快就会生效,但它通常不会到达那里——它变得如此缓慢以至于加载速度达到 30-40,没有任何进程取得任何进展(因此不会分配更多内存),并且我必须重新启动它。

当我尝试杀死一个进程以使机器做出响应时,例如通过转到控制台(通过 Alt-F1,登录,然后执行“killall badprocess”),它通常可以工作,但我必须等待在用户/密码和获得提示之间大约 10 分钟 - 一直在有磁盘活动。

同样,没有交换,所以它没有交换——它只是颠簸,因为它没有剩余的缓冲区。

我将有 100MB 左右专门用于磁盘缓冲区,这会更早地触发 OOM 杀手(毕竟程序的内存更少),但另一方面会使机器始终响应。

有没有办法做到这一点?我一直无法找到执行此类操作的 /proc/kernel 或 /sys/vm 条目。

linux cache

8
推荐指数
1
解决办法
5877
查看次数

在局域网上缓存 YouTube

可能重复:
如何使用 Squid Cache 缓存 YouTube 视频?

我是一家网吧的管理员。我们每月的流量限额有限,过去我们的调查表明,500 个视频中有 100 个被重复。我正在寻找任何方法在我们的服务器上缓存 YouTube 视频,以便用户可以从我们的服务器观看相同的视频。我尝试过 Squid 并进行了很多搜索,但没有任何帮助。如果有人可以提出建议,我将非常感激,因为这让我们很头疼。

cache

8
推荐指数
1
解决办法
7747
查看次数

ZFS 是否在启用压缩的 ZFS 文件系统中缓存压缩或未压缩数据?

ZFS 支持文件系统压缩,它还可以缓存经常访问或最近访问的数据。

如果一个系统有很多 CPU 但底层数据存储系统很慢。ZFS 可能会在压缩打开的情况下表现得更好。这可以在写入文件时通过测量 CPU 和磁盘使用率和吞吐量轻松测试。(当然延迟可能存在,但对于大文件来说这不是问题)。

但是缓存呢?如果每次读取数据都必须解压缩,那么这可能不是一个好主意。

缓存的数据是否被压缩?有人有这方面的信息吗?

zfs filesystems compression cache

8
推荐指数
1
解决办法
1998
查看次数

如何更改 nginx 上的 Last-Modified 标头?

我的服务器返回以下标头:

Cache-Control:no-cache
Connection:keep-alive
Date:Thu, 07 Jul 2011 10:41:57 GMT
Expires:Thu, 01 Jan 1970 00:00:01 GMT
Last-Modified:Thu, 07 Jul 2011 08:06:32 GMT
Server:nginx/0.8.46`
Run Code Online (Sandbox Code Playgroud)

我希望我提供的内容不被缓存,所以我正在寻找一种方法来返回一个 Last-Modified 标头,其中包含请求发起时的日期时间。像现在()...

nginx web-server cache http-headers

8
推荐指数
2
解决办法
3万
查看次数

鱿鱼不缓存

我正在尝试将 Squid 配置为缓存服务器。我有一个局域网,其中网络服务器 (apache) 位于192.168.122.11squid 处,192.168.122.21而我的客户端位于192.168.122.22. 问题是,当我查看 Squid 的访问日志时,我看到的只是TCP_MISS消息。Squid 似乎根本没有缓存。我检查了缓存目录是否具有所有适当的权限。这里还有什么问题?这是我的鱿鱼配置:

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.1/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method …
Run Code Online (Sandbox Code Playgroud)

cache squid apache-2.2

8
推荐指数
2
解决办法
9797
查看次数

让清漆在获取新数据时从缓存中发送旧数据?

我正在缓存动态生成的页面(PHP-FPM、NGINX)并在它们前面有清漆,这非常有效。

但是,一旦达到缓存超时,我就会看到:

  • 新客户请求页面
  • 清漆识别缓存超时
  • 客户等待
  • 清漆从后端获取新页面
  • varnish 向客户端提供新页面(并且还缓存了页面,以便下一个立即获取它的请求)

我想做的是:

  • 客户请求页面
  • 清漆识别超时
  • 清漆将旧页面交付给客户
  • varnish 从后端获取新页面并将其放入缓存

在我的情况下,过时信息不是一个大问题的网站,尤其是当我们谈论几分钟的缓存超时时。

但是,我不希望惩罚用户排队等待,而是立即提供一些东西。这在某种程度上可能吗?

为了说明这一点,以下是对我的服务器运行 5 分钟的示例输出,该服务器配置为缓存一分钟:

HTTP/1.1,200,  1.97,  12710,/,1,2013-06-24 00:21:06
...
HTTP/1.1,200,  1.88,  12710,/,1,2013-06-24 00:21:20
...
HTTP/1.1,200,  1.93,  12710,/,1,2013-06-24 00:22:08
...
HTTP/1.1,200,  1.89,  12710,/,1,2013-06-24 00:22:22
...
HTTP/1.1,200,  1.94,  12710,/,1,2013-06-24 00:23:10
...
HTTP/1.1,200,  1.91,  12709,/,1,2013-06-24 00:23:23
...
HTTP/1.1,200,  1.93,  12710,/,1,2013-06-24 00:24:12
...
Run Code Online (Sandbox Code Playgroud)

我省略了大约运行的数百个请求0.02。但是我仍然担心用户必须等待近 2 秒钟才能获得原始 HTML。

我们不能在这里做得更好吗?

(我遇到Varnish send while cache,听起来很相似,但不完全是我想要做的。)

解决方案

Shane Madden 的回答包含了解决方案,但我没有立即意识到。还有一个细节我没有包含在我的问题中,因为我认为它不相关,但实际上它是。

我目前使用的 CMS 解决方案有一个 varnish 数据库侦听器,因此能够通知 varnish 禁止内容已更改的页面。它发送了一个PURGE带有一些正则表达式的请求来禁止某些页面。 …

performance cache varnish

8
推荐指数
1
解决办法
8356
查看次数

如何在 Linux(和 FreeBSD)上刷新 DNS 解析器缓存

我是几个 Linux 和 FreeBSD 服务器的管理员,这是我遇到的一个问题:

服务器运行一个工具,每分钟对整个网络进行大量 DNS 查询。当它进行查询时,结果会在系统范围内缓存。如果 DNS 条目发生更改,则更改会在很晚之后被发现。

刷新 DNS 缓存的方法是什么?我的老板几乎要我把软件转移到有ipconfig /flushdns通话功能的Windows 上。我告诉我的老板我会在周末解决这个问题,周一所有的 Linux 和 FreeBSD 都会刷新缓存。如果我不这样做,他将强迫我制作 Windows 服务器并在其上运行软件。

如何在 Linux 和 FreeBSD 上刷新 DNS 缓存?

domain-name-system linux freebsd cache

8
推荐指数
1
解决办法
5万
查看次数

如何设置 Nginx 忽略 Pragma: no-cache

我正在为缓存代理服务器设置 Nginx 服务器。

我注意到当请求此标头时缓存不起作用:

Pragma: no-cache
Run Code Online (Sandbox Code Playgroud)

没有这个头,缓存工作正常。

我可以让 Nginx 忽略来自客户端的这个头字段,并缓存结果。因为我不能轻易更改客户端代码(需要重新安装大量设备)。

nginx cache

8
推荐指数
1
解决办法
2万
查看次数

Nginx 不处理 proxy_hide_header 和 proxy_ignore_header 指令

我在尝试让 Nginx 忽略并隐藏代理服务器的一些标头时遇到了麻烦。

我希望 Nginx 隐藏并忽略“Cache-Control”和“Server”标头,但它不起作用,我不知道为什么。

我的配置如下:

location / {
    proxy_pass http://111.131.50.42;
    proxy_hide_header Cache-Control;
    expires 60M;
    add_header Cache-Control "public";
    proxy_ignore_headers Cache-Control;
    proxy_hide_header Cache-Control;
    access_log off;
}
Run Code Online (Sandbox Code Playgroud)

但即便如此,我仍然收到原始“Cache-Control”和“Server”标头。

你知道我做错了什么吗?

PS 我不能使用 ngx_headers_more 模块。我无法将此模块添加到我们的 Nginx 安装中。

nginx cache http-headers

7
推荐指数
1
解决办法
3万
查看次数