0

我已经使用 Wordpress 设置了 Apache 服务器,在安装了几个插件后,我注意到页面加载时间长达 30 秒或更长时间,因此我按照几个指南通过删除模块、启用放气、更改工作进程来微调和加速 Apache , ETC...

我所做的更改之一是删除 mod-php 并通过 mod-fastcgi 使用 php-fpm,之后我注意到几个奇怪的错误。W3 Total Cache 报告说尽管 htaccess 属于同一个用户和组,但它是不可写的,我什至将它设为全局可写(777 权限),并且 minify 无法工作,因为它无法写入对 htaccess 的任何更改。

不仅如此,Minify 还发出 2 条奇怪的消息

Minify Auto encountered an error. The filename length value is most likely too high for your host. It is currently 150. The plugin is trying to solve the issue for you

它坐在那里试图修复它然后说

Minify Auto does not work properly. Try using Minify Manual instead or try another Minify cache method. You can also try a lower filename length value manually on settings page by checking "Disable the Minify Auto automatic filename test”

此外,兼容性检查还会产生奇怪的消息,声称未检测到许多已加载的模块,我做了一些快速研究,发现这些模块很难通过 fast-gi 检测到,但我想知道插件是否是做任何事情,因为它无法检测到它们。

任何帮助,将不胜感激

4

1 回答 1

2

Apache/PHP-FPM 下的 W3 Total Cache 'Minify Auto'

我在使用 PHP-FPM 的 Apache 下使用 W3 Total Cache (W3TC) 及其“Minify Auto”功能遇到了同样的问题。

问题简述

在 FastCGI 模式下调用 PHP 时,某些 CGI 变量(例如SCRIPT_NAMEPATH_INFO)并不总是设置为脚本开发人员期望的值。在我的例子中, 的值是可执行文件 ( )SCRIPT_NAME的路径,而不是 PHP 脚本本身的路径。php5-fcgi/usr/lib/cgi-bin/php5-fcgi

W3TC 插件中的 minify 模块代码需要SCRIPT_NAME正确设置,否则会失败。

解决方案

启用后,php.ini 指令cgi.fix_pathinfo可以解决此“CGI 变量”问题。就我而言,我已禁用此设置,然后重新启用它会生成正确的SCRIPT_NAME并解决了缩小问题。

Debian/Ubuntu 系统的说明

要重新启用,请更改以下设置/etc/php5/fpm/php.ini

cgi.fix_pathinfo = 1

并重新加载 php-fpm 服务:

sudo service php-fpm reload

警告

请注意,自 2010 年以来,关于cgi.fix_pathinfo在配置错误的 Nginx 站点中使用该设置存在安全问题(有关详细信息,请参见此处),但是我无法在 Apache 设置下重现此问题。

security.limit_extensions自 PHP 5.3.9 起,引入了一个(文档很少的)新的 FPM 配置指令。这默认限制为.php仅对文件执行,据我所知,这应该可以缓解历史安全问题。

详细问题(对于那些关心的人)

损坏的 CGI 变量会导致派生缓存目录路径的 W3TC 函数出现问题。

这反过来会导致缩小.htaccess文件被写入磁盘,RewriteBase指令中的缓存路径格式错误。

就我而言,它是:

RewriteBase inify/

而不是:

RewriteBase /wp-content/cache/minify/

这会影响后续的重写规则,最终会阻止缩小代码(依赖于这些规则)被正确调用。

于 2014-10-01T15:03:44.607 回答