我希望 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 支持的客户端。有谁知道这是如何工作的?
我有一台相当老的 Linux 机器,有 2GB 的内存,没有交换,它运行得很好,系统使用每块未使用的内存进行缓存,效果很好。
然而,当我快要耗尽内存时(例如,分配了 >1950MB),它会变慢到爬行;我怀疑这是因为没有剩余的磁盘缓冲区。我知道 OOM 杀手很快就会生效,但它通常不会到达那里——它变得如此缓慢以至于加载速度达到 30-40,没有任何进程取得任何进展(因此不会分配更多内存),并且我必须重新启动它。
当我尝试杀死一个进程以使机器做出响应时,例如通过转到控制台(通过 Alt-F1,登录,然后执行“killall badprocess”),它通常可以工作,但我必须等待在用户/密码和获得提示之间大约 10 分钟 - 一直在有磁盘活动。
同样,没有交换,所以它没有交换——它只是颠簸,因为它没有剩余的缓冲区。
我将有 100MB 左右专门用于磁盘缓冲区,这会更早地触发 OOM 杀手(毕竟程序的内存更少),但另一方面会使机器始终响应。
有没有办法做到这一点?我一直无法找到执行此类操作的 /proc/kernel 或 /sys/vm 条目。
我是一家网吧的管理员。我们每月的流量限额有限,过去我们的调查表明,500 个视频中有 100 个被重复。我正在寻找任何方法在我们的服务器上缓存 YouTube 视频,以便用户可以从我们的服务器观看相同的视频。我尝试过 Squid 并进行了很多搜索,但没有任何帮助。如果有人可以提出建议,我将非常感激,因为这让我们很头疼。
ZFS 支持文件系统压缩,它还可以缓存经常访问或最近访问的数据。
如果一个系统有很多 CPU 但底层数据存储系统很慢。ZFS 可能会在压缩打开的情况下表现得更好。这可以在写入文件时通过测量 CPU 和磁盘使用率和吞吐量轻松测试。(当然延迟可能存在,但对于大文件来说这不是问题)。
但是缓存呢?如果每次读取数据都必须解压缩,那么这可能不是一个好主意。
缓存的数据是否被压缩?有人有这方面的信息吗?
我的服务器返回以下标头:
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 标头,其中包含请求发起时的日期时间。像现在()...
我正在尝试将 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) 我正在缓存动态生成的页面(PHP-FPM、NGINX)并在它们前面有清漆,这非常有效。
但是,一旦达到缓存超时,我就会看到:
我想做的是:
在我的情况下,过时信息不是一个大问题的网站,尤其是当我们谈论几分钟的缓存超时时。
但是,我不希望惩罚用户排队等待,而是立即提供一些东西。这在某种程度上可能吗?
为了说明这一点,以下是对我的服务器运行 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带有一些正则表达式的请求来禁止某些页面。 …
我是几个 Linux 和 FreeBSD 服务器的管理员,这是我遇到的一个问题:
服务器运行一个工具,每分钟对整个网络进行大量 DNS 查询。当它进行查询时,结果会在系统范围内缓存。如果 DNS 条目发生更改,则更改会在很晚之后被发现。
刷新 DNS 缓存的方法是什么?我的老板几乎要我把软件转移到有ipconfig /flushdns通话功能的Windows 上。我告诉我的老板我会在周末解决这个问题,周一所有的 Linux 和 FreeBSD 都会刷新缓存。如果我不这样做,他将强迫我制作 Windows 服务器并在其上运行软件。
如何在 Linux 和 FreeBSD 上刷新 DNS 缓存?
我正在为缓存代理服务器设置 Nginx 服务器。
我注意到当请求此标头时缓存不起作用:
Pragma: no-cache
Run Code Online (Sandbox Code Playgroud)
没有这个头,缓存工作正常。
我可以让 Nginx 忽略来自客户端的这个头字段,并缓存结果。因为我不能轻易更改客户端代码(需要重新安装大量设备)。
我在尝试让 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 安装中。
cache ×10
nginx ×3
apache-2.2 ×2
http-headers ×2
linux ×2
compression ×1
filesystems ×1
freebsd ×1
gzip ×1
performance ×1
rewrite ×1
squid ×1
varnish ×1
web-server ×1
zfs ×1