我看到一些 php 网站在放置 Varnish 后在 0.2 秒内响应。现在我有:
- Nginx 上游
- 1) 前面涂清漆
- 两个带有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 不会:
- 工作(我刚刚在标题中得到了这个:X-Varnish:98306)或
- 缓存
我可以在 Varnish 日志中看到每个请求的内容,但这根本没有帮助。
那么,有谁能帮助我吗?
答案1
Varnish、Nginx 甚至 Apache 都可以通过缓存内容来加速动态网站。这就是它们的作用。它们不能仅通过将网站放在前面来加速缓慢的网站。它们必须缓存通常需要时间才能在服务器上呈现的内容,并将其作为静态网页进行交付。
使内容可缓存的最佳方法是在应用程序中设置适当的缓存标头。应用程序是执行此操作的正确位置,因为缓存性的含义总是不同的内容:
- 可以缓存的公共可见内容
- 无法缓存的公共可见内容
- 可以为合适的人缓存的私人内容
- 无法缓存的私人内容
但有时 Web 开发人员不了解缓存,因此应用程序不会发送正确的缓存标头。如果是这种情况,您必须识别不同类型的内容,并且必须配置 Varnish、Nginx 或 Apache 以对正确类型的内容执行正确的操作。
实际上,我会检查这有多复杂。您已经在您的网站上使用 Nginx。因此对我来说,安装其他软件没有意义,因为 Nginx 也可以处理缓存。但是,如果您喜欢使用 ESI 或非常复杂的检查来区分内容类型,我建议使用 Varnish。
您的后续步骤:
仔细查看应用程序的缓存标头 (Cache-Control)。我假设您的应用程序没有发送它们,因此 Varnish 无法缓存,也无法加速您的应用程序。