このブログも含め,プライベート用サイトと事業用サイトはさくらインターネットの「さくらのレンタルサーバー」をスタンダードプランで利用しています。
同一のレンタルサーバーでマルチドメイン設定をして使っています。
PHPはさくら標準のPHP5を利用。
その,さくらのレンタルサーバーが2009年2月5日からOSのバージョンアップ(FreeBSD6.1から同7.1)やMySQL5.1の追加などを行っています。
順次メンテナンスを行うというアナウンスがあり,
まだかなぁ~~~・・・(´・ω・`)
と,首を長くして待っていた。
一目で「バージョンアップした」とわかるところがあるので,ちょくちょく様子を見に行ってるいるのだが,なかなかバージョンアップしない。
一目でバージョンアップがわかる箇所
それは,「さくらインターネットサーバーコントロールパネル」にログインし,「ドメイン設定」の画面である。
このメンテナンスでついにSSLが利用可能となる。
このSSLの設定をするのが「ドメイン設定」画面。
この画面の上部に
ドメインとサイトに関する管理画面です。
次のようなドメインに関する設定ができます。
という文言があり,メンテナンス前だと
・新規ドメイン追加
・マルチドメイン
という記載だが,これがメンテナンス後になると
・新規ドメイン追加
・マルチドメイン
・共有SSL
となる。
この「共有SSL」の表示が出ていればバージョンアップされていることになる。
それは,「さくらインターネットサーバーコントロールパネル」にログインし,「ドメイン設定」の画面である。
このメンテナンスでついに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は、カレントディレクトリを変更する記述としていただきますようお願いいたします。
という記述を見つける。/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で動かす」のときに参考にさせていただいたサイトは以下
➡『うぇぶくりえいた~』へのミチ さくらインターネット「phpをhtmlで動かしたい」
➡小粋空間 Movable Type の PHP化(その2:.html のままPHPを有効にする)
この2サイトの他にもいろいろ見た気もするけど覚えてない(・ω・A;)
これで原因がわかった。このときに,.htaccessに以下の2行を書いた。
AddHandler myphp-script .html
Action myphp-script /php.cgi
この2行のうちのActionディレクティブをコメントアウト
AddHandler myphp-script .html
#Action myphp-script /php.cgi
ちなみに「phpをhtmlで動かす」のときに参考にさせていただいたサイトは以下
➡『うぇぶくりえいた~』へのミチ さくらインターネット「phpをhtmlで動かしたい」
➡小粋空間 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を持ってきてみる。/usr/local/php-4.4.7/bin/配下にあったphpという名のファイルが本体で,「phpをhtmlで動かす」ときにこのファイルをphp.cgiというファイル名でコピーしたものだ。
※パス中のphp-4.4.7は利用しているPHPのバージョンによって変わる。
※メンテナンス後,どうやらディレクトリとファイル名が変更になっているようだ。
FTPクライアントソフト(FFFTPなど)は使わないほうが無難。
改行コードなどの都合でうまくいかない場合あるので,Telnetで直接サーバーに乗り込んでコピーするべし。
しかしメンテナンス後だとTelnetが使えず,SSHでログインになる。
SSHに関しては詳しくないので,さくらインターネットのサポートページで紹介されているPoderosaというソフトを使った。
どっちにしろ,「サーバーに乗り込んで直接操作する」ということには変わりないのだが。
:mark:cd /usr/local/
ディレクトリ移動
ディレクトリ移動
:mark:ls -l
localディレクトリ内を属性付で参照。
そうすると,ここにはphpというディレクトリが存在することがわかる。
というわけでそこに移動してみよう。
localディレクトリ内を属性付で参照。
そうすると,ここにはphpというディレクトリが存在することがわかる。
というわけでそこに移動してみよう。
:mark:cd php
現在位置は/usr/local/phpとなる(pwdコマンドで確認)。
ここでもう一度lsコマンド。
現在位置は/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へ移動する。
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へ移動。
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を自分のディレクトリへコピーしてリネーム。
ここまでの現在地は/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から復帰したのである。
おしまい♪