PHP-FPM 5.6 和 Nginx 1.6.2 无疑将提供最佳性能,至少在速度方面是如此。因此,我想知道添加 varnish 缓存以获得更快的速度是否有任何利弊。我读过许多博客,它们指出单独使用 nginx + varnish 有点过头了,但我仍然没有收到可以证明这一点的反馈。
答案1
这取决于您如何使用 nginx。如果您不使用 nginx 的任何缓存功能,那么您肯定会从 Varnish 中受益。您必须决定每个功能将具有什么功能。话虽如此,如果您希望进行“双重缓存”,我怀疑这不是一个好主意。
也许您可以告诉我们您的堆栈是如何设置的......
答案2
实际上这取决于你的应用程序。
如果您只提供静态文件,那么在 Nginx Web 服务器前面放置 Varnish 代理是没有意义的。
关于 PHP 应用程序的加速,您已经可以使用 Nginx(请参阅fastcgi_缓存) 应用缓存层。这已经是获得额外速度的简单解决方案了。
然而,在某些情况下使用 Varnish 可能会有帮助:
- 清除缓存内容的能力
- 复杂的缓存规则
- ESI 的使用(边缘侧包括)
例子
PHP 应用程序必须发送适当的缓存标头。
server {
listen 80;
listen [::]:80;
server_name www.example.com;
root /var/www/www.example.com/htdocs;
# CVE 2013-4547
if ($request_uri ~ " ") {
return 444;
}
location / {
try_files $uri index.php?url=$uri&$query_string;
}
location ~ \.php$ {
# global access log is off but for PHP we'd like to log
access_log /var/log/nginx/access.log vhosts;
# use fastCGI
fastcgi_keep_conn on;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
# activate caching for fastCGI
fastcgi_cache php;
fastcgi_cache_bypass $cookie_PHPSESSID; # do not cache if session is active
fastcgi_cache_key "$scheme$request_method$host$request_uri"; # cache key
fastcgi_cache_use_stale error timeout invalid_header http_500; # stale on error
fastcgi_cache_valid 200 301 720s; # cache only HTTP-200 and HTTP-301 responses and define a TTL
fastcgi_pass_header Set-Cookie; # allow Set-Cookie header
fastcgi_no_cache $cookie_PHPSESSID; # do not cache if session is active
# include system wide fastCGI settings (Ubuntu/Debian style)
include fastcgi_params;
}
}