突然のInternal Server Error(さくらインターネット)


このブログも含め,プライベート用サイトと事業用サイトはさくらインターネットの「さくらのレンタルサーバー」をスタンダードプランで利用しています。
同一のレンタルサーバーでマルチドメイン設定をして使っています。
PHPはさくら標準のPHP5を利用。

その,さくらのレンタルサーバーが2009年2月5日からOSのバージョンアップ(FreeBSD6.1から同7.1)やMySQL5.1の追加などを行っています。
順次メンテナンスを行うというアナウンスがあり,


まだかなぁ~~~・・・(´・ω・`)


と,首を長くして待っていた。

一目で「バージョンアップした」とわかるところがあるので,ちょくちょく様子を見に行ってるいるのだが,なかなかバージョンアップしない。
一目でバージョンアップがわかる箇所
それは,「さくらインターネットサーバーコントロールパネル」にログインし,「ドメイン設定」の画面である。

このメンテナンスでついにSSLが利用可能となる。
このSSLの設定をするのが「ドメイン設定」画面。
この画面の上部に

ドメインとサイトに関する管理画面です。
次のようなドメインに関する設定ができます。


という文言があり,メンテナンス前だと

・新規ドメイン追加
・マルチドメイン


という記載だが,これがメンテナンス後になると

・新規ドメイン追加
・マルチドメイン

・共有SSL

となる。
この「共有SSL」の表示が出ていればバージョンアップされていることになる。

そして今日見てみたら「ドメイン設定」画面に「共有SSL」の文字がっ!!v(。・ω・。)v

いつメンテナンスされていたのか気になって調べてみたら,2009年4月13日でした。

んで,自分のサイトに不具合がないか確認してみることにした。


500 Internal Server Error

ガ゙━━(゚ω゚;)━━ン!!!

コレを見た瞬間に

問題は十中八九PHP関連

と推測。

Internal Server Errorは.htaccessかスクリプトの不具合が大半だしね。

しかし,いきなり見られなくなるとはどういう了見だ!?
明らかにメンテナンスが原因だろう。さくらインターネットは何をしてくれたんだ!?

調査開始。

まず,「サーバーコントロールパネル」の「情報一覧」でメンテナンスの内容を細かくチェック。

すると,
PHPについて
 /usr/local/bin/phpがCLI版PHP(CLI SAPI)へと変更されています。
 お客さまで用意されているPHPスクリプト自体の修正は必要としませんが、
 CRONやメールの転送機能が利用できなくなるという問い合わせがサポートへ寄せられています。
 今後コマンドラインで使用するPHPは、カレントディレクトリを変更する記述としていただきますようお願いいたします。
という記述を見つける。

が,今のところCRONは使っていないし「修正は必要としない」と書いてあるので関係なしだ。

次に,試しに純粋に.htaccessを適用しないようにしたらすんなり表示された。
というわけで.htaccessに問題があると特定。

.htaccess内で一番疑わしい箇所をコメントアウトし,再度確認するとこれも表示される。
疑わしい場所とは,さくらインターネットを使い始めたころに,「phpをhtmlで動かす」という設定を.htaccessに施した。
このときに,.htaccessに以下の2行を書いた。

AddHandler myphp-script .html
Action myphp-script /php.cgi


この2行のうちのActionディレクティブをコメントアウト

AddHandler myphp-script .html
#Action myphp-script /php.cgi


ちなみに「phpをhtmlで動かす」のときに参考にさせていただいたサイトは以下
arrow 『うぇぶくりえいた~』へのミチ さくらインターネット「phpをhtmlで動かしたい」
arrow 小粋空間 Movable Type の PHP化(その2:.html のままPHPを有効にする)
この2サイトの他にもいろいろ見た気もするけど覚えてない(・ω・A;)
これで原因がわかった。

メンテナンスによってphp.cgiが変わってしまったのだろう。
php.cgiはデフォルトでは存在しないファイルである。
/usr/local/php-4.4.7/bin/配下にあったphpという名のファイルが本体で,「phpをhtmlで動かす」ときにこのファイルをphp.cgiというファイル名でコピーしたものだ。
※パス中のphp-4.4.7は利用しているPHPのバージョンによって変わる。
※メンテナンス後,どうやらディレクトリとファイル名が変更になっているようだ。
というわけで新しいphp.cgiを持ってきてみる。

FTPクライアントソフト(FFFTPなど)は使わないほうが無難。
改行コードなどの都合でうまくいかない場合あるので,Telnetで直接サーバーに乗り込んでコピーするべし。

しかしメンテナンス後だとTelnetが使えず,SSHでログインになる。

SSHに関しては詳しくないので,さくらインターネットのサポートページで紹介されているPoderosaというソフトを使った。

どっちにしろ,「サーバーに乗り込んで直接操作する」ということには変わりないのだが。

mark cd /usr/local/
ディレクトリ移動

mark ls -l
localディレクトリ内を属性付で参照。
そうすると,ここにはphpというディレクトリが存在することがわかる。

というわけでそこに移動してみよう。

mark cd php
現在位置は/usr/local/phpとなる(pwdコマンドで確認)。

ここでもう一度lsコマンド。

mark ls -l
4.4.9
5.2.8
default

という三つが表示される。

このうち
4.4.9
5.2.8

がディレクトリだ。
defaultは5.2.8へのシンボリックリンクのようだ。

標準のPHP利用であればdefaultか5.2.8を,PHP4を利用しているのであれば4.4.9へ移動する。

mark cd default(or 5.2.8 or 4.4.9)
続けて

mark ls -l
bin,etc,include,lib,manの5つが表示される。
すべてディレクトリ。

このうちのbinへ移動。

mark cd bin
ここまでの現在地は/usr/local/php/5.2.8/bin。

ここでls -lをたたき中身を参照すると,それっぽいものが見えてくる。
いくつかファイルが表示されるが,ひっかかるものは

php
php-cgi
php-cig-mysql4.0
php-cgi-mysql5.1

あたり。

しかし,phpとphp-cgiはシンボリックリンク。
リンク先を見るとそれぞれ

/usr/local/php/5.2.8/bin/php-mysql5.1
/usr/local/php/5.2.8/bin/php-cgi-mysql5.1

である。

どうやらMySQL5.1が追加され,それがデフォルトになっているようだ。

MySQL4.0.xユーザーはphp-cgi-mysql4.0を利用する。

なので

php-cgi-mysql4.0を自分のディレクトリへコピーしてリネーム。

そして自サイトの表示確認をすると…


表示成功ヾ(〃・ω・)ノわぁい♪


こうして恐怖のInternal Server Errorから復帰したのである。

おしまい♪
カテゴリー: PHP   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください