我正在对 Ubuntu 服务器上的 Varnish 3.x 设置进行故障排除。我通过基于命名的虚拟主机在两个站点上运行 Drupal 7。在尝试让 Varnish 与 Drupal 良好配合之前,我尝试将 Varnish 从缓存中转换为 PNG。
curl -I以下是我从PNG 文件请求中获得的标头:
HTTP/1.1 200 OK
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Sun, 07 Oct 2012 21:18:59 GMT
ETag: "a57c2-3850-4cb7ea73db6c0"
Accept-Ranges: bytes
Content-Length: 14416
Cache-Control: max-age=1209600
Expires: Thu, 25 Oct 2012 22:55:14 GMT
Content-Type: image/png
Accept-Ranges: bytes
Date: Thu, 11 Oct 2012 22:55:14 GMT
X-Varnish: 1766703058
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Varnish-Cache: MISS
Run Code Online (Sandbox Code Playgroud)
以下是同一文件的标头,但绕过了 Varnish(端口 8080):
HTTP/1.1 200 OK
Date: Sat, 13 Oct 2012 …Run Code Online (Sandbox Code Playgroud) 我想对我的应用程序服务器进行负载平衡,并缓存来自它们的响应。
我在 HAProxy 的网站上阅读了 2012 年的一篇文章,该文章旨在消除 HAProxy 和 Varnish 之间的混淆:
http://blog.haproxy.com/2012/07/04/haproxy-and-varnish-comparison/
这篇文章基本上说HAProxy只是一个反向代理负载均衡器(无缓存),而Varnish是一个反向代理缓存(无负载均衡),因此它们是互补的。
但是今天,我可以在 Varnish 文档中看到它也进行负载平衡:
https://www.varnish-cache.org/trac/wiki/LoadBalancing
所以我只能猜测这个功能是从2012年开始引入的,现在在负载均衡方面直接与HAProxy竞争。
现在考虑到我需要一个反向代理缓存 + 负载平衡器,我是否可以只使用带有 Varnish 的单个服务器,这两者都可以吗?与典型的 HAProxy <-> Varnish 设置相比,可能有什么限制?
我目前在我们的开发网站前运行 Varnish 作为反向代理,在部署到生产之前进行测试。我不得不处理的一件事是日志记录:在直接访问世界中,Apache 将客户端 IP 地址记录到access_log和error_log。当每个客户端连接都来自我们的 Varnish 框时,这会不太有用。
我已经使用SetEnvIf和进行了一些自定义LogFormat,现在我们可以access_log智能地从REMOTE_HOST或记录适当的 IP X-Forwarded-For,具体取决于传入连接的来源。error_log虽然这没有任何作用。据我所知,我无法覆盖此日志中的客户端 IP。
那么,您登录反向代理世界的解决方案是什么?我是否应该取消标准的 Apache 日志记录并将我的精力集中在其他地方,即。在代码中?我对这里的使用统计和安全审计都很感兴趣。
首先,我不确定 Varnish 是否可以用作网络缓存来加速小型办公室的互联网。
我们有一个办公室,周围有 20 个系统,我们经常浏览同一组网站。
我设置了鱿鱼,它运行了一段时间。但我无法缓存 YouTube 视频,这是我的主要目标。
我最近在玩 nginx 时遇到了 Varnish,但我看到它被用作后端服务器的网络加速器。
我们可以以透明的方式使用 Varnish 而不是 nginx 来进行网络缓存吗?我的意思是说我办公室的人不需要在他们的机器上配置代理。
谢谢,
-拉胡尔
当尝试加载需要更长时间在 Web 服务器上生成的页面时,Varnish 不断抛出 503 Service Unavailable。
在 varnishlog 中,我可以看到一个FetchError c http read error: 0错误,但我不太确定它的含义。
我还尝试增加后端超时:
backend default {
.host = "x.x.x.x";
.port = "80";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.between_bytes_timeout = 600s;
}
Run Code Online (Sandbox Code Playgroud)
后端是一个 Apache 服务器。
所有其他页面工作正常。
有任何想法吗?
我在具有 512mb RAM 的专用 VPS 上为客户托管一个网站。在过去的 2 周内,由于 0% 的空闲内存(或空闲交换),它已经两次停机。该站点非常依赖数据库,因为它运行具有 60 多个模块的 Drupal。平均而言(根据网站所有者的说法),每月大约有 6,000 名访问者(约 200 人/天)。不过,它可能会增长得相当快——它刚刚推出不到一年。
所以我坐下来终于掌握了对 Apache 的理解。我以前手动配置过 httpd.conf,但还没有完全理解所有的复杂性。
我了解到我应该通过 MaxClients 以 Mb 为单位计算我的平均 Apache 进程大小,并且这个数字不应该超过系统可用的内存。根据 Top 的说法,每个进程大小都略低于 7%(这大约是 1.4Mb,对吧?)。512/1.5 = 341...这对我来说似乎非常大。我误解了什么吗?起初,我认为我应该按百分比(在本例中为~7)来计算进程大小。也许我第一次是对的?
这为其他操作系统进程提供了一点空间。
数据库 (MySQL) 在同一台主机上。
我的问题是双重的。1) 我正在考虑安装 Varnish 以帮助减少数据库负载(几乎所有访问者都未经身份验证),加快初始响应时间等......对于一个只有这么少内存的系统,我疯了吗?如果我这样做,我正在考虑给它 256Mb。想法?显然,事情不会在缓存中停留很长时间。256/7 = ~36 页。然而,我希望“主要”页面将被缓存。主页和主页后面的一些主要页面将占用大量数据库,我想尽可能减少磁盘 IO 量。
2) 如果我确实安装了 Varnish,我想知道是否应该将 Apache 设置调整为当前设置的一半,因为我已经给了 Varnish 一半的内存。在这种低级配置中,Varnish 和 Apache 之间是什么关系?
我在 Unicorn 上部署了一个生产 Rails 应用程序,前面有 nginx 用于静态文件服务。我现在需要 Varnish 的一些功能,我想知道如何引入它。
有些人把 Varnish 放在前面,而有些人把 nginx 放在前面。我还没有听说有人只使用Varnish 和 Unicorn,但我想这是有效的。
前面有 nginx 的人似乎是为了 gzip 和 SSL 终止而这样做的。SSL 与我的应用程序无关,但 gzip 是。我想清漆很快就会得到它,所以为了简单起见,我可以不用一段时间。
这两种方法还有其他优点/缺点吗?是否有规范的最佳实践布局?
我有一个网站目前正在使用 Varnish 来缓存 HTTP 请求,但是出于多种原因,它弊大于利。
我的问题是我找不到阻止所有 http 请求通过它的方法。如果我停止 varnishd 服务,则整个站点都会关闭。varnish statup 选项表明正在使用端口 2000,但 Apache 上似乎没有任何与之相关的内容。Apache 配置指向标准端口 80。
这是 CentOS 机器,带有 Apache 2.2.3、Varnish 2.0.6
新机器运行 CentOS 5.6,httpd 和 mysql 安装并运行。我已经通过 yum 安装了 Varnish,没有任何错误,但我无法运行varnished
例如,如果我想运行在 Varnish-wiki 上看到的以下命令:
varnishd -f /usr/local/etc/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:8080
系统提示我以下响应 -bash: varnishd: command not found
运行varnishadm工作并产生Child in state running
,确认清漆确实在运行。
我也尝试了上述所有方法,sudo但无济于事。我在这台机器上没有 root 访问权限,这可能是导致这种情况的原因吗?还有什么我可以检查的吗?
我遇到了很少见的 503 错误,这些错误似乎难以确定。Varnishlog 快把我逼疯了,因为我似乎无法从中获得我想要的信息。
我希望看到 Varnish 所看到的客户端和后端通信。我认为记录在 Varnish 的默认错误页面上的 XID 号可以让我从日志缓冲区中过滤出确切的请求。但是,varnishlog 参数的组合没有给我我需要的输出。
以下仅显示客户端通信:
varnishlog -d -c -m ReqStart:1427305652
Run Code Online (Sandbox Code Playgroud)
虽然这仅显示了由此产生的后端通信:
varnishlog -d -b -m TxHeader:1427305652
Run Code Online (Sandbox Code Playgroud)
是否有单行显示整个请求?