クライアントのサイトにおいて、
●SOY CMS 1.8.3
●SOY INQUIRY 1.1.16
●PHP 5.3.3
の組み合わせで複数のサーバエラーが発生。
今は改善して、まもなく接続制限の解除申請を行うところまで来た。
(2015/01/09 既に解除済み)
●使っているサーバ、
●PHPのバージョン、
●PHPの初期設定、
●SOY CMSのバージョン、
●SOY CMSでの設定、
●稼動させているプラグイン、
●その組み合わせの相性、
などなど、
複数の要因が絡むので、特殊なケースかも知れないが、
整理も兼ねての覚え書き。
最初の問題発生は、以下の2点。
1)ページの表示が激遅になっていることと。
2)タイムアウト?による500エラーが頻発すること。
トップページの表示速度が約12秒と遅くなっている原因は
「SOY CMSを導入したこと」だと最初は思ったので、
クライアントと相談の上で、以下の高速化手法を立て続けにとる。
●CloudFlare(CDN)
●FirstCGI
●mod_pagespeed
●Etag設定
●mod_expires(キャッシュ設定)
●gZip圧縮
ちなみにサーバはXserverで、PHPのバージョンは5.3.3。
このころ「過剰負荷により接続制限をかけている」との連絡が
Xserverから来たと連絡が入る。
つまり、激遅だったのは、この制限によるものだった。
ここから、エラー解消に向けたバトルが始まる。
Xserver管理画面からエラーログを参照すると、
以下の2つのサーバエラーが発生していた。
SystemException in API_Linux.cpp:172:
(↑ アクセス集中したときに起きるエラーのよう)
Premature end of script headers:
(↑ 原因がわからなけれど、とりあえず問題が起きていることを示すエラーのよう)
ネットで「SystemException in API_Linux.cpp:172: 」を調べると
4、5ページほど同じエラーについて書かれたページに当たった。
ある方が、WordPressそのものを入れ替えてエラーが出なくなった、
と書かれていたけれど、今回のケースでは稼動中のECサイトでのことなので、
最終手段にしか使えない手と考え、他の方法を模索することにした。
各エラーの参照先は
同じディレクトリをいったりきたりしてできたような
実際には存在しない長いURLになっていて、
この「いったりきたり」が負荷過剰になった原因かもと予想。
もしかすると、SOY CMSが使う転送の仕組み(.htaccessのRewrite)と、
うまくかみあっていないのかも、と予想はするものの原因は特定できず。
SOY CMSのバージョンを1.8.3→1.8.6にアップデート
するも
管理画面が真っ白になって表示されず、いそぎ1.8.5に戻す。
一旦、問題解決のために、それまで施した高速化手法を全て外した後、
他の方がブログで紹介されているSOYルートサイトの.htaccessの記述で
Rewriteを「/」から始まるルートパスに置き換える。
<参考ブログ>
http://blog.netandfield.com/shar/2012/10/soy-cms-ocn.html【旧】
RewriteRule ^(.*)$ index.php?pathinfo=$1&%{QUERY_STRING} [L]
↓
【新】
RewriteRule ^(.*)$ /index.php?pathinfo=$1&%{QUERY_STRING} [L]
※「SOYでのルートサイト」以外の「SOYでのサイト」に上記を施すと
表画面がブラウザで表示されなくなった。
ここで、あらためてSOY CMSを1.8.6にアップデートする。
今度は管理画面が表示された。
ここまでの作業で、
エラーは「フォームのあるページ(SOY INQUIRY連動ページ)」に集中した。
そこで、
SOY CMS内に登録しているフォームページを削除し、新しく作りかえた。
このことで、データベースに残っていたかも知れない誤った記述がリセットされることを期待。
それと、SOY INQUIRYを
1.1.16→1.1.17へアップデートを行う。
すると、エラーが発生しなくなった。
そこから24時間後時点でもエラーがでていないことを確認し、
高速化手法を再度戻していく。
●CloudFlare(CDN)
●FirstCGI
の2つは使えた。が、
●mod_pagespeed
●Etag設定
●mod_expires(キャッシュ設定)
●gZip圧縮
を使うと、わけのわからない長いURLがでるエラーが復活してしまったので、
使わないこととする。
解消まで1週間ほどかかった。
年末年始を挟んでのことで、サイトへのアクセスが少ない時だったのが、
何よりの幸いだった。
あくまでも、今回のケースでではあるが、
まとめると、以下の4つの対処によりエラーは解消された。
1)SOYルートサイトの.htaccessの記述を一部変更(ルートパスに変更)
2)SOY CMSおよびSOY APPをアップデート
3)エラーが集中しているのSOYページを削除し、作り直す(登録し直す)。
4)高速化に使うのはCloudFlare、FirstCGIのみ。
特定箇所の問題、というよりは、
複合的な原因だったのかも。
厄介だったのは、一旦エラーが出だすと、
エラー前の状態に.htaccessを戻しても、
連鎖するようにエラーが出続けたことだ。
もしかするとCloudFlareの影響かでキャッシュが残り、
その古い情報とバッティングして
エラーが解消しにくい状況になっていたかもしれない、とか、
.htaccessの保存時か、
アップロード時の事故だったのか、とか、
さまざまに想像するが、
エラー連鎖が発生した時の効果的な対処はいまだにわからない。
今は収まっているので、様子を見ながら、
一旦取り下げた高速化にチャレンジする予定。