2010年10月4日月曜日

バーチャルホストでCGIを使う

先日、SaaSesのOsukini LTを契約。
初めてのVPSなので防備録的に色々書くことにします。
※ CentOS5の32bitでいろいろ遊んでます。

バーチャルホストでCGIが動かなかったので、
/var/log/httpd/suexec.log を開いてみると
command not in docroot (/home/MYDOMAIN/public_html/sample.cgi)
だって。
「許可エリアじゃないから、そこじゃCGI動かせねぇよ、バカ」ってことですね、ハイ。
早速、docrootの設定を確認してみましょう。


# cd /var/sbin
# ./suexec -V

-D AP_DOC_ROOT="/var/www"


そりゃ動くわけないですな。
バーチャルホストは/home以下に生成されるので、docrootの設定値は/homeでなきゃいけない。
あ~でもこれって、再コンパイルしないといけないんじゃ?
と思ってたら、すげぇ力技を発見。
suexecを再コンパイルすることなくCGI実行可能なトップディレクトリを変更する方法 » fanta-orange
スゴイなぁ。これならたかがdocrootの設定値だけのために再コンパイルする必要が無い。
ってことで早速実践。

emacsが無いので、インストール。

# yum install emacs

日本語入力とかの必要はないので、今回はこれだけで終了。

次にsuexecをバックアップ

# cd /usr/sbin
# cp -p suexec suexec.bk



んで、バックアップファイルのほうをemacsで開く。

# emacs suexec.bk

hexl-modeに移行しましょう。「M-x hexl-mode」なんですが、
emacsを普段使わない諸兄のために一応補足
M-xってのはメタキー押してからxキーってことね。そのまま入力しちゃダメですよ。
メタキーはAltかESCになってると思います。

無事にhexl-modeに移行できたところで、/var/wwwの文字列を探します。
「C-s」(Ctrlとsキー)で検索すると早いですね。
見つけたら /var/www のvのところにカーソルをあわせてhomeと入力。
すると、/homewww となります。

wwwの部分が余計なので、nullに置き換えます。
カーソルが/homewwwの最初のwにあっているのを確認して
「M-x hexl-insert-hex-string」。
3文字分nullにしたいので「000000」と入力

んで、保存(「C-x C-」)です。
このときcoding systemを聞かれますが、 no-conversion と入力。

emacsを終了(「C-x C-」)。

では、確認。

# ./suexec.bk -V
-D AP_DOC_ROOT="/home"

に見事なっていればOKです。

後は、httpdを止めてこの編集後のsuexecをオリジナルのものと置き換えればOKです。
mv suexec.bk suexec って最初にやっちゃうと何のためにバックアップとったのかわからなくなるので


/etc/rc.d/init.d/httpd
 stop
# mv suexec suexec.org
# mv suexec.bk suexec
/etc/rc.d/init.d/httpd
 start

ってな感じにやりましょう。

前述のリンク先が画像入りで詳しいので、そちらを参考にすると良いでしょう。
※ 上記操作は全て自己責任でお願いします。力技なので、うまくいかないからといって余所で色々質問したりしないようにしましょう。

0 コメント:

コメントを投稿

 
Copyright 2009 Vagon
Convert By NewBloggerTemplates Wordpress by Wpthemesfree