我们使用 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 中的错误还是我们在配置中做错了什么?
我有一个具有以下重写规则的应用程序:
RewriteCond /tmp/maintenance.html -f
RewriteCond %{HTTP_HOST} !^backdoor.myapp.com$
RewriteRule ^(.*)$ /tmp/maintenance.html [L]
Run Code Online (Sandbox Code Playgroud)
这是我们的“维护模式”。所以我通过将 /tmp/maintenance.html 与真实文件链接来启用维护(并使用 保持后门访问backdoor.myapp.com)。
问题是,这个页面似乎被浏览器缓存了,所以当维护关闭时,用户必须进行硬刷新才能返回主应用程序。
我想知道如何仅在 Apache2 中设置此特定文件的标头。我相信有一个no-cache标题?我假设我想为这个文件设置那个标题,一切都应该很好。
有人可以指导我如何做到这一点,或者解释这个静态文件永远不应该缓存在用户浏览器中的机制吗?
我有一个 PHP 站点,其中包含许多动态生成的页面。我试图求助于 mod_cache 来帮助提高性能,因为在大多数情况下,内容在一天内不会改变。
我已经尽我所能配置了 mod_cache,遵循网络上的示例,包括apache.org 上的 mod_cache 页面。当我设置时LogLevel debug,我会看到一些有关 [未] 发生的缓存的信息。有很多这样的行:
[Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(141): Adding CACHE_SAVE filter for /foo/bar
[Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(148): Adding CACHE_REMOVE_URL filter for /foo/bar
Run Code Online (Sandbox Code Playgroud)
这很好,因为我已经设置了CacheEnable disk /foo, 来表明我想要缓存 /foo 下的所有内容。我是 mod_cache 的新手,但我对这些行的理解是,这只是意味着 mod_cache 已经承认应该缓存 URL,但是应该有更多行表明它正在将数据保存到缓存,并且然后稍后在对同一 URL 的后续点击中检索它们。
无论是否使用 F5 刷新,或使用不同的浏览器或不同的计算机,我都可以点击相同的 URL 直到我脸色发青。日志中总是显示那对行,没有别的。
当我设置时CacheEnable disk /,我会看到更多的活动。但是我不想缓存整个站点,而且站点有很多很多不同的子路径,所以我不想修改代码来no-cache在所有必要的地方设置标题。
我会提到这里正在使用 mod_rewrite,将 /foo/bar 重写为类似的内容index.php?baz=/foo/bar,但我的理解是 mod_cache 使用的是重写前的 URL,而不是重写后的 URL。
据我所知,我的响应头不会妨碍缓存。这是一次命中的示例:
Cache-Control:must-revalidate, …Run Code Online (Sandbox Code Playgroud) 我们不断在 apache 错误日志中弹出以下错误:
[error] (103)Software caused connection abort: cache: error returned while trying to return disk cached data
Run Code Online (Sandbox Code Playgroud)
此错误以不规则的时间间隔发生,但平均每 10 分钟约 1-2 次。在过去的 2 天内,该站点已多次关闭,可能是因为此错误。
日志中弹出的唯一其他错误是client denied by server configuration,在过去 2 天内发生了大约 10 次。
我们使用的是 Apache/2.2.14 (Ubuntu)。最高回报:
top - 15:47:19 up 4:28, 2 users, load average: 0.36, 0.78, 1.32
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.2%id, 0.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3091660k total, 698416k used, 2393244k free, 58732k buffers …Run Code Online (Sandbox Code Playgroud) 我的服务器中有一个非常繁重的站点。服务器的负载总是在 30-50 左右,有时甚至会变成 150,服务器的工作真的很辛苦。我正在寻找一种可以提高服务器性能并减少服务器负载的缓存解决方案。
但我不知道我应该使用哪种缓存解决方案?顺便说一句,我正在使用 Drupal CMS 并且我有 WHM/CPanel
以下是我发现的选项:1- Memcached 2- Varnish 3- Apache mod_cache
有人可以给我一些关于这些平台的比较或指导吗?Apache 的 mod_cache 和 Varnish 一样好用吗?因为在 cPanel / WHM 中安装和配置 Varnish 并不复杂。虽然我读过关于 Varnish 的非常好的评论。
我正在寻找可以直接配置且不复杂的最佳缓存解决方案。我将不胜感激任何帮助或评论。
我使用 apache 作为前端网络服务器,它在 3 个 tomcat 网络服务器节点之间对用户进行负载平衡。我使用 mod_jk 来做到这一点。
我想要的是如何在此演示服务器上配置 apache,以便它缓存具有特定扩展名(如 .js、.png、.jpg)的所有文件?mod_cache ?
非常感谢。
编辑:我无法在 tomcat Web 服务器上更改任何内容。所以所有的魔法都必须发生在 apache 演示负载平衡器服务器上......
我们有一个带有 mod_cache 和 mod_deflate 以及其他模块的 Apache 2.2。问题是,如果我们在 Apache 文档中附加 Vary 标头...
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
Run Code Online (Sandbox Code Playgroud)
...我们最终在缓存中为每个用户代理变体提供了服务资源的副本。这会浪费磁盘空间并降低命中率。
那么,这个问题的首选解决方案是什么?放弃 Vary 标头并仅压缩“安全”资源,例如纯 html?
mod-cache ×7
apache-2.2 ×6
mod-rewrite ×2
cache ×1
http-headers ×1
memcached ×1
mod-deflate ×1
plone ×1
varnish ×1