WordPress 4.5.3へのアップデートができない件 (500 Internal Server Error)

wordpress-logo-notext-rgbWordPress 4.5.3へアップデートしようと、WP管理画面のプラグイン一覧もしくは更新ページを開くと、500 Internal Server Error

ええっーーー。久々にこのメッセージ見ました! あせりましたが公開WEBを見るもエラーはなし(とっりあえずヨカッタ)。また、不思議と他のサーバのWordPressでは問題はありませんでした。

該当のWEBサーバのerrorログを見ると、下記のようなエラーがでてました。

Premature end of script headers: plugins.php

さらに、message.logを見ると、多数のPHPがfaultしているログが多数あり。何が起きたんだ泣

いろいろ調べてみたところ、原因は、CentOS6.8でアップされたnss系パッケージでした。下記のサイトが参考になりました。

Xen仮想化環境下におけるCentOS 6.8で、CPUがハードウェアでAVXサポートまたはAESサポートを持っている場合、nss を使っているHTTPS通信(SSL/TLS)で不具合が出るようで、

http://qiita.com/CLCL/items/8f2e43e15b66a1605411

ちなみに、WordPressのプラグイン一覧/更新ページが「500 Internal Server Error」で表示されない問題のサーバでcurlコマンドを打つと、SSLへのアクセスは「Illegal instruction」エラー。非SSLのアクセスはerrorと出ていますがこれは相手側のWEBがerrorと出力しているだけなので問題なく動いており、curlのHTTPS通信のみで問題が発生していることが確認できます。

# curl https://api.wordpress.org/plugins/update-check/1.1/
Illegal instruction
# curl http://api.wordpress.org/plugins/update-check/1.1/
error

Xen仮想化環境下のAVXサポートまたはAESサポートのCPUをもつゲストOSで、CentOS6.8でアップされたnssがcurlのSSL通信時に不具合を起こすようです。環境変数でこれらのサポートを無効化もでき、下記のような感じで正常に動くようになるようです。

# export NSS_DISABLE_HW_GCM=1
# export NSS_DISABLE_HW_AES=1
# curl https://api.wordpress.org/plugins/update-check/1.1/
error

従って、PHPのautoprepend等で上記の環境変数をセットして無効化するか、CentOS6.7のnssにダウングレードするかで、WordPressが管理画面よりアップデートできるように直ります。

ちなみに、本件の不具合のCentOS Bug Trackerは「https://bugs.centos.org/view.php?id=10930」です。

何かの参考になりましたら幸いです。