Apacheのhttpd.confの記述方法

目次

Apache1.3系のhttpd.confの設定方法はhttpdの動作の全てに依存します。ここではhttpd.confの記述方法についての説明をまとめています。バージョンアップについてはインストールログを参照して下さい。

基本設定
Directory
Files
AllowOverride
Options
DirectoryIndex
AddModule
VirtualHostの設定
ディレクトリ単位制御
WebDAVモジュール
アクセス制限モジュール
gzip圧縮モジュール
帯域コントロールモジュール
Tomcat連動モジュール
チューンナップ
戻る

基本設定

apacheを動作させる専用のユーザーを作ります。

# useradd -s /bin/false -d /var/apache apache

ホームディレクトリは/var/apacheなどにしておくと良いです。またapacheグループも作成した方が良いです。 apacheログの記録に影響がない様、apacheインストールディレクトリの権限もrootからapacheに変更します。

# chown -R apache /usr/apache

次にapache(httpd)をapacheユーザーで起動させるためにhttpd.confを変更して下さい。

LockFile /usr/apache/run/httpd.lock
PidFile /usr/apache/run/httpd.pid
ScoreBoardFile /usr/apache/run/httpd.scoreboard

User apache
Group apache

最後にServerNameの記入は必要事項ですので

ServerAdmin serveradm@syns.net
ServerName www.syns.net
 

と記入にすれば終了です。その後はapachectlをrestartさせれば全てのnobodyユーザーで稼動していたhttpdをシャトダウンしてapacheユーザーでhttpdが稼動します。

<Directory directory> ... </Directory>

<Directory>と</Directory>はそのディレクトリで指定されたディレクトリとサブディレクトリに対してのみ適用される命令のグループ化ために使用されます。そのディレクトリ内では許可された命令のみが使用可能となります。Directoryは相対パスか、またはワイルドカードのどちらかです。ワイルドカードの中で「?」はある一文字に一致し、「*」はある連続した文字列に一致します。例えば:

<Directory /usr/local/httpd/htdocs>
Options Indexes FollowSymLinks
</Directory> 

という場合、/usr/local/httpd/htdocs 内もしくはそのサブディレクトリ内で 命令Options ゛Indexes" "FollowSymLinks"が有効になるという事です。ここで注意しなくてはいけないことは、""で指定したディレクトリは絶対パスを意味します。""を省略した場合、これはDocument Rootの相対パスになります。

<Directory  ̄ "^/www/.*/[0-9]{3}"> 

上記はDocument Root配下にある/www/にある3つの数字から成るディレクトリ名に一致します。
注意:<Directory></Directory>外の記述はデフォルトディレクトリに適用される命令です。

<Files filename> ... </Files>

<Files>命令は、ファイルネームによるアクセスコントロールを設定します。<Directory>命令に匹敵します。そして末尾の</Files>命令と対応させます。与えられたファイルネームに対して適用される命令は内部でリストになっています。 </Files>セクションは<Directory>セクションと .htaccessファイルが読み込まれた後、<Location>セクションの前にコンフィグレーションファイルに存在する命令を処理します。

filenameはあるファイルネームまたは、ワイルドカード文字を含みます。「?」はある一文字に一致し、「*」はある連続した文字列に一致します。通 常の表記よりも拡張された正規表現もまた「 ̄」文字を付加して使用する事が出来ます。例えば:

<Files  ̄ "¥.(gif|jpe?g|png)$"> 

最も一般的なインターネットのグラフィックのフォーマットに一致するでしょう。 .htaccessファイルの内部で使われる<Directory>セクションは、<Location>セクションと<Files>セクションとは違うことに注意してください。

AllowOverride

サーバが.htaccessファイル(AccessFileNameによって指定されたファイル)を見つけると、サーバはより早くアクセス情報を上書き出来るファイルに設定された命令を知ろうとします。公開上ディレクトリ内の.htaccessファイルを有効にさせるための記述です。OverrideはNoneに設定することが出来ます。それはサーバがそのファイル(.htaccess)を実行しないように設定する場合です。サーバが全ての命令を許す場合はOverrideをAllにします。その他Overrideには次の様な設定があります。

AuthConfig
認証設定の使用を許可します。 (AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile and require).

FileInfo
ドキュメントタイプをコントロールする命令の使用を許可します (AddEncoding, AddLanguage, AddType, DefaultType and LanguagePriority).

Indexes
ディレクトリインデクスをコントロールする命令の使用を許可します (AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions and ReadmeName).

Limit
ホストへのアクセスをコントロールする命令の使用を許可します (allow, deny and order)。次の例はiria1.07s9aのブラウザ変数をもったクライアントからのアクセスを制限しています。

BrowserMatch "Iria/1¥.07s9a" bbroken (¥はバックスラッシュです)
<Limit GET POST>
order allow,deny
deny from env=bbroken
allow from all
</Limit>

下記は192.168.0.0/24からのアクセスを制限しています。

deny from 192.168.0.
allow from all

Options
特定のディレクトリの設定をコントロールする命令の使用を許可します (Options and XBitHack).

Satisfy
Satisfy any を宣言することで、「ホスト制限を通過する」あるいは「パスワード認証を通過する」のどちらかひとつを満たせば、コンテンツを閲覧できる資格を有します。


Options [+|-]option [+|-]option ..

Options命令はサーバ制御を特定のディレクトリ内でのみ有効にする命令です。
optionがNoneに設定されている場合は特別な制御は使用不可であるかあるいは、次のような場合があります。

All
MultiViewsを除いた全てのものが利用可能です。

ExecCGI
CGIの実行が認められます。

FollowSymLinks
サーバはこのディレクトリにシンボリックリンクを許可します。

Includes
サーバ側インクルード機能を許可します。

IncludesNOEXEC
サーバ側インクルード機能を許可しますが、#exeコマンドとCGIスクリプトの#include は含みません。

Indexes
もしディレクトリにマップしているURLがリクエストされ、そのディレクトリに DirectoryIndex(例:index.html)がない場合には、サーバがそのディレクトリ以下のファイルを表示することを許可します。

MultiViews
Content negotiated MultiViewsを許可します。これによってAddLanguageが有効になり、ロケールに合わせて異なる言語を表示できるようになります。

SymLinksIfOwnerMatch
サーバは、対象とするファイルとディレクトリがリンクしているとき同様のユーザIDに従ってシンボリックリンクを許可します。

通常、もし複数の Option があるディレクトリに対して適用された時、大抵特定の一つが実行されます。;option は2つ以上を実行することができません。しかし、もしOptions命令のallに + か - の記号がallの前に書かれている場合は、option はマージされます。+ が書かれたoptionは一般に、有効にoptions に加えられ、- が書かれたoption は効果のあるoption から除外されます。 例えば, + と - の記号なしでは:

<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options Includes
</Directory>
  

上記は Includes だけが /web/docs/spec ディレクトリに設定されます。Options命令が + と - の記号を使っていれば、

<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options +Includes -Indexes
</Directory>
     

これによってFollowSymLinks と Includes が /web/docs/spec ディレクトリに設定されます。

DirectoryIndex File File ...

URLでファイル名を省略した場合に表示するファイルをしていします。"/index.html" を"/"に省略する場合はFileにindex.htmlを指定します。

DirectoryIndex index.html index.shtml index.htm 

上記はindex.html index.shtml index.htm全てを"/"に省略するための記述です。ディレクトリにこれら3種が存在する場合は前から優先されます。

AddModule module module ...

Compatibility: AddModuleはApache1.2以降のみ使用可能です。

サーバは普段使用していないコンパイルされたモジュールを使用することが可能です。この命令はそれらのモジュールを使用可能にするために使用されます。サーバはあらかじめロードされた実行可能なモジュールのリストを実行します。このリストはClearModuleList命令によってクリアーされます。

VirtualHostの設定

バーチャルホスト
1つのサーバ上に、2社以上のサイトを設置したい場合が考えられます。 この2社以上のサイトを1つのサーバ上に構築する設定方法がApacheのバーチャルホストです。 必要なモジュールはmod_vhost_alias.soです。

LoadModule vhost_alias_module libexec/mod_vhost_alias.so
AddModule mod_vhost_alias.c
 

以下を追記してください。

NameVirtualHost 192.168.10.5

<VirtualHost 192.168.10.5>
DocumentRoot /var/apache/htdocs/
ServerName
syns.net
</VirtualHost>

<VirtualHost 192.168.10.5>
DocumentRoot /var/apache/htdocs/www
ServerName www.syns.net
</VirtualHost>

<VirtualHost
192.168.10.5>
DocumentRoot /
var/apache/htdocs/host/
ServerName host.syns.net
</VirtualHost>
 

このようにして1つのIPで複数のドメインを張り付けてドキュメントルートをわける場合は名前ベース(non-ip-VirtualHost) を使います。バーチャルホストのIPアドレスは外からみたアドレスを記入するのではありません。WWW自身が使っているNICのアドレスです。これによりNameVirtualHost ディレクティブで指定したIPアドレスに対するリクエストは名前ベース で割り振られるようになります。各割り振りはVirtualHostディレクティブで記述していき ます。上記の場合は、192.168.10.5に対してのアクセスをServerNameで指定したホスト名ご とに割り振られるようになります。

一方でIPベースのバーチャルホストがあります。こちらの方が歴史は古く一般 てきなのですが、Webサーバーに複数のIPを持つ例があまりありませんので最近ではnon-ip方法が普及しています。

NameVirtualHost 172.16.10.6
NameVirtualHost
172.16.10.5

<VirtualHost172.16.10.6>
DocumentRoot /var/apache/htdocs/www
ServerNamewww.syns.net
</VirtualHost>

<VirtualHost172.16.10.5>
DocumentRoot/var/apache/htdocs/host/
ServerNamewww.syns.net
</VirtualHost>
  

今度はVirtualHostディレクティブでIPアドレスを直接指定することによって IPアドレスごとに割り振られるようにしています。 名前ベースと同じ様にIPアドレスはWWWが使用しているNICのIPアドレスを記入してください。

ディレクトリ単位制御(.htaccess)

設定したいディレクトリに.htaccessファイルを置くとhttpd.confと同じ記述でそのディレクトリ以下を制御できます。一般 にローカル個人ユーザーにwebサービスを提供する場合httpd.confファイルを触れさせる事はできません。よってこの機能を使いユーザーが各好みの設定に変更して利用させる方法が良いです。 そのためにはhttpd.confよりhtaccessファイル優先させておく必要があります。

AccessFileName .htaccess 

.htaccessファイルの利用例を紹介しておきます。

1) CGI・SSIの実行権設定 サーバがデフォルトでCGI・SSI実行OKになっていない場合は、
.htaccessで設定する必要があります。

Options Includes execCGI
AddType text/x-server-parsed-html .shtml
AddType application/x-httpd-cgi .cgi .pl
  

2) PHPの実行拡張子設定

DirectoryIndex index.phtml index.html
AddType application/x-httpd-php3 .php3
 

3) ページをリダイレクトする アクセスされたら、指定したページに飛ばす方法。
HTMLの<meta http-equiv="〜">と違って、飛んだことに気づかれにくいです。

Redirect / http://hogehoge.com/
Redirect /fuga/ http://hogehoge.com/hoge/
 

4) 認証不許可時に表示する画面を指定する auth認証(上で指定したもの)で認証に失敗した場合は、指定したURLへ飛ばす。
(指定しない場合は、通常の"401 Authorization Required"エラーが表示されます)

ErrorDocument 401 /auth_err.html
ErrorDocument 403 "403 アクセス権がありません。" 

5) アクセス制限 認証許可するIDとパスワードは、あらかじめhtpasswdで作成しておきましょう。

AuthUserFile /home/mydir/public_html/(htpasswdで作成したパスワードファイル名)
AuthGroupFile /dev/null
AuthName "Authorization Users"
AuthType Basic
require valid-user
Satisfy any
order deny,allow
deny from all
 

WebDAVモジュール

必要モジュール:dav_mod
(例)mod_dav-1.0.2-1.3.6.tar.gz

$ ./configure --with-apxs=/usr/apache/bin/apxs
1.0.3のwebDAVの場合はapxsを使わずとも簡単にダイナミックモジュールとして導入できました。(その時の環境はNetBSDです)
$ make
$ su
# make install

インストールが済めばhttpd.confを編集して以下のモジュール指定文を追記してください。

LoadModule dav_module /usr/apache/libexec/libdav.so
AddModule mod_dav.c

mod_davの設定は以下様に記述します。

DAVLockDB /usr/apache/run/DAVLock
<Location /DAV>
DAV On
</Location>

以上でファイル共有はできるようになります。上手く機能しない場合はDAVとOnの間だをスペースではなくダブを入れてみて下さい。また<Location>ディレクティブではなくDirevtry>ディレクティブでも問題ありません。

すべてのアクセスで認証をかける場合は以下の様に記述します。

DAVLockDB /usr/apache/run/DAVLock
<Location /DAV>
DAV On
<Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
</Limit>
</Location>

参照では認証をかけない場合は以下の様に記述します。

DAVLockDB /usr/apache/run/DAVLock
<Location /DAV>
DAV On
<LimitExcept GET HEAD OPTIONS>
AuthType Basic
AuthName "WebDAV Secutity"
AuthUserFile /etc/apache/davuser
Require valid-user
</LimitExcept>

</Location>

以上で、設定の完了です。
次に文字変換モジュールを使って日本語ファイルを対応させます。
必要モジュール:mod_encoding
(例)mod_dav-1.0.2-1.3.6.tar.gz

導入はメインページにあるインストールログの「apache (patch & update)」を参考に次のコマンドラインを実行してください。

# /usr/apache/sbin/apxs -c -i -I /usr/local/include -L /usr/local/lib -l iconv mod_encoding.c

インストールが済めばhttpd.confを編集して以下のモジュール指定文を追記してください。

LoadModule mod_encoding /usr/apache/libexec/mod_encoding
AddModule
mod_encoding.c

Windowsからのアクセスを考え以下の様に記述します。

<IfModule mod_encoding.c>
EncodingEngine on
NormalizeUsername on
SetServerEncoding UTF-8
AddClientEncoding SJIS "Microsoft .* DAV"
AddClientEncoding SJIS "xdwin9x/"
DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
AddClientEncoding "cadaver/" EUC-JP
</IfModule>

以上で設定の完了です。設定箇所の説明は下記を参考にして下さい。

NormalizeUsername on
これにより、WindowsXP対応になります。(IISのWebDAVを互換を取るようにユーザにドメイン名がある場合、それを削ります)
WindowsXPからのアクセスの場合、通常の「ネットワークプレースの追加」からDAVフォルダを指定してもWebフォルダとして認識しません。Webフォルダとして認識させるためにはDAVフォルダURLの最後に「?」を入力してください。
(例)
Windows2000の場合:http://webdav.local/share/
WindowsXPの場合:http://webdav.local/share?

SetServerEncoding UTF-8
DAVフォルダ内のファイル名はUTF-8で保存されます。

AddClientEncoding SJIS "Microsoft .* DAV"
MicrosoftクライアントからのアクセスはSJISに変換します。

ちなみに 任意のApache公開ファイルに.htaccessファイルを使ってDAV共有することも確認しました。

アクセス制限モジュール

一般にページの制限や接続元による表示内容の変更はWebアプリケーションを用いますが、Apacheでも細かなアクセス制限が可能です。mod_rewriteとmod_setenvifのモジュールの代表的な利用方法の一つに直接リンクを禁止する方法があります。

mod_rewriteはSolarisの標準のapacheに同梱されています。
特定の[許可RefereURL]からのアクセスのみ許可します。サイトURLと許可RefererURLを一致させることで直リンクを禁止することができます。

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^$
RewriteCond %{HTTP_REFERER} !^[許可RefererURL1].*$ [NC]
RewriteCond %{HTTP_REFERER} !^[許可RefererURL2].*$ [NC]
RewriteRule ^(.*)$ - [F]

RewriteRule .*¥.gz$ - [F] とすると.gzファイルのみ直リンクを禁止します。
RewriteRule ^/$ /www/ [R] とするとURL"/"を/www/にリダイレクトします。
またブラウザの環境変数HTTP_REFERERの他に HTTP_USER_AGENTやREQUEST_FILENAME,HTTP_HOSTも使用できることを確認しています。

mod_setenvifはApache1.3.12以前のバージョンには確実には同梱されていません。 mod_setenvifを使用する場合はApacheのバージョンアップをしてください。
特定の[許可Referer URL]からのリンクのみ許可 します。

SetEnvIf REFERER "[許可Referer URL]" Lilith
Order deny,allow
deny from all
allow from env=Lilith

特定の[許可Referer URL]からのリンクのみ不許可にしています。

SetEnvIf REFERER "[許可Referer URL]" Lilith
Order Allow,Deny
allow from all
deny from env=Lilith

これらの記述は、.htaccessにそのまま記述してもかまいません。一方、httpd.confに記述する時は必ずディレクトリを指定しましょう。 サイト全てが直リン禁止になればブックマークからの訪問者が接続できなくなりす。

<Directory /usr/local/httpd/htdocs/direct_limit>
Options Indexes FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^$
RewriteCond %{HTTP_REFERER} !^[許可RefererURL].*$ [NC]
RewriteRule ^(.*)$ - [F]
</Directory> 
  

詳しくはこちらを参照して下さい。
mod_setenvifの本家サイトはこちらです。
mod_rewiteの本家サイト はこちらです


gzip圧縮モジュール

必要なものはmod_gzip.cソースのみです。導入はメインページにあるインストールログの「apache (patch & update)」を参考に次のコマンドラインを実行してください。

# /usr/apache/bin/apxs -i -a -c mod_gzip.c

Solaris環境では/usr/ucb/ccがSunコンパイラであるため上手くコンパイルできない場合があります。その時はgccを使って下さい。

# setenv CC gcc
# /usr/apache/bin/apxs -i -a -c mod_gzip.c

またコンパイルはできたものの、apache起動時に次のようなリンクエラーが起きる場合があります。

Cannot load /usr/apache/libexec/mod_gzip.so into server: ld.so.1:
/usr/apache/bin/httpd: fatal: relocation error:
file /usr/apache/libexec/mod_gzip.so: symbol gzp_main:
referenced symbol not found

この場合、Makefileを下記の様に編集します。

APXS?=/usr/apache/bin/apxs

再コンパイルと手動インストールを行います。

# make
# mv mod_gzip.so /usr/apache/libexec/

最後にhttpd.confにモジュールのパスを記述します。

LoadModule gzip_module libexec/mod_gzip.so
AddModule mod_gzip.c

設定内容
LogFormat の最後に以下を追加します。

LogFormat "%h %l %u %t ¥"%r¥" %>s %b mod_gzip: %{mod_gzip_compression_ratio}npct." common_with_mod_gzip
(¥はバックスラッシュです)

次の様にCustomLog とIfModuleを修正してください。

CustomLog /var/apache/logs/access_log common_with_mod_gzip

<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_minimum_file_size 300
mod_gzip_maximum_file_size 0
mod_gzip_maximum_inmem_size 100000
mod_gzip_keep_workfiles No
mod_gzip_temp_dir /tmp
mod_gzip_item_include file ¥.html$
mod_gzip_item_include file ¥.jsp$
mod_gzip_item_include file ¥.php$
mod_gzip_item_include file ¥.cgi$
mod_gzip_item_include file ¥.txt$
mod_gzip_item_include file ¥.shtml$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-httpd-php
mod_gzip_item_include mime ^httpd/unix-directory$
mod_gzip_item_include handler ^perl-script$
mod_gzip_item_include handler ^server-status$
mod_gzip_item_include handler ^server-info$
mod_gzip_item_exclude file ¥.css$
mod_gzip_item_exclude file ¥.js$
mod_gzip_item_exclude mime ^image/.*
</IfModule>
(¥はバックスラッシュです)

一度access_logを確認して下さい。 今までのログの末尾に
mod_gzip: 73pct.
などと記されているとおもいます。これは73%の圧縮を意味します。 尚、gifファイル、クライアント側のブラウザがmod gzipに対応していない場合、は圧縮されません。

本家サイトはこちらです。

帯域コントロールモジュール

httpパケットの伝送速度を制限するモジュールにmod bandwidthがあります。 入手先はこちらです。

# /usr/apache/bin/apxs -c mod_bandwidth.c
# /usr/apache/bin/apxs -i -a mod_bandwidth.so

apxでインストールしない方がよいかもしれません。(もちろんコンパイルはapxを使用するべきでしょうが)

設定はhttpd.confにモジュールの設定を追記すればよいのですが、その前にmod_bandwidthの作業用フォルダを作成して下さい。

# mkdir /usr/apache/bindwidth
# mkdir /usr/apache/bindwidth/link
# mkdir /usr/apache/bindwidth/master
# chown -R apache:apache /usr/apache/bindwidth

httpd.confのモジュール設定例

LoadModule bandwidth_module libexec/mod_bandwidth.so
AddModule mod_bandwidth.c

<IfModule mod_bandwidth.c>
BandWidthModule On
BandWidthDataDir /usr/apache/bindwidth
BandWidthPulse 1000000
</IfModule>
<Directory "/var/apahce/htdocs/bandlimit_dir">
BandWidth 192.168.0.0/24 0
BandWidth all 8388608
</Directory>

<Directory "/var/apahce/htdocs/file">
LargeFileLimit 1000 8388608
MinBandWidth all 10240
</Directory>

bandlimit_dirに関しては内部192.168.0.0/24のネットワークに対して無制限、それ以外は8Mbyte/secの帯域制限をかけています。fileに関しては、1000KByteの以上の容量 に対して帯域制限8Mbyte/secの制限をかけ、それより小さいファイルに対しては帯域を解放しています。

BandWidthPulse
接続待機秒

BandWidth
帯域制限を、ドメイン別、IP アドレス別に設定します。 IP アドレスは「ネットワ−ク/マスク」の書式で、rate単位 はバイトです。0 の場合には無制限になります。

MinBandWidth
下限値を設定します。 rate に 0 を指定した場合は、既定値の 256 バイト/秒が下限値になります。

LargeFileLimit
指定した filesize KBytes 以上のファイルに対して帯域制限を設定します。

Tomcat連動モジュール

Jakarta-TomcatサーバーをApacheと連動させるモジュールにmod_jkというものがあります。ソース入手先はこちらです。導入はメインページにあるインストールログの「apache (patch & update)」を参考に下記に従ってください。

<ソースからインストール>
今回はJakarta-Tomcat4.1に対応した現時点(2003/10/04)での最新版モジュールを使用していますが、そのほかに4.0や3.3にも対応しています。 まず、コンパイルに必要なパッケージを下記にまとめます。これらの大半はSoftware Companionに含まれていますのでそちらから入手して下さい。
gcc-3.3
libxml2-2.5.5
make-3.80
m4-1.4
readline-4.3
gcmn-1.0
gawk-3.0.6

必要なパッケージをインストールした上で、次のモジュールをインストールします。
autoconf-2.57.tar.gz
automake-1.7.5.tar.gz
libtool-1.5.tar.gz

autoconf,automake,libtoolはパッケージからインストールを行うと、mod_jkが正常にコンパイルできません。よって、この3つはソースからコンパイルし、インストールします。まず、autoconfのインストールから行います。

# gtar zxvf autoconf-2.57.tar.gz
# cd /tmp/autoconf-2.57
# ./configure
# make
# make install

automakeのインストールは、次の様に行います。

# gtar zxvf automake-1.7.5.tar.gz
# cd /tmp/automake-1.7.5
# ./configure
# make
# make install

libtoolのインストールは、次の様に行います。

# gtar zxvf libtool-1.5.tar.gz
# cd /tmp/libtool-1.5
# ./configure
# make
# make install

必要なモジュールが正常にインストールできれば、mod_jkのインストールを始めます。

# gtar zxvf jakarta-tomcat-connectors-jk1.2.5-src.tar.gz
# cd jakarta-tomcat-connectors-jk1.2.5-src/jk/native
# chmod 755 buildconf.sh
# ./buildconf.sh
# ./configure --with-apxs=/usr/apache/bin/apxs --with-tomcat41=/usr/jakarta
# make
# cd /usr/local/src/jakarta-tomcat-connectors-jk-1.2.5-src/jk/native/apache1.3
# cp mod_jk.so.0.0.0 /usr/local/apache/libexec/mod_jk.so

次にhttpd.confの編集を行います。次の記述をhttpd.confに追記して下さい。

Include /etc/apache/jakarta/mod_jk.conf

追記したIncludeファイル/etc/apache/jakarta/mod_jk.confに次を記入します。

LoadModule jk_module libexec/mod_jk.so
<IfModule mod_jk.c>
JkWorkersFile /etc/apache/jakarta/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
JkMount /*.jsp worker1
JkMount /servlet/* worker1
JkMount /examples/* worker1
</IfModule>

JkWorkersFileで指定した/etc/apache/jakarta/workers.properties ファイルに次を記入します。

worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

以上で、mod_jkのインストールから設定までが完了しました。起動する時はTomcatを起動してからApacheを起動して下さい。
(先にApacheを起動するとmod_jkが正しく動作しません。)

上手くTomcatとApacheが起動できれば、ブラウザーで以下のURLにアクセスして下さい。サンプルサーブレットが試せます。
http://localhost/examples/servlets/

<バイナリインストール>
SPARC版バイナリファイルはjakarta.apache.orgより配布されています。
x86版バイナリファイルはこちらよりダウンロードして下さい。
バイナリファイル展開後、バイナリ.soファイルをApacheのlibexecにコピーします。
以下、設定方法は同じです。上記を参考にして下さい。

チューンナップ

Apacheのチューンナップはwebサーバー負荷の軽減に直接影響します。小さな作業の積み重ねがパフォーマンスの向上に繋がります。

<サーバーステータス>
ステータスを得る為にそれぞれのベンチマークプログラムを利用する方が望ましいのですが、apacheモジュールのmod_statusにもapacheステータスを出力する機能があります。 それを利用する場合、mod_statusが有効である事を確認し、次の様に記述します。

<Location /server-status>
SetHandler server-status
<Limit GET POST>
order deny,allow
deny from all
allow from 192.168.
</Limit>
</Location>

http://your.server.name/server-statusページにアクセスするためにウェブブラウザを使うことで、サーバ統計にアクセスすることができます。
もし"refresh"をサポートしているブラウザを持っているなら、それ自身が自動的に更新するステータスページを入手できます。N秒ごとにページを更新するhttp://your.server.name/server-status?refresh=Nにアクセスしてみて下さい。

Full Instrumentation
完全な統計を得るためには、Apacheを特別な命令でコンパイルしなければなりません。"Configuration"ファイルに以下のAUX_CFLAGS行を挿入することによってこれを行ない、通常通りコンパイルし直して下さい。 AUX_CFLAGS= (something) -DSTATUS

<モジュールの軽減>
apacheが起動時にロードするモジュールは多数ありますが、現状で使用していないモジュールはhttpd.confからコメントアウトしておくのが理想です。

<httpdプロセスについて>
デフォルトではhttpdプロセスは同時に256しか立ち上がりません。ハイパフォーマンスコンピュータの環境等で、さらにhttpdプロセスを増やす場合は次の様にコンパイルし直してください。

# setenv CFLAGS="-DHARD_SERVER_LIMIT=1024"
# ./configure

これらの記述はsrc/include/httpd.hに記述されていますので、インストール後は一度チェックしてみるとよいでしょう。

<httpd.confのパラメータ>
一度のアクセス数がMaxClientsよりも多い場合、セッション保持時間を短くし、待ち時間を減らす必要があります。

パラメータ
デフォルト値
意味
KeepAlive ON レスポンスを返した後もセッションを保持するかどうか
MaxKeepAliveRequests 100

接続してから切断するまでに受け付けるリクエストの数で、一般には1ページ辺りのファイル数とほぼ同等の数値にする。

KeepAliveTimeout 15

保持時間のタイムアウト値。より早く開放したい場合は、できるだけ小さな値にする。

MaxClients 150 通常のコンパイルでは256が上限となっている。CPUの処理能力とメモリー容量と比較してできるだけ大きな値にする。
MinSpareServers 5 最小待機プロセス数。あまり大きな値をとっても意味がない。
MaxSpareServer 10 最大待機プロセス数。最大時にはMaxClientsとMaxSpareServersを足した数のプロセスが起動する。
MaxRequestsPerChild 0 プロセス自体の生存回数。これを大きく取ることで、次のアクセスに対してプロセスが殺さずに処理できる。

Apache1.3の負荷に対するこれ以上の対策は、マルチプロセスの専門ページを参考にして下さい。