【问题标题】:Why every request is being processed by PHP-FPM? (even if I'm using Cache)为什么每个请求都由 PHP-FPM 处理? (即使我正在使用缓存)
【发布时间】:2013-07-08 18:47:04
【问题描述】:

我正在运行 Wordpress:Nginx + PHP-FPM + APC + W3 Total Cache + PageSpeed。 经过3天的研究和配置,我配置成功了。

运行“top”并点击一些缓存页面,它显示:

PID   USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
13387 nginx     20   0  472m  11m 4664 S 12.3  2.0   0:46.55 nginx
17577 nginx     20   0  443m  47m  29m S  0.7  8.0   0:42.88 php-fpm
17591 nginx     20   0  438m  43m  29m S  0.7  7.2   0:42.59 php-fpm
1486  mysql     20   0  851m  21m 4832 S  0.3  3.7   1:24.71 mysqld
17907 nginx     20   0  438m  48m  34m S  0.3  8.1   0:36.78 php-fpm
18065 nginx     20   0  442m  47m  29m S  0.3  8.0   0:33.49 php-fpm
18543 nginx     20   0  445m  63m  42m S  0.3 10.6   0:22.94 php-fpm
21125 root      20   0 15012 1148  868 R  0.3  0.2   0:00.86 top
1     root      20   0 19356 1388 1136 S  0.0  0.2   0:00.74 init

1) 为什么每个请求都由 PHP-PFM 处理? W3 Total Cache 不应该阻止 PHP-FPM 处理请求吗?

我知道我的页面正在被缓存,因为每个页面都以 HTML 结尾返回:

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/
Page Caching using disk: enhanced

2) 如果我在 Nginx 前面安装 Varnish,它会阻止 PHP-FPM 处理请求吗? (性能会提高吗?我用的是Micro Ec2,Ram = 613MB)

PS:响应标头正在从服务器返回“Cache-Control: max-age=0, no-cache”。我不知道这是否会影响 W3 缓存。

我的规格:

  • 亚马逊微型 EC2
  • Linux 版本 3.4.48-45.46.amzn1.x86_64 Red Hat 4.6.3-2(我认为它基于 CentOS 5)
  • PHP 5.3.26 (fpm-fcgi)

【问题讨论】:

    标签: wordpress caching nginx php w3-total-cache


    【解决方案1】:

    我不知道这个 w3 总缓存是如何工作的,但让我告诉你一些事实,

    首先在nginx级别,任何php页面都必须命中php引擎,因为这可能是你的try_files告诉nginx要做的,如果w3总缓存有某种页面的html缓存,那么没有对 nginx 配置进行一些更改,即使缓存存在,您仍然会点击 php。如果缓存不是真正的 html 形式,那么 php 引擎可能会检查页面是否存在,然后决定是重建页面还是提供缓存的页面,所以你肯定需要 php 来运行,区别在于它不会访问数据库,也不会进行任何处理,而是提供缓存页面。

    第二个问题,varnish,是的,varnish 实际上会很好,它会让你不再需要缓存插件,但是你需要确保 wordpress 知道什么时候让 varnish 清除缓存的页面,服务器将是user -&gt; varnish -&gt; nginx -&gt; php,如果 varnish 有一个缓存页面或资产(css、js 等),它将直接提供它而不将请求传递给 nginx,我已经在网站上尝试过它和缓存页面的响应时间肯定有所改善,即使我使用ctrl+f5 请求整个页面而不使用缓存,它仍然返回非常快,就好像该页面只是一个普通的 html 页面一样。
    你仍然需要弄乱清漆配置,或者至少我就是这样做的,因为它需要一点学习,但到目前为止,我所做的只是从博客和其他东西中复制和粘贴,它工作得很好与我一起。

    【讨论】:

      【解决方案2】:

      我在我的服务器前面安装了 Varnish,但它再次被 PHP-FPM 处理。

      问题是 URL 末尾缺少斜杠。

      在 Wordpress 中,页面是一个目录,因此它的响应为 www.mysite.com/page1/。

      关键是当你点击www.mysite.com/page1(不带斜线)时,Nginx 必须重定向到www.mysite.com/page1/(带斜线),通过这样做,它使用 PHP-FPM。

      在我网站的所有链接末尾加上斜线后,重定向没有完成,我的所有页面都没有被 PHP-FPM 处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-12
        • 2015-01-27
        • 1970-01-01
        • 2019-01-05
        • 2021-02-16
        • 1970-01-01
        • 2013-03-27
        • 1970-01-01
        相关资源
        最近更新 更多