Apacheのレスポンスタイムをログ記録する

httpd.confの以下の行を変更

;; 実際は1行です
LogFormat 
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
combined

;; %Dを追記
LogFormat
"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D"
combined

これで、/var/log/httpd/access_logなんかを見てみると、処理時間が記録されている。
「%D」だとマイクロ秒(Apache2.x以上)単位、「%T」だと秒単位らしい。
ボトルネックを見つけるのに使えたりするのかな??
ちなみに、「マイクロ秒」は100万分の1秒(・x・ ).o0○

Ubuntuのapacheでmod_rewriteを有効にする

まず、以下のコマンドを実行

$ sudo a2enmod rewrite

次に、/etc/apache2/sites-available/defaultの

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None -> Allに変更
    Order allow,deny
    allow from all
</Directory>

これでOK。最後にApacheを再起動。

$ sudo apache2ctl restart

最初から有効になってると思い込んで、スッカリはまっちゃった(・x・ ).o0○

FirePHP使い方メモ

まず、pearでインストール。本家からダウンロードでも可。

;; チャンネルを追加
# pear channel-discover pear.firephp.org
# pear install firephp/FirePHPCore

使い方は、3種類。
1.スタティックに

<?php
require_once 'FirePHPCore/fb.php';

$array = array(10, 20, 30);
FB::log($array);

2.オブジェクト指向

<?php
require_once 'FirePHPCore/FirePHP.class.php';

$firephp = FirePHP::getInstance(TRUE);

$array = array(10, 20, 30);
$firephp->log($array);

3.関数として

<?php
require_once 'FirePHP/fb.php';

$array = array(10, 20, 30);
fb($array, FirePHP::LOG);

他にも色々出来るらしい。
注意点として、php.iniでoutput_bufferingが有効になってない場合は、コード内でob_start()を使う必要アリ。
それにしても便利だな〜(・x・ ).o0○

ファイル作成時のデフォルトのパーミッションは?

;; 引数無しで現在の値を表示
$ umask
022

;; 引数をつけると値を設定
$ umask MASK_VALUE

バッチコイの777から、マスク値がひかれる。さらに、ディレクトリとファイルではちょっと違う。

;; ディレクトリ
777 - マスク値

;; ファイル
777 - マスク値 - 111

unameとゴッチャになる。
今日も今日とてタコ街道まっしぐら(・x・ ).o0○

ユーザディレクトリでCGI実行時に「500」エラー

Perlのパスも問題ない。
文法やtypoも問題ない。
なのに、http://example.com/~user/test.cgiにアクセスすると、無情の「500 Internal Server Error」・・・。
DocRootの/var/www/html下では問題なく動くので、httpd.confの設定でも無さそう。
原因はコイツ

# apachectl -V

[中略]
-D SUEXEC_BIN="/usr/sbin/suexec"

suEXECというのは、こういうものらしい。

suEXEC 機能により、Apache ユーザは Web サーバを実行しているユーザ ID とは 異なるユーザ ID で CGI プログラムや SSI プログラムを実行することができます。CGI プログラムまたは SSI プログラムを実行する場合、通常は web サーバと同じユーザで実行されます。

適切に使用すると、この機能によりユーザが個別の CGI や SSI プログラムを開発し実行することで生じるセキュリティ上の危険を、 かなり減らすことができます。しかし、suEXEC の設定が不適切だと、 多くの問題が生じ、あなたのコンピュータに新しいセキュリティホールを 作ってしまう可能性があります。あなたが setuid root されたプログラムと、それらから生じるセキュリティ上の問題の管理に 詳しくないようなら、suEXEC の使用を検討しないように強く推奨します。

…え〜と、通常Apache(nobody)権限で実行されるCGIを、別のユーザ(この場合、public_htmlを公開しているユーザ?)権限で実行する事が出来る、という事かな??
よく分からない場合は使うな!!との事なので、バイナリをリネームしてしまえば良いらしい。

# mv /usr/sbin/suexec /usr/sbin/suexec.org

LAN外に公開予定の無いサーバだから、これで問題ないんじゃないかな〜(・x・ ).o0○

ユーザディレクトリ公開時に「403 Forbidden」

httpd.confに

;; コメントアウト
UserDir disable
→#UserDir disable

;; 追記
UserDir public_html

としてApacheを再起動。適当にindex.htmlファイルとかを作って、http://example.com/~user/にアクセスすると403が返ってくる。
原因はコイツ

# ls -l /home

drwx------ 4 user user 4096 6月 2 11:00 user

なので、

# chmod 0711 /home/user

として再度アクセスしたら無事表示。
またハマっちゃった(・x・ ).o0○