使用 Varnish 以及 php-fpm 和 nginx 是否会提高性能?

使用 Varnish 以及 php-fpm 和 nginx 是否会提高性能?

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;
    }
}

相关内容