近期,我想把我的wordpress博客升级下,从4.2.3升级到4.3,但是每次升级的时候,后台显示一直在加载中,直至最后卡死白屏,无任何响应。我最初想到的一个可能的原因是,国内由于特殊的网络环境,对于wordpress官网部分资源无法访问,导致升级失败,但我尝试直接下载wordpress升级文件的时候,在服务器内部其实是可以下载的,只是速度很慢,于是进入服务器内部看下。

进入服务器,首先看下日志:

cat /var/log/nginx/error.log

日志提示:

2015/08/28 09:46:13 [error] 2658#0: *31318 upstream timed out (110: Connection timed out) while reading upstream, client: 58.240.219.106, server: yyshell.com, request: "POST /wordpress/wp-admin/update-core.php?action=do-core-upgrade HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "yyshell.com", referrer: "http://yyshell.com/wordpress/wp-admin/update-core.php"

看这报错,关键这句“fastcgi://unix:/var/run/php-fpm/php-fpm.sock”,貌似是php-fpm调用升级文件执行升级操作的时候超时,我想可能是wordpress的升级要花很长时间,默认的php-fpm设置的超时的时间不够用导致的。
改一下,在php-fpm默认的配置文件/etc/php-fpm.d/www.conf加入或修改

request_terminate_timeout = 1200s

然后在nginx的主配置文件/etc/nginx/nginx.conf或者虚拟主机vhost.conf(如果有的话)中的http配置部分加入

fastcgi_read_timeout 1200s

接着修改php的配置文件/etc/php.ini的max_execution_time参数到1200,也可以重新在php-fpm的配置文件www.conf中重新定义这项配置,加入

php_admin_value[execution_time] = 1200

看起来可以接着在后台升级了,点击升级,新的报错提示又出来了:
从 https://downloads.wordpress.org/release/****/wordpress-4.3-zh_CN.zip…下载失败: Operation timed out after 300000 milliseconds with ***** out of ******* bytes received。
安装失败

这个错误很明显,提示就是在300秒的时间内,数据没下载完整。但是我已经把各类超时的参数都设置成1200秒了,怎么会没生效的呢。应该是wordpress程序本身还有个地方做了限制。网上查了查资料,在/wp-admin/includes/file.php文件中,查找下这个

function download_url( $url, $timeout = 300

把300修改成1200,这样升级的时候,应该不会导致下载文件时间不够了。但记住,一直升级完毕后,这个文件还是会被新的升级替换掉,这个参数基本也会被修改回300!

再次去后台,点击升级,升级文件是下载完成了,但还是提示失败,提示无法复制拷贝文件,关键是下面这句提示:

通常是由于不一致的文件权限.: wp-admin/includes/update-core.php

看了下,这个文件权限没问题。根据经验,应该是由于selinux引起的权限异常。网站目录默认的selinux上下文为httpd_sys_content_t,这个标签上下文的目录,selinux是不让写入的,升级当然要写入替换文件,这就导致升级失败了。必须改成httpd_sys_rw_content_t这个上下文标签

semanage fcontext -a -t httpd_sys_rw_content_t "/mnt/sdb/wordpress(/.*)?"

注意,/mnt/sdb/wordpress是我网站的目录,要试用上述配置代码,改成你自己的网站目录即可。
再还原下上下文目录类型

restorecon -rv /mnt/sdb/wordpress

再次去后台升级,提示升级成功了!
最后提个建议,我觉得wordpress除了/wp-content目录应该设置成httpd_sys_rw_content_t标签,其他目录应该用httpd_sys_content_t更安全,本文仅仅是讨论不关闭selinux条件下,如何解决问题,希望大家注意。

CentOS7下解决WordPress更新无响应问题

2 thoughts on “CentOS7下解决WordPress更新无响应问题

  • 2019年4月4日 at 15:38
    Permalink

    大佬啊,终于好了,搞了两天了,用文章最后的semanage+restorecon弄好的。。。感谢!!!

    Reply
    • 2019年5月16日 at 15:45
      Permalink

      很高兴能帮到你。本站作为一个偶尔更新下的小站,你能搜索到这里也是缘分。

      Reply

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注