如何配置 Varnish,以便对匹配“*.css”的请求的所有响应都在客户端的浏览器中缓存 30 天?
我想要实现的是让 Varnish 设置正确的“Expires:”和/或“Cache-Control”设置,以便所有 CSS:s 都缓存 30 天,而不管后端对这些对象。
情况是:
我正在构建 PHP 应用程序,并且需要 http 缓存。
Varnish 很棒,很多人告诉我 Varnish 将缓存数据存储在 RAM 中。但我希望它缓存在硬盘中。
有什么方法可以将 Varnish 缓存数据存储在硬盘中?
如何监控 memcached 以了解是否/发生了多少次驱逐,以及使用/释放了多少内存。
我有一个 8 驱动器 RAID 10 设置连接到 Adaptec 5805Z,运行 Centos 5.5 和截止日期调度程序。
基本dd读取测试显示 400mb/sec,基本dd写入测试显示大致相同。
当我同时运行两者时,我看到读取速度下降到约 5mb/sec,而写入速度大致保持在 400mb/sec。iostat -x如您所料,输出显示在磁盘受到写入轰炸时执行的读取事务很少。
如果我关闭控制器的回写缓存,我看不到 50:50 的分割,但我确实看到了明显的改进,大约 100mb/s 读取和 300mb/s 写入。我还发现如果我降低驱动器队列上的 nr_requests 设置(大约 8 个似乎是最佳的),我最终可以获得 150mb/sec 的读取和 150mb/sec 的写入;IE。总吞吐量降低,但肯定更适合我的工作量。
这是一个真实的现象吗?还是我的综合测试过于简单?
发生这种情况的原因似乎很清楚,当调度程序从读取切换到写入时,它可以运行大量的写入请求,因为它们都只是落在控制器缓存中,但必须在某个时候执行。我猜当调度程序开始尝试再次执行读取时,实际的磁盘写入正在发生,导致执行的读取请求很少。
这似乎是一个合理的解释,但在具有非平凡写入负载的系统上使用回写缓存似乎也是一个巨大的缺点。我整个下午都在寻找有关此问题的讨论,但一无所获。我错过了什么?
我们是非洲的 ISP(带宽很贵,每 Mbit 超过 800 美元)。我认为与其投资更多带宽,不如投资于 Web 代理设备。
我更喜欢使用成熟的设备而不是开源工具。BlueCoat 或 BarracudaNetworks 是我的第一选择。
我们目前有 50 Mbits,我们计划在今年年底之前拥有 100 Mbits,我们正在大幅增长。
我的问题是:
Nginx wiki 对如何使用 php-fpm 和 fastcgi_caching 正确设置 nginx 的解释非常模糊,用于具有 cookie 的站点,即 wordpress、drupal、vbulletin 等。
我从http://vbtechsupport.com/796/下载了一个名为 centmin 的修改过的 nginx bash shell 安装脚本,同时它安装了 nginx v1.0.2、php 5.3.6 php-fpm、mariadb 5.2.6 mysql、memcached 1.4.5 服务器并通过shell脚本自动进行siege benchmark,它缺少设置fastcgi_caching以缓存php的配置参数。
它还缺乏为本地服务的文件缓存静态文件的设置。当静态文件驻留在同一磁盘上时,对它们使用 proxy_cache 有什么意义吗?
任何人都得到了一些提示和信息链接,以阅读有关正确设置 php (php-fpm) fastcgi_caching 以及缓存本地驻留静态文件的教程?
谢谢
我们使用 mod_cache 在 Apache 2.2.19 后面运行 Plone 3.3.6。我们最近注意到 Apache 正在缓存对范围请求的 206 响应,然后在发出对完整资源的请求时提供该部分响应。
似乎发生了什么:
这偶尔会导致我们在某些网站上的 css 出现问题
我可以始终如一地复制这一点:我编写了一个小 Python 脚本来发出范围请求。
我认为我们的 Apache 配置没有做任何不寻常的事情。我们使用反向代理配置来提供来自 Plone 的页面。mod_cache相关的Apache配置如下:
CacheEnable disk /
CacheDisable /static
CacheDisable /sitemap.xml.gz
CacheDisable /robots.txt
CacheIgnoreHeaders Set-Cookie
UseCanonicalName On
RequestHeader edit Accept-Encoding ^.*gzip.*$ gzip early
RequestHeader edit Accept-Encoding ^(?!gzip).*$ "" early
Run Code Online (Sandbox Code Playgroud)
在Apache的缓存导不包括在响应“必须有”为它缓存状态代码表206级的响应。这是 Apache 中的错误还是我们在配置中做错了什么?
我们有一个带有巨大 disk_cache(> 500.000 个条目,> 50 GB 磁盘空间使用)的 Apache 设置。缓存每天增长 16 GB。
我的问题是缓存的增长速度几乎与从缓存文件系统中删除文件和目录的速度一样快!
缓存分区是 iSCSI 存储上的 ext3 文件系统(100GB,“-t news”)。Apache 服务器(充当缓存代理)是一个 VM。disk_cache 配置为 CacheDirLevels=2 和 CacheDirLength=1,并包括变体。典型的文件路径是“/htcache/B/x/i_iGfmmHhxJRheg8NHcQ.header.vary/A/W/oGX3MAV3q0bWl30YmA_A.header”。
当我尝试调用htcacheclean来驯服缓存(非守护进程模式,“htcacheclean-t -p/htcache -l15G”)时,IOwait 正在经历几个小时。没有任何可见的动作。只有在几个小时后,htcacheclean 才开始从缓存分区中删除文件,这需要几个小时。(2009年Apache邮件列表中提出了类似的问题,没有解决:http : //www.mail-archive.com/dev@httpd.apache.org/msg42683.html)
高 IOwait 会导致 Web 服务器的稳定性出现问题(连接到 Tomcat 后端服务器的桥有时会停止)。
我想出了我自己的修剪脚本,它从缓存的随机子目录中删除文件和目录。才发现脚本的删除率只是略高于缓存增长率。该脚本需要大约 10 秒来读取 a 子目录(例如 /htcache/B/x)并释放大约 5 MB的磁盘空间。在这 10 秒内,缓存又增加了 2 MB。与 htcacheclean 一样,当连续运行修剪脚本时,IOwait 上升到 25%。
任何的想法?
这是特定于(相当慢的)iSCSI 存储的问题吗?
我应该为巨大的 disk_cache 选择不同的文件系统吗?分机2?ext4?
这种场景有没有内核参数优化?(我已经尝试了截止日期调度程序和较小的 …
在终端服务器环境中,Windows Server 2003 是否基于每个用户缓存特定的 DLL?
背景故事:
我们最近不得不为我们的应用程序更新一些 DLL,并且一些客户端仍然遇到更新要解决的问题。DLL 的内部版本号改变了,但显然名称没有改变。所以我想弄清楚这些用户是否在他们的配置文件中的某个地方有一个旧 DLL 的缓存版本。
我有一个缓慢的网络应用程序,我在它前面放置了 Varnish。所有页面都是静态的(它们不会因不同的用户而变化),但它们需要每 5 分钟更新一次,以便包含最近的数据。
我有一个简单的脚本 ( wget --mirror),它每 15 分钟抓取一次整个网站。每次爬行大约需要 5 分钟。爬网的目的是更新 Varnish 缓存中的每个页面,这样用户就不必等待页面生成(因为所有页面都是最近生成的,这要归功于蜘蛛)。
时间线如下所示:
0:00:00 到 0:05:00 之间的请求可能会访问尚未更新的页面,并且将被迫等待几秒钟以等待响应。这是不能接受的。
我想做的是,也许使用一些 VCL 魔法,总是将来自蜘蛛的请求转发到后端,但仍将响应存储在缓存中。这样,用户将永远不必等待页面生成,因为没有 5 分钟的时间窗口,其中部分缓存是空的(可能除了在服务器启动时)。
我怎样才能做到这一点?
cache ×10
varnish ×3
performance ×2
apache-2.2 ×1
apache2 ×1
disk-cache ×1
dll ×1
ext3 ×1
isp ×1
linux ×1
mariadb ×1
memcached ×1
mod-cache ×1
networking ×1
nginx ×1
php-fpm ×1
plone ×1
proxy ×1
scheduler ×1
web ×1
web-server ×1