有没有人开发或知道任何第三方工具(或常用工具的非明显用途)来帮助糟糕的系统管理员确定通过 Varnish 的请求发生了什么?虽然varnishstat
, varnishtop
, 并varnishhist
给我非常高级(或低级)的概述,但我正在寻找可以告诉我以下内容的内容:
我在 Web 服务器上使用 Varnish 作为前端,Apache 2 作为后端。KeepAlive
在这种情况下,Apache 的优缺点是什么?
Apache 和 Varnish 现在在同一台服务器上运行,但我将来可以将它们放在不同的服务器上。
我即将部署一个全新的 node.js 应用程序,我需要一些帮助来设置它。
我现在的设置方式如下。
我有清漆运行 external_ip:80
我有 Nginx 在运行 internal_ip:80
两者都在侦听端口 80,一个内部端口,一个外部端口。
注意:node.js 应用程序在WebSockets 上运行
现在我有了我的新 node.js 应用程序,它将侦听端口 8080。
我可以在 nginx 和 node.js 前面设置清漆吗?
Varnish 必须将 websocket 代理到端口 8080,但是诸如 css、js 等静态文件必须通过端口 80 到达 nignx。
Nginx 不支持开箱即用的 websockets,否则我会这样设置:
清漆 -> nignx -> node.js
我们的网站有许多大型 PDF 和 MP3 文件,我们希望将它们作为静态文件缓存在 Varnish 中。目前我们没有做太多特别的事情 - 只需删除vcl_recv
和set resetp.ttl = 100w;
中的 cookie vcl_fetch
。
问题似乎是当这些文件之一被请求时(可能是旧浏览器)并且它不在 Varnish 缓存中。Varnish 从后端下载文件时会出现延迟。我的理解是在数据完全加载之前它不会开始交付给客户端。这可能需要 20 秒左右,有时 Adobe Acrobat 或 MP3 插件会混淆。
有没有办法既pass
将内容直接而下载并为下一个匹配的客户端请求,将它保存在缓存中?
有时在繁忙的 Pressflow 站点上,我注意到未经身份验证的用户超时,而服务器的端口远未饱和,有大量未使用的内存并且服务器负载非常低。
除此之外,自从我迁移到具有新配置的新 Varnish 服务器后,站点的带宽使用量下降了大约 30%。因此我怀疑下降可能是因为 Varnish 的错误配置。
以下是一些相关参数:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-b localhost:8080 \
-u varnish -g varnish \
-S /etc/varnish/secret \
-p thread_pools=14 \
-p thread_pool_min=200 \
-p thread_pool_max=5000 \
-p listen_depth=128 \
-p thread_pool_add_delay=2\
-p lru_interval=20 \
-h classic,72227 \
-p session_linger=120 \
-p sess_workspace=32768 \
-p connect_timeout=600 \
-s malloc,15G"
Run Code Online (Sandbox Code Playgroud)
# 这是 varnishstat 的最新输出:
1+21:07:54
Hitrate ratio: 10 13 13
Hitrate avg: 0.8405 0.8408 0.8408
21003013 158.92 129.32 Client connections accepted
35390015 …
Run Code Online (Sandbox Code Playgroud) 编辑:系统磁盘空间不足,因此编译器无法创建文件。varnishd 的输出不会告诉你这一点。
将在 6 小时后回答我自己。
我正在运行由主管控制的清漆。
清漆运行缓慢,当我使用主管重新启动清漆时没有进行任何更改。
但是重启失败,手动执行后
sbin/varnishd -F -f etc/varnish/ourconfig.vcl -a localhost -p thread_pool_min=10 -p thread_pool_max=50 -s malloc,250M
我收到以下错误
运行 VCC 编译器失败,退出 1
VCL 编译失败
而已。
这是我们的 vcl 文件:
backend default {
.host = "127.0.0.1";
.port = "8002";
.first_byte_timeout = 300s;
}
sub vcl_recv {
if (req.request == "BAN") {
ban("obj.http.X-Keywords ~ " + req.http.X-Ban-Keywords);
}
if (req.request != "GET" && req.request != "HEAD") {
return (pass);
}
// Remove has_js and Google Analytics __* cookies.
set …
Run Code Online (Sandbox Code Playgroud) 我在 Drupal 站点上通过 Apache 运行 Varnish。我有一个 PHP 脚本,它在我网站的某个路径上执行,需要很长时间……比如 60 - 120 秒。尝试访问该页面时,Varnish 总是在 60 秒后给我 503 大师冥想超时。
我已经尝试将 Varnish connect_timeout 设置为一个非常高的值......我已经尝试将 Apache 的 php.ini 中的所有超时设置为非常高的值......但没有运气:Varnish 在 60 秒后一直给我 503 错误.
所以这是我的问题:这个 60 秒超时值来自哪里?我在这里拔头发...
(仅供参考:如果我从图片中取出 Varnish,Apache 在 60 - 120 秒后按预期提供页面,这让我认为超时必须在 Varnish 一侧的某个地方......)。
我需要设置一个具有负载平衡的网站以容纳更多访问者,
我在论坛上看到 varnish(balance)->apache(web1&2)->mysql(dbserver) 是可行的方法。
我知道如何设置 varnish->single webserver->mysql 但不知道如何设置两个 web 服务器来平衡,
但是我怎样才能实时同步两个网络服务器内容呢?我的自定义应用程序允许访问者发布文件。
请告诉我如何配置这个?
我的设置。
(internet)
|
(load balance server)
/ \
/ \
(webserver1) (webserver2)
\ /
(database server)
Run Code Online (Sandbox Code Playgroud)
谢谢。
我在同一台服务器上的 Varnish(4.1.0) 前面有 Nginx(1.9.9)。
//nginx
upstream varnish {
server 127.0.0.1:8391;
keepalive 16;
}
location ~ \.php$ {
proxy_pass http://varnish;
proxy_http_version 1.1; #for 1.0 varnish shows blank page
proxy_set_header Connection "";
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_connect_timeout 600;
}
//varnish
DAEMON_OPTS="-a :8391 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,1024m"
Run Code Online (Sandbox Code Playgroud)
对于 0.001% 的请求,nginx 显示错误:
[error] 5331#5331: *7392847 upstream prematurely closed connection while reading response header from upstream, …
Run Code Online (Sandbox Code Playgroud) 我在 CentOS 7.8 上使用 Apache 2.4.43 以及 Varnish 6 和 PHP-FPM 来为 Magento 2 网站提供服务。
Varnish 侦听端口 80。Apache 侦听 8080 以向 Varnish 提供内容,并且还侦听端口 443,该端口将 HTTPS 请求代理到 Varnish,如下所示:
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:80/
RequestHeader set X-Forwarded-Port "443"
RequestHeader set X-Forwarded-Proto "https"
Run Code Online (Sandbox Code Playgroud)
这适用于大多数请求,但偶尔(约 10% 的请求)我会收到来自 Varnish 和 Apache 的 503 响应。我在 Apache 日志中看到的唯一错误是:
[proxy_http:error] [pid 6719:tid 140054596265728] (70008)Partial results are valid but processing is incomplete: [client x.x.x.x:53760] AH01110: error reading response, referer: http://example.com
Run Code Online (Sandbox Code Playgroud)
如果我重试该请求,它通常会立即起作用,尽管有时我必须刷新几次才能满足请求。我注意到,当发出大批量请求时(即包含数百个外部资源的页面),这种情况会更频繁地发生。我还注意到,这种情况似乎发生在较大的文件上,而不是较小的文件上。
我猜测这可能是某种超时,但我不确定要调整哪些值或如何进一步调试它。
我尝试过的事情包括以下内容:
varnish ×10
apache-2.2 ×3
nginx ×2
apache-2.4 ×1
drupal ×1
failed ×1
mod-proxy ×1
mysql ×1
node.js ×1
performance ×1
php ×1
proxy ×1
streaming ×1
timeout ×1