WordPress 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)で不具合が出るようで、
ちなみに、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」です。
何かの参考になりましたら幸いです。