是否值得使用 Nginx 作为 Varnish 前面的 SSL/TLS 终止器,而不是仅仅将 Nginx 本身用作缓存?

是否值得使用 Nginx 作为 Varnish 前面的 SSL/TLS 终止器,而不是仅仅将 Nginx 本身用作缓存?

首先,据我了解,Varnish Cache 只是一个 HTTP 加速器,因此不支持通过 HTTPS 进行客户端或服务器端(后端)连接,尽管存在本白皮书。如果不是这种情况,而 Varnish 确实支持客户端 HTTPS 请求,那么我的问题就是:我该如何设置?


好的,所以我的设置目前只是一个 VPS 上的 LEMP 堆栈,通过 HTTPS 提供网页;HTTP 请求被 301 重定向到 HTTPS,并使用 HSTS。任何有关可扩展性的相关评论也将不胜感激,因为该网站平均每天有大约 7000 个会话。根据我所读到的内容,使用 Varnish 进行此设置的最佳方法是让 Nginx 充当 SSL/TLS 终止器,将请求转发到 Varnish,后者又将未缓存的请求转发回 Nginx 进行处理。让我们将客户端 SSL/TLS 终止 Nginx 实例称为“Nginx A”,将处理未缓存请求的 Nginx 实例称为“Nginx B”(尽管它们可能是同一个安装实例,只是由不同的虚拟服务器块处理):

                     +---------------+ 
+----------+  HTTPS  |    Nginx A    |  HTTP  +---------+
| Internet | <-----> |   (SSL/TLS    | <----> |         |
+----------+         |  terminator)  |        |         |
                     +---------------+        | Varnish |
                     |    Nginx B    |        |         |
                     | (for uncached | <----> |         |
                     |   requests)   |  HTTP  +---------+
                     +---------------+

我的问题如下:这个设置是否比我当前的 LEMP 堆栈(没有 Varnish)和 Nginx 缓存请求更好?当然,Varnish 的缓存比 Nginx 要好得多,但我认为在新的设置中,Nginx A 将成为一个明显的瓶颈,因为任何由 Varnish 提供的缓存请求都必须由它处理,而未缓存的请求的响应速度会比现在更慢,因为 Nginx B 必须先将它们推送到 Nginx A,然后才能通过互联网发送。

相关内容