我在我的服务器上运行一个Wordpress实例。我的服务器需要同时支持至少1000个并发。
我在Apache上使用PHP- fpm (PHP 5.4)与FastCGI以及Memcache,以及APC为我的opt-caching。我们有两个MySQL服务器作为从服务器运行。
服务器的资源容量如下:
Ram: 32GB
CPU: 8 Cores
运行Apache服务器的用户使用以下ulimit执行此操作:
Hard: 4096
Soft: 1024
我们间歇性地有停机时间,当停机时间袭击我们时,我们从Nginx(在单独的服务器上充当我们的负载平衡器)提供500个错误。当我们得到这500个错误(它们的范围从500到504)时,我可以看到我们已经最大化了RAM使用,并且断断续续地,我们的CPU使用(我假设这与数据库相关?)使用这些资源的进程是PHP-FPM的子进程。
我不是系统管理员,我只是开发人员。所以它开始超出我的能力范围。
php错误日志报告如下内容:
[Mon Oct 10 12:54:33 2016] [error] [client 155.234.240.16] (104)Connection reset by peer: FastCGI: comm with server "/[MYURL].fcgi" aborted: read failed, referer: [MYURL]
[Mon Oct 10 12:54:33 2016] [error] [client 155.234.240.16] FastCGI: incomplete headers (0 bytes) received from server "/[MYURL].fcgi", referer: [MYURL]
[Mon Oct 10 12:54:34 2016] [error] [client 146.231.88.181] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
根据我目前提供的信息,你能帮我找到一个方向,以便开始诊断这个问题吗?如有需要,我可以提供更多信息。
这些错误在两种情况下很常见——XMLRPC攻击或包装器配置不允许所需的FastCGI生成。问题是太宽与组合的Apache2与Nginx在前面。我是按步骤写的。
FastCGI有效地防止网站被拒绝服务攻击或崩溃,由于内存泄漏。对于Nginx PHP-FPM,这种情况总是需要检查XMLRPC攻击(或类似的暴力破解)并阻止它。如果一个IP在一天内请求600次,显然是攻击。因此,以上是第一步,您正在检查XMLRPC攻击,阻止臭名昭著的XMLRPC文件的WP加上获得的次数很少的IP重复请求。这里写的是如何检查假PHP5-FPM攻击- wordpress-xml-rpc-attack-fake-php5-fpm-error日志的Nginx(你是Apache2与Nginx在前面,你可以使用我在该指南中编写的命令来提取错误或ip)。
作为第二步,不完整的头与Apache2 + PHP-FPM本身要求看到你的fcgi包装(/dev/shm/blackmou-php.fcgi
)或.htaccess
为FastCGI生成。这是一个包装器配置的例子:
PHP_FCGI_CHILDREN=0
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS
我们还需要从php.ini
中增加memory_limit
。对于Nginx上的类似情况,我们调整fastcgi_max_temp_file_size
, fastcgi_buffers
-
fastcgi_buffers 256 16k;
fastcgi_max_temp_file_size 0;
如果以上都不是问题,作为第三步,在wp-config.php
文件中启用WP_DEBUG
。您可能会看到插件问题的更好的错误消息,但不保证。
如果不是问题,如第四步,停用所有插件并使用默认主题几分钟。如果没有出现,主题或插件有问题。
同样,作为第五步,有xdebug分析器用于检查。
指出:
- 如果担心数据库故障,使用WordPress功能修复数据库。然而,这是不可能的。
- 你应该正确配置iptables, fail2ban,限制
wp-login.php
访问等