アクセスログを見てたら、どうも AllowOverride の使い方を知りたくて Google 経由で来ている人が多いみたいなので、
AllowOverrideについて
を書いてみた。
Apache 2系統でCGIの出力の中で、SSI が使えるらしい。
http://httpd.apache.org/docs/2.0/ja/mod/mod_mime.html#addoutputfilter
ほんと? かなぁと思って試したら動いた。設定はこんな感じ。
AddHandler cgi-script .cgi
AddOutputFilter INCLUDES .cgi
<Files *.cgi>
SetOutputFilter INCLUDES
</Files>
もちろん、ただでさえ CGI は処理が重いのに、さらに重くなること請け合い (^_^;
http://itpro.nikkeibp.co.jp/article/COLUMN/20070510/270527/
mod_dosdetector とどっちがいいんだろ? それとも用途が違ってたりする?
- 秘密鍵の内容を確認
openssl rsa -in key.pem -text
- CSRの内容を確認
openssl req -in req.pem -text
- 証明書の内容を確認
openssl x509 -in cer.pem -text
- CRL の内容を確認
openssl crl -in crl.pem -text
どっかのサイトで見たやつ。どこだっけ……これかな?
http://chinmai.net/~osakana/tech-memo/wiki.cgi?page=OpenSSL+CSR%2C+%BE%DA%CC%C0%BD%F1%A4%CA%A4%C9%B3%CE%C7%A7%A5%B3%A5%DE%A5%F3%A5%C9
apache2 worker の設定をお願いされたんだけど、prefork しか経験がなかったので、ちょこっと調べてみる。
ServerLimit
StartServers
MaxClients
MinSpareThreads
MaxSpareThreads
ThredsPerChild
あたりが、稼働プロセスに関連する設定っぽい。まぁググってもいいんだけど、やっぱり本家の情報が一番安心できるよね、ということで
Apache MPM 共通ディレクティブ
http://httpd.apache.org/docs/2.2/ja/mod/mpm_common.html
Apache MPM worker.
http://httpd.apache.org/docs/2.2/ja/mod/worker.html
をつらつらと読む。とりあえず
MaxClients数 ≦ ThreadsPerChild数 × ServerLimitプロセス数
こんな関係らしい。
ともあれ、ps コマンドでメモリの消費量を見ると、 prefork と違って、1プロセス辺りの VSZ の値が大きいなぁ。RSS の値が小さいからいいんだろうけど、どこまで増やしていいのか、悩む。
Prefork
USER VSZ RSS COMMAND
wwwrun 8892 2120 /usr/sbin/httpd2-prefork
Worker
USER VSZ RSS COMMAND
wwwrun 231124 3592 /usr/sbin/httpd2-worker
う〜ん……
Apache のログのアクセス権の分離
http://dsas.blog.klab.org/archives/50190732.html
http://blog.yappo.jp/yappo/archives/000450.html
mod_proxy をフロントにして、mod_perl 用、mod_php用、svn用などと、apacheのプロセスを分離する考え方について。
サーバ分ける形でしか考えてなかったけど、設定ファイルを分けて、起動スクリプト書き換えれば、プロセス単位で変更することが可能だなぁ。こんな単純なことを実行しようと思わなかったところがダメだなぁ>おれ
とりあえず開発用サーバで遊んで見て、問題点を洗い出せたら、他所でもすすめてみよう :-)
http://wota.jp/ac/?date=20060605#p01
via http://www.pochi.cc/%7Esasaki/chalow/2006-06-06-1.html
む?
- 静的コンテンツの速度は Apache の 6〜9倍
これだけでもリスクを背負って試してみる価値ありそう。
すごく良さげだ。
でもまだ ports も deb もない。
それどころかソースも公開されていない。
ありゃ?(^^;
いまは(今後も?)バイナリだけなのね。Standard版が無料で、Enterprise版が有料かぁ。
価格表
http://litespeedtech.com/purchase/products/
これで公称値がちゃんとでれば、買ってもいい値段かも……
でも、静的コンテンツだけを考えるなら lighttpd でもいいわけだしなぁ。
http://www.lighttpd.net/benchmark/
IE だと、WebDAV のフォルダが
Internet Explorer では Webフォルダーとして開けませんでした
とか言われて、うまく開けないという現象がありました。どうも調べて行くと
- Digest認証
と相性が悪いらしいことが判明。って、前にも同じことを調べたような orz
ちなみに WebDAV client については
http://sugi.nemui.org/wiki/WebDAVClients
が詳しい。ちなみに上記現象の原因と対策は
http://d.hatena.ne.jp/rero/20050524/p2
に触れられている。OPTIONSメソッドをオープンにするしかないのか……ちょっと悩むなぁ。気にしすぎ?
以下、同僚に教えてもらったりした設定例。
Trac はなかなか便利なんですが、複数のプロジェクトを扱う場合は、すこし工夫が必要。
$ trac-admin /var/trac/hoge1 initenv 'Hoge1 Project' sqlite:db/trac.db /var/lib/svn /usr/share/trac/templates
$ trac-admin /var/trac/hoge2 initenv 'Hoge2 Project' sqlite:db/trac.db /var/lib/svn /usr/share/trac/templates
と、2つのプロジェクトを登録していた場合、
httpd.conf を
<Location "/projects/hoge1">
SetEnv TRAC_ENV "/var/trac/hoge1"
</Location>
<Location "/projects/hoge2">
SetEnv TRAC_ENV "/var/trac/hoge2"
</Location>
とか書き連ねて、各ディレクトリに、trac.cgi をコピーといった荒技を繰り出したくなるんですが(え?ならない?)、そんなことをしなくても
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
<Location /trac>
SetEnv TRAC_ENV_PARENT_DIR /var/trac
</Location>
だけで OK。上の例だと
http://www.example.co.jp/trac
にアクセスすると、そのサイトで管理されているプロジェクト一覧が表示されるので、あとはそのリンクをたどればOK。もちろん
http://www.example.co.jp/trac/hoge1/
http://www.example.co.jp/trac/hoge2/
でもアクセス可能。
あとSubversion についてですが、ディレクトリを切ることでプロジェクトを分け、運用する場合の話。上記の例だと異なるプロジェクトのはずなのに、タイムラインを見ると、すべての更新情報が表示されるので、見通しが悪くなります(/var/lib/svnの部分)
ファイルシステム上に、そんなディレクトリねぇよ! とか思わず
/var/lib/svn/hoge1
とか指定しておくと、リポジトリツリーの hoge1 以下の変更のみが表示されるので、見通しがよくなります(cf. http://wota.jp/ac/?date=20060301#c01)
あとで直す場合は
/var/trac/hoge1/conf/trac.ini
[trac]
repository_dir = /var/lib/svn/hoge1
を修正すればOK。
ちなみに Trac の機能に不満をもったら
http://trac-hacks.org/
へアクセス。きっと欲しい機能をサポートしたプラグインがあるはず。
JANOG ML にリバースプロキシはどう?と設定例を投げたんですが、すばやく問題点を指摘して頂いた(ほんと、ありがたい……)
Apache を Reverse Proxy で利用する際には、ProxyRequest は必ず Off にしないとだめ。
On にしちゃうと、オープンプロキシになってしまう危険性がある。
ちゃんとドキュメント
http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy.html
にも
警告
サーバを安全にするまで ProxyRequests は有効にしないでください。 オープンプロキシサーバはあなた自身のネットワークにとっても、 インターネット全体にとっても危険です。
とか
リバースプロキシの 設定のために ProxyRequests を設定する必要は ありません。
と、その危険性にも触れてあるし、Reverse Proxy の設定例には
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
とあって、わざわざ ProxyRequest Off なんて入れてあって、間違いが起きないように補足してある。
#人に、ちゃんと Apache のドキュメント読まないとダメよと言っときながら、
#自分がちゃんと読んでなかった罠。
#確かめたつもりだったんだけど、本当に「つもり」なだけだったらしい。恥ずかしすぎ(--;
なお、オープンプロキシを探すスクリプトは世の中に出回っているらしく、Webサーバを運用している方は、ログにその形跡を目にされる方もおられると思います(ちょっと前にも話題になりましたしね(--;))
心配な方は以下のようにチェックできるはず。
$ telnet localhost 80 <= 入力
Escape character is '^]'.
CONNECT http://www.yahoo.co.jp:80 HTTP/1.0 <= 入力
これで "400 Bad Request" とか返って来れば大丈夫なはず。www.yahoo.co.jp の index.html が返ってきたら、アウト。
# ただ、この確かめ方が 100% 正しいかは要確認。以前 ProxyRequest On + Reverse Proxy の
# 設定を入れてしまっていた時に、このテストをやってみたときには、ひっかからなかったんだよねぇ
と、自戒の意味も込めて、自分の日記にも晒しておく。
http://www.atmarkit.co.jp/flinux/rensai/apache2_08/apache08a.html
Apache2.0 の機能を使って、いろいろな制限を加える手法について。
ちなみに .htaccess を使って、直リンクを防止する手法については
http://adultserver.jp/howto/
で知った。実はわりと知られた手法だったりするのかな?
Apache 2.0系以降、LogFormatディレクティブに "%D" を利用すると、リクエストを処理するまでの時間が記録できます。
http://httpd.apache.org/docs/2.0/ja/mod/mod_log_config.html#formats
http://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html#formats
によると、ミリ秒単位(milisecond)とありますが、実際には英語ページにあるように、マイクロ秒(microsecond)なはず。
http://httpd.apache.org/docs/2.0/en/mod/mod_log_config.html#formats
http://httpd.apache.org/docs/2.2/en/mod/mod_log_config.html#formats
私が手もとで試した限りでは、ミリ秒単位じゃなくて、マイクロ秒単位っぽい。多分日本語ドキュメントの間違いだと思うんだけど、どこに知らせるべき?(?_?)
追記:
なんかググったらちゃんとマイクロ秒単位って説明しているドキュメントも多い。みんな基本は英語の方を参照してるってことなのかな?