最初の1年間は年額100円で借りられるレンタルサーバ「ドメインキング」。
VPSに慣れた身からすると、レンタルサーバというのはやはり自由が効かないもので、いくつか戸惑ったポイントがありました。今日はそのポイントを3つ紹介します。
ポイント1:apacheユーザに注意しろ!
ドメインキングでは自分でアップロードしたファイルやディレクトリは、オーナーが自分になるのですが、WordPressやプラグインなどが作成したファイルやディレクトリは、apacheユーザがオーナーになります。要は、Apacheの実行ユーザがapacheだからなので、当然といえば当然のこと。
しかし、apacheユーザがオーナーのファイルやディレクトリは、FTPでアクセスすると消すことも編集することも出来ないので、困りものです。(ファイルのあるディレクトリが自分がオーナーの場合は、ファイルのオーナーがapacheユーザでも削除は出来ます。)
レンタルサーバによっては、apacheユーザで出来たファイルやディレクトリのオーナーを一気に変えてくれるような機能が管理画面にあったりするのですが、どうやらドメインキングにはなさそう。仕方なく、以下のようなPHPスクリプトを作成して、Webブラウザから開くことで対応します。
<?php
//ファイルの削除
unlink('foo.txt');
//空のディレクトリの削除
rmdir('bar');
//ファイルの所有者の変更
chown('foo.txt', 'username');
?>
このスクリプトはApacheの実行ユーザであるapacheユーザの権限で実行されることになるので、apacheユーザがオーナーのファイルやディレクトリを操作できるわけですね。
逆に、自分でアップロードしたファイルやディレクトリに対して、WordPressが書き込めないという問題もありますが、これは権限の設定で回避すれば良いでしょう。
これはドメインキングに限らず、多くのレンタルサーバで起きることなのですが、やっぱりハマりやすいのでポイント1にしました。
ポイント2:PHPの最大メモリ使用量に注意しろ!
WordPressをインストールして、いくつかプラグインを入れて・・・。ドメインキングはとてもスムースに動いてくれました。しかし、有効化するプラグインを増やしていくと、いきなり画面が真っ白に!(ちなみに私はJetPackの有効化をした際に真っ白になりましたが、別にJetPackだから真っ白になったわけではないでしょう)
そんなときは、落ち着いてログを見ることにしましょう。ドメインキングの管理画面からApacheの出力するアクセスログとエラーログを参照することができます。
で、error_logを見てみると、こんなログが出ていました。
[Mon Nov 26 xx:xx:xx 2012] [error] [client xxx.xxx.xxx.xxx] PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 19456 bytes) in /var/www/vhosts/inoccu.net/httpdocs/wp-admin/includes/screen.php on line 71
はい、PHPが使用できるメモリが足りなかったんですね。
ということで、.htaccessで使用できるメモリ量を増やすことにします。
php_value upload_max_filesize 128M
php_value post_max_size 128M
php_value memory_limit 128M
これで真っ白画面は出なくなりました。
ポイント3:サブドメイン側のディレクトリにはPHPからアクセス出来ないので注意しろ!
これは私特有の問題かもしれません・・・。
foo.comへのアクセスをトリガーとして、media.foo.comにあるファイルを作りたいと思ったのです。もちろん、foo.comとmedia.foo.comは、どちらもドメインキングの同じアカウント内にあります。
具体的には、foo.com側で投稿に貼ってある先頭の画像のサムネイルをmedia.foo.comでアクセス出来るように作りたいという要件です。
ドメインキングでは、メインドメインとサブドメインのファイルの保存場所は以下のようになっています。
foo.com(メイン) /var/www/vhosts/foo.com/httpdocs
media.foo.com(サブ) /var/www/vhosts/foo.com/subdomains/media/httpdocs
つまり、/var/www/vhosts/foo.com/httpdocs内にあるPHPスクリプトから、/var/www/vhosts/foo.com/subdomains/media/httpdocsにあるファイルを操作するということになります。
で、ドメインキングでは、これが出来ません。
再びエラーログを見てみると・・・
[Mon Nov 26 xx:xx:xx 2012] [error] [client xxx.xxx.xxx.xxx] PHP Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/var/www/vhosts/foo.com/subdomains/media/httpdocs/foo/bar) is not within the allowed path(s): (/var/www/vhosts/foo.com/httpdocs:/tmp) in /var/www/vhosts/foo.com/httpdocs/foo.php
どうやら、ドメインを跨ぐようなディレクトリ間のアクセスは許可されていない様子。
これは、セキュリティ上の対応だと思いますので、素直に従ってfoo.com内(media.foo.comは使わない)で解決することにしました。
ということで、そんなハマりポイントもありますが、最初の1年だけとはいえ1年間使いまくって100円というのは安すぎます。それでいて、レスポンスも含めて現時点では満足のいく内容ですので、是非参考にして戴ければと思います。