为什么PHP-FPM正在处理每个请求? (即使我使用的是Cache)

时间:2013-07-10 17:44:55

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

我正在运行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缓存。

我的规格:

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

我在我的服务器前安装了Varnish,但同样,它正由PHP-FPM处理。

问题是网址末尾没有斜杠。

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

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

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