我们一直在运行 nginx -> uWSGI,现在我们正在评估将 Varnish 作为 nginx 和 uWSGI 之间的缓存层(类似于 http://www.heroku.com/how/architecture)。
但是,nginx 只支持背面的 HTTP 1.0,因此它必须为每个请求创建与 Varnish 的新连接。
许多人建议在 Varnish 之前运行 nginx,但是使用像 Cherokee 这样的东西来消除 HTTP 连接开销不是更有意义,因为它在后面支持 HTTP 1.1?
我的设置是 Intel® Core™ i7-2600 和 RAM 16 GB DDR3 RAM
varnish+nginx+php-fpm+apc 用于使用 W3 Total Cache 和 CDN 的不是很重的 WordPress 博客
我的问题是,根据 blitz.io 清漆每秒 55 次点击后开始发出超时。此时的 CPU 使用率几乎不到 1%。可用内存始终保持 10GB+。
我尝试直接对 php-fpm 进行基准测试,结果为 150 次点击/秒,没有任何超时。但在那之后,CPU 使用率达到 100% 并停止响应。
你能帮我优化它以处理更多吗?
据我了解 nginx 在这里没有任何关系,所以我没有包含它的配置。
php-fpm 配置
listen = /tmp/php5-fpm.sock
listen.allowed_clients = 127.0.0.1
user = nginx
group = nginx
pm = dynamic
pm.max_children = 150
pm.start_servers = 7
pm.min_spare_servers = 2
pm.max_spare_servers = 15
pm.max_requests = 500
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] …Run Code Online (Sandbox Code Playgroud) 我想知道在用于提供内容时是否有人对 Varnish Vs Memcache 有任何评论/基准/建议(通常 2-5kb JS 文件取决于请求中的参数;可能有数千个差异文件)
目前我们正在使用 nginx + Varnish + LAMP 来做到这一点。
我正在阅读 nginx 的 memcached 模块,想知道是否有人在 Memcache 中缓存内容并直接从 nginx 提供服务(或从 LAMP 中提取,以防万一),而不是将请求传递给 Varnish 并让它执行同样的工作。
总体而言,是否有任何关于使用 Memcache Vs Varnish 设置和获取(以及偶尔清除)内容(通常为 2-5kb)的基准
谢谢
我即将部署一个全新的 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 一侧的某个地方......)。
我正在尝试让 Puppet 将我们的 Varnish 3 服务器升级到 Varnish 4,这是一个需要更新配置文件的重大更新,否则它将无法启动。这是在 Ubuntu 12.04 上。
Varnish 模块基本上是用这些类和依赖项构建的:
Class['varnish::repo']
-> Class['varnish::install']
-> Class['varnish::tools']
-> Class['varnish::config']
~> Class['varnish::service']
Run Code Online (Sandbox Code Playgroud)
我已经更新了APT-回购网址varnish::repo,设置ensure=>latest在varnish::install并提供了一个更新的配置文件varnish::config。到现在为止还挺好。
当 Puppet 运行这些依赖项时,运行会在该varnish::install阶段失败,因为 Apt 会在升级 Varnish 守护进程后立即尝试重新启动它,而没有给 Puppet 替换配置文件的机会。类中的失败varnish::install会导致依赖链中断,并导致其余类也失败。结果是损坏的 Varnish 安装需要手动恢复。
你如何处理这个问题?
我考虑过使用policy-rc.d,它本质上是告诉 Apt 不要执行服务的自动停止和启动。我尝试在升级之前创建文件并在升级之后将其删除。
file {'/usr/sbin/policy-rc.d':
ensure => $ensure,
content => "#!/bin/sh\nexit 101",
owner => 'root',
group => 'root',
mode => '0755',
}
Run Code Online (Sandbox Code Playgroud)
当然创建和删除是一个问题,因为 Puppet 将其视为重复资源。
你问我为什么要在安装后再次删除该策略?因为我们过去常常unattended-upgrades执行较小的安全升级,而我希望在这些情况下允许 …
我想使用Varnish 中的hash Director将没有查询参数的同一 URL 的所有请求重定向到同一服务器:
例如,
http://example.com/foo/bar?a=1
http://example.com/foo/bar?a=2&b=3
Run Code Online (Sandbox Code Playgroud)
应该散列到同一台服务器。我只想在主机和路径上散列。
这是我的配置:
sub vcl_init {
new workers = directors.hash();
workers.add_backend(worker_1, 1);
workers.add_backend(worker_2, 1);
workers.add_backend(worker_3, 1);
}
Run Code Online (Sandbox Code Playgroud)
我知道我需要在这里设置哈希函数:
sub vcl_recv {
set req.backend_hint = workers.backend(...);
}
Run Code Online (Sandbox Code Playgroud)
在没有查询字符串的情况下,我应该在主机 + 路径上放什么来散列?