我正在做功课,准备从没有缓存的 apache 转移到有缓存的 nginx,可能通过 varnish...
在阅读了各种博客、文章、serverfault 问题等之后,我了解到 varnish 不能与 ssl 一起使用,并且 varnish 在实际缓存动态内容方面可能比 nginx 更好。但我对 nginx 缓存的工作原理以及当需要 ssl 时 nginx+varnish 如何协同工作有些困惑。
如何实现以下功能,使用 nginx+varnish 还是只使用带缓存的 nginx?
一些由自定义 php 引擎驱动的 URL:例如 example.com/this-page 由 example.com/index.php?p=this-page 提供
一些 URL 由 wordpress 驱动:例如 example.com/blog/this-article 由 wordpress 通过 example.com/blog/index.php?p=this-article 处理
应该强制到处使用 SSL:即http://example.com/* 重定向至https://example.com/*
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
您提到的四个要点就可以这样解决了。
- Backend-nginx 带有重写和 proxy_pass 到 php-fpm。
- 带有 Backend-nginx与 WordPress 相关的重写。
- Frontend-nginx 带有简单的虚拟主机用于重定向。
- 与 3 相同。