为什么 Varnish 对我的 nginx 上游和 nodejs 应用程序的服务器响应时间没有任何影响?

为什么 Varnish 对我的 nginx 上游和 nodejs 应用程序的服务器响应时间没有任何影响?

我看到一些 php 网站在放置 Varnish 后在 0.2 秒内响应。现在我有:

  1. Nginx 上游
  2. 1) 前面涂清漆
  3. 两个带有nodejs的应用服务器

我的 Varnish 设置是标准的:

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

sub vcl_recv {
#some redirects from 80 to https hosts
}

Nginx 监听 443 并将其传递给 :80 varnish,然后 varnish 将其传递给具有两台服务器上游的 nginx :8080。Nginx 和两台服务器位于 LAN 中(Microsoft Azure)

现在我的页面响应时间为 0.7 到 1.5 秒,这太疯狂了,因为主页大部分都在使用 memcached(即使 0.1 秒以下的 ajax 调用也使用了一些 memcached)。

在本地运行 nodejs 应用程序时,我得到的响应是 0.3 - 0.4。

据我所知,Varnish 不会:

  1. 工作(我刚刚在标题中得到了这个:X-Varnish:98306)或
  2. 缓存

我可以在 Varnish 日志中看到每个请求的内容,但这根本没有帮助。

那么,有谁能帮助我吗?

答案1

Varnish、Nginx 甚至 Apache 都可以通过缓存内容来加速动态网站。这就是它们的作用。它们不能仅通过将网站放在前面来加速缓慢的网站。它们必须缓存通常需要时间才能在服务器上呈现的内容,并将其作为静态网页进行交付。

使内容可缓存的最佳方法是在应用程序中设置适当的缓存标头。应用程序是执行此操作的正确位置,因为缓存性的含义总是不同的内容:

  • 可以缓存的公共可见内容
  • 无法缓存的公共可见内容
  • 可以为合适的人缓存的私人内容
  • 无法缓存的私人内容

但有时 Web 开发人员不了解缓存,因此应用程序不会发送正确的缓存标头。如果是这种情况,您必须识别不同类型的内容,并且必须配置 Varnish、Nginx 或 Apache 以对正确类型的内容执行正确的操作。

实际上,我会检查这有多复杂。您已经在您的网站上使用 Nginx。因此对我来说,安装其他软件没有意义,因为 Nginx 也可以处理缓存。但是,如果您喜欢使用 ESI 或非常复杂的检查来区分内容类型,我建议使用 Varnish。

您的后续步骤:

仔细查看应用程序的缓存标头 (Cache-Control)。我假设您的应用程序没有发送它们,因此 Varnish 无法缓存,也无法加速您的应用程序。

相关内容