Cygwinで便利!
ソースから make を行う関係上、できたバイナリの動作は
Cygwin のバージョンにかなり依存するようです。
大抵のバージョンの Cygwin で make やサービス化はできますが、
通信が途中で切れるという問題が発生したりします。
どうしても動かないときは Cygwin のバージョンを疑う必要がありそうです。
(2004/05/03)
2.0.49 から細かいオプションが増えたようで、2.0.48 以前と同じオプションでは
make 出来なくなっています。
configure オプションを修正すると make までは出来ますが、
make install で httpd.exe がインストールされなかったりします。
自力でインストールしてコンフィグまで修正しても、
「ulimit が無い」といわれて起動しません…。
問題点だらけで、ちょっとやる気を失ってます。
2.0.49 で動作した方は是非方法を報告をお願いします。
そういうわけで、とりあえず自宅の Web サーバは Win32 に移行しました。
(このドキュメントを表示してるサーバです)
Win32 ネイティブは早いので、もう Cygwin の Apache2 には
戻ってこないかもしれません(笑)
Win32 でも何とかしてみせましょ?(笑)
ちなみに Cygwin 1.3.12 と 1.3.22 での Apache 2.0.48 以前では
完璧な動作を確認をしました。
また、このページでの作業は Administrators に所属しているユーザで
行うことを想定しています。
Apache2 を使う
なぜ Apache2 を使うのか
Web サーバに Cygwin 標準パッケージで提供されていない Apache2 を選ぶのは
趣味(笑) とパフォーマンスのためです。
Cygwin 標準パッケージの Apache1 はパフォーマンスが悪く
そのせいで、Nimda や CodeRed などの Virus や
分割ダウンロードソフトなどの負荷でプロセスがおかしくなるという問題がありました。
その解決のために、不要な機能を削ったものを (負荷低減のため)、
静的に (DSOではなくという意味) 組み込んだ Apache を作る必要がありました。
そして、どうせソースから make するなら最新の Apache2 を選ぶのが私の趣味。
同意できる人だけついてきなさいっ! (テンション高め)
必要なソースの準備 (Apache2 本体)
まずは問答無用で Apache2 の最新版ソースが必須です。
これがないと話が始まりません。
以下のリンクから httpd-2.xx.xx.tar.gz をダウンロードしてください。
(2.xx.xx には バージョン番号が入ります)
このとき、ブラウザやサーバによっては gz の圧縮が解凍された、
tar パッケージになることがあるので、注意しておいてください。
http://httpd.apache.org/download.cgi
なお、今回の説明では httpd-2.0.44.tar.gz を
ダウンロードしたとして話を続けます。
必要なソースの準備 (追加モジュール)
さらに、今回のように DSO (動的モジュール) を使わないなら、
組み込みたいモジュールを make 時に組み込む必要があります。
今回は Apache2 標準でないモジュールのうち mod_limitipconn を
組み込みたいと考えているので、今回はこのソースも取得します。
http://dominia.org/djao/limitipconn2.html
今回の説明では mod_limitipconn-0.22.tar.gz を
ダウンロードしたとして話を続けます。
ちなみに「いきなり言われても何がなにやらよくわかんないっ!」って人は
標準モジュールについては、以下のモジュール一覧を読んでください。
モジュール一覧
そして 標準モジュールで機能が足りなければ、
以下の URL で必要なモジュールを探してください。
Apache Module Registory
なお Apache1 用のモジュールは Apache2 で動きませんので念のため。
./configure ; make ; make install
ソースが準備できたら、make しましょう。
「make ってなにやらよくわかんないっ!」って人は大変ですので頑張ってください。
突き放してますけど、その辺はほかの機会に説明します。
httpd-2.0.44.tar.gz mod_limitipconn-0.22.tar.gz
を同じディレクトリで展開します。
$ tar zxvf httpd-2.0.44.tar.gz
$ tar zxvf mod_limitipconn-0.22.tar.gz
いつもどおり、以下のコマンドで configure のオプションを表示できます。
$ cd httpd-2.0.44
$ ./configure --help
今回はここで表示されるメッセージの中で、
組み込みたいモジュールを明示的に指定できる、
万能な方法である以下のオプションを用いることにします。
--disable-FEATURE
--enable-FEATURE
組み込むモジュールの選択は個人によって違いますが、
私は以下のようにすべてを明示的に指定して configure します。
Cygwin では suEXEC が使えませんので無効にしましょう。
なお、青いのは 非標準モジュール を組み込むオプションで、
組み込むモジュール依存でオプションは変わります。
$ ./configure --with-mpm=prefork \
> --with-module=aaa:../mod_limitipconn-0.22/mod_limitipconn.c \
> --enable-access \
> --enable-actions \
> --enable-alias \
> --enable-autoindex \
> --enable-cgi \
> --enable-dir \
> --enable-env \
> --enable-log_config \
> --enable-mime \
> --enable-mime_magic \
> --enable-negotiation \
> --enable-rewrite \
> --enable-setenvif \
> --enable-status \
> --disable-so \
> --disable-asis \
> --disable-auth \
> --disable-auth_anon \
> --disable-auth_dbm \
> --disable-auth_digest \
> --disable-auth_ldap \
> --disable-cache \
> --disable-cern_meta \
> --disable-cgid \
> --disable-charset_lite \
> --disable-dav \
> --disable-deflate \
> --disable-echo \
> --disable-example \
> --disable-expires \
> --disable-ext_filter \
> --disable-file_cache \
> --disable-headers \
> --disable-imap \
> --disable-include \
> --disable-info \
> --disable-isapi \
> --disable-ldap \
> --disable-proxy \
> --disable-speling \
> --disable-ssl \
> --disable-suexec \
> --disable-unique_id \
> --disable-userdir \
> --disable-usertrack \
> --disable-vhost_alias
あとは make; make install ですね。
以下のような感じです。
ログがとりたければご自由にどうぞ。
(私は make install だけログをとります)
$ make
$ make install
$ strip /usr/local/apache2/bin/*.exe
$ strip /usr/local/apache2/lib/*.a
Windows 上のサービスにインストール
make install までがすんだら、Apache2 を Windows 上のサービスにインストールしましょう。
以下のコマンドを実行すればインストールできます。
$ cygrunsrv -I apache2 -d "CYGWIN apache2" \
> -p /usr/local/apache2/bin/httpd \
> -a -DFOREGROUND -e "CYGWIN=ntsec nosmbntsec"
以上で、Apache2 が "CYGWIN Apache2" という名前でサービスに登録されました。
実際に使う
いうまでもなく、設定しない限り望みどおりにサーバが動くことはありません。
まずはやりたいことを整理しましょう。
やりたいことが決まったらそれにあわせた設定にしましょう。
そして、それ以上の権限を与えないようにしましょう。
同時に configure で有効にしたモジュールで大丈夫かを
確認することを忘れないでください。
最近はセキュリティがはやっているので知っていると思いますが、
何でも許可すればいいってものではありません。
最初に Apache2 が動作するのを確認したら、
そのあとはマニュアルや Web、書籍を参照しながら
/usr/local/apache2/etc/httpd.conf の設定をいじっていくことになります。
設定の詰め方は各自の努力次第です。
ただ、ひとつの参考として、私が用いていた
httpd.conf
を例示します。
それから最近はやりの Virtual Host 構築したコンフィグとしては、
httpd.conf
が参考になると思います。
なお、おすすめの参考URLは以下のとおりです
日本 Apache ユーザ会
Apache HTTP サーバ バージョン 2.0 ドキュメント
[ZDNet]-[Linux Tips]-[Apache]
ロボット対策
Studying HTTP
トラブルに対処する
Apache2 を使う際に、「サービスを起動できない」という問題が結構あります。
この場合はほぼ間違いなく owner/group 及び パーミッションの設定ミスです。
Apache の本体を構成するものがある場所、
ログの出力先、PIDの出力先 などをよく確認してください。
特に気をつけなければならない点として、
Windows 上のフォルダに対して、NTFS で SYSTEM ユーザに
アクセス権が必要だという点です。
make install でインストールすると、
NTFS での アクセス権の継承が起こりませんので
GUI で確認することが必須です。
ただ手作業 (GUI) でアクセス権処理は面倒なので、
以下の方法がおすすめです。
- 実行ファイル xcacls_setup.exe を取得します。
- xcacls_setup.exe を実行して、本体の xcacls をインストールします。
- 標準では C:\Program Files\Resource Kit\xcacls.exe
としてインストールされるので、そのファイルをフルパスをもちいて、
以下のように実行します。
- ファイル PATH については適宜読み替えた上で、
コマンドプロンプトから 以下のように実行しましょう。
C:\> "C:\Program Files\Resource Kit\xcacls.exe" c:\cygwin /C /T /E /P SYSTEM:F;F /Y
- プロンプトが帰ってくれば終了です。
Apache2 を使わなくなったら
Windows 上のサービスからアンインストール
Cygwin をアンインストールするときや、
Apache2 を使わなくなったときなどはサービスからアンインストールしましょう。
以下のコマンドでアンインストールができます。
$ cygrunsrv -R apache2
サービスから名前が消えていることを確認してください。