我正在探索 Varnish/Nginx/Apache 实施的潜在场景,并且对此设置有一些疑问。
我希望将这三者结合使用,而不是用 Nginx 取代 Apache。
目前我不确定是否应该将 Varnish 放在 Nginx 前面,以提供静态内容并将动态内容传递给 Apache,或者将其放在 Nginx 和 Apache 之间?
我是否应该启用 Nginx 缓存,甚至启用它而根本不使用 Varnish?
我有许多基于 Apache 日志处理统计数据的脚本,我该怎么做才能让我的脚本处理整个日志,而不仅仅是处理仅包含动态请求统计数据的 Apache 日志?
由于 Apache/Nginx 不会记录对缓存文件的访问,我该如何让 Varnish 将访问统计数据传递给 Apache/bginx?
答案1
这实际上取决于相关网站的内容和您使用的缓存方案。
我之前在一个流量非常大的网站(每天 100 万以上独立访问量)上研究过这种情况,最后我们使用了 Nginx 和 Apache,没有使用 Varnish。这是由于现有的缓存方法和页面上的动态内容数量,所以我们只能使用 Varnish 缓存图像和静态文件,如 css 和 js。在测试期间,它变成了一个 Nginx 还是 Varnish 的问题,因为像您一样,我们希望在配置中保留 Apache。我们进行的基准测试表明,在高流量下,Nginx 的性能比 Varnish 更快,所以我们选择了这种方式。
我们可以做但没有做的一件事是在单独的请求中加载动态页面部分,然后将内容插入浏览器中,这将允许我们使用 Varnish 缓存更多对象,同时将动态元素传递给 Apache 并在缓存未命中时通过 Nginx 提供静态内容。
至于日志问题,您很可能需要编写脚本来解析/合并您的日志,然后您可以针对合并日志运行统计脚本。我相信有一些很好的日志合并工具,但目前想不出一个。
答案2
Varnish 不支持 HTTPS。如果要使用它,请将 Nginx 放在外部,与客户端通信。
对于低流量的服务器,我决定只使用 Nginx+Apache。对于更高的负载,比较一下 Nginx 和 Varnish 的缓存性能可能会很有用。