nginx 和 varnish 用于缓存强制 SSL

nginx 和 varnish 用于缓存强制 SSL

我正在做功课,准备从没有缓存的 apache 转移到有缓存的 nginx,可能通过 varnish...

在阅读了各种博客、文章、serverfault 问题等之后,我了解到 varnish 不能与 ssl 一起使用,并且 varnish 在实际缓存动态内容方面可能比 nginx 更好。但我对 nginx 缓存的工作原理以及当需要 ssl 时 nginx+varnish 如何协同工作有些困惑。

如何实现以下功能,使用 nginx+varnish 还是只使用带缓存的 nginx?

  1. 一些由自定义 php 引擎驱动的 URL:例如 example.com/this-page 由 example.com/index.php?p=this-page 提供

  2. 一些 URL 由 wordpress 驱动:例如 example.com/blog/this-article 由 wordpress 通过 example.com/blog/index.php?p=this-article 处理

  3. 应该强制到处使用 SSL:即http://example.com/* 重定向至https://example.com/*

  4. www 应重定向到顶级域名:iehttp://www.example.com/* 重定向至https://example.com/*

如果存在缓存版本,则所有这些都提供该版本(如果我理解正确的话 - 缓存是基于时间的,因此如果我对该页面进行更新,则如果是 varnish 路由,则需要调用 PURGE;如果是 nginx 路由,则需要手动删除文件)

答案1

如果您想使用 nginx 和 Varnish,我建议这样做。

  • nginx 作为前端和 SSL 终止器,配置 Varnish 作为后端。这还将规范化(重写)主机名,例如从 www.example.org 到 example.org。
  • Varnish 用于缓存来自其后端 nginx 的内容
  • nginx 的虚拟主机运行在端口 8080 上,并带有所有“应用程序逻辑”,比如 WordPress 重写、自定义 PHP 引擎重写等等。

因此基本上你会有一个像这样的堆栈:

nginx -> Varnish -> nginx -> php-fpm

您提到的四个要点就可以这样解决了。

  1. Backend-nginx 带有重写和 proxy_pass 到 php-fpm。
  2. 带有 Backend-nginx与 WordPress 相关的重写
  3. Frontend-nginx 带有简单的虚拟主机用于重定向。
  4. 与 3 相同。

相关内容