2008年09月27日 20:30 [Edit]

買い替える絶好の時期 - 書評 - Apacheクックブック第2版

Bashクックブック」と一緒に献本いただいたのが、こちら。

Apache 1.3 & 2.0 をカヴァーした第一版よりも、2.0 & 2.2をカヴァーした本書の方が有用性は高い。

なぜかというと、ユーザー視点から見ると1.3と2.0の差より、2.0と2.2の差の方が大きいからだ。


本書「Apacheクックブック」は、世界一普及しているWebサーバー、Apacheのクックブック。最近でこそ (Apacheとは相性がよくない) Ruby on Rails のおかげもあって Apache 以外のWebサーバーも少しずつ普及してきたが、それでも「WebサーバーといえばApache」というのは未だに事実である。

で、どのApache?

という設問が実はある。サーバーというのはクライアントより遥かに稼働時間が長いこともあって、クライアントソフトウェアよりも世代交代はゆるやかなのだ。1.3系列は未だによく使われている(うちでも使っている)。そのこともあってか、内部設計を刷新した2.0系列も、設定ファイルは1.3系列とほとんど互換だった。

ところが2.2になって、この設定ファイルの書き方がかなり変わっているのだ。特に認証系はそうで、1.3の時の慣習が板についてしまっている私はちょくちょく間違える。初心者も去ることながら、むしろ「使い続けて10年以上」なベテランにこそありがたい本に本書は仕上がっている。本書は2.0と2.2の双方をカヴァーしているので、サーバー移行の際には実に重宝しそうだ。

ちなみに、OS XではTigerまでが1.3で、Leopardから2.2になった。そう。「Web共有」を実現しているのも、実はApacheなのである。標準設定ではファイル共有に毛が生えた程度のことしか出来ないが、設定ファイルを書き換えるだけでmod_perlmod_php5も使える、フルセット以上のApacheがどのMacにもインストールされている。

ものがサーバーだけに、厚い本が多いクックブックのなかにあって、300ページちょっとしかないのもよい。目次こそ長いが、レシピの多くが1ページか2ページに収まっている。さすがに「Apacheモジュールの書き方」まではカヴァーしていないが、上級編といえるそれを除けば「Webサーバーでやりたいこと」のほぼ全ては、本書のレシピでほぼ全て「料理可能」だろう。

そうそう。本書には「それはできません」というレシピもある。たとえば「クライアントのMACアドレスを記録するには」、など。中級者以上にとっては当然でも、知らなければつい「出来ないか」と考えてしまうことに、きちんと理由を示した上で「出来ません」と書くこのスタイルは、他の技術書も多いにまねるべきだろう。

本書には明白かつ重大な欠点が一つある。本書にはいわゆる「ヘルパースクリプト」が数多く登場する。そのほとんどが perl で書かれているのだが、これが「Perlクックブック」の読者が卒倒しそうな代物なのだ。use strictなし、ファイルハンドルは Bare Word。典型的な「ベテランシステム管理者にしてノンプログラマー」が書くスクリプトなのだが、これはいいかげんにしていただきたいものだ。

というわけで、本書をご利用の際には、ヘルパースクリプトの部分だけは注意を。少なくともuse strictは入れてくださいませ。

Dan the Apache User since 0.x

目次 oreilly.co.jp -- Online Catalog: Apacheクックブック 第2版より
目次
まえがき
1章 インストール
レシピ1.1 Red Hat Linuxのパッケージからインストールする
レシピ1.2 Debianのパッケージからインストールする
レシピ1.3 WindowsにApacheをインストールする
レシピ1.4 Apacheのソースコードをダウンロードする
レシピ1.5 ソースコードからApacheをビルドする
レシピ1.6 Apacheを起動、停止、再起動する
レシピ1.7 Apacheをアンインストールする
レシピ1.8 どのバージョンのApacheを使えばよいか
レシピ1.9 config.niceを使ってアップグレードする
レシピ1.10 システム起動時にApacheを起動する
レシピ1.11 便利な設定オプション
レシピ1.12 Apacheのファイルを見つける
2章 一般的なモジュールの追加
レシピ2.1 一般的なサードパーティ製モジュールをインストールする
レシピ2.2 Unix系システムにmod_davをインストールする
レシピ2.3 Windowsにmod_davをインストールする
レシピ2.4 Unix系システムにmod_perlをインストールする
レシピ2.5 Unix系システムにmod_phpをインストールする
レシピ2.6 Windowsにmod_phpをインストールする
レシピ2.7 mod_sslをインストールする
レシピ2.8 modules.apache.orgでモジュールを探す
レシピ2.9 mod_securityをインストールする
レシピ2.10 なぜモジュールがうまく動かないのか
3章 ログの記録
レシピ3.1 ログエントリにもっと詳しい情報を記録する
レシピ3.2 もっと詳しいエラーを取得する
レシピ3.3 POSTの内容をログに記録する
レシピ3.4 プロキシ経由のクライアントのIPアドレスをログに記録する
レシピ3.5 クライアントのMACアドレスをログに記録する
レシピ3.6 Cookieをログに記録する
レシピ3.7 ローカルページからの画像のリクエストをログに記録しない
レシピ3.8 特定の時間にログファイルをローテーションする
レシピ3.9 毎月始めにログファイルをローテーションする
レシピ3.10 IPアドレスではなくホスト名をログに記録する
レシピ3.11 バーチャルホストごとに別のログで管理する
レシピ3.12 プロキシ経由のリクエストをログに記録する
レシピ3.13 バーチャルホストのエラーを別々のログファイルに記録する
レシピ3.14 サーバのIPアドレスをログに記録する
レシピ3.15 参照しているページをログに記録する
レシピ3.16 ブラウザのソフトウェア名をログに記録する
レシピ3.17 リクエストヘッダの任意のフィールドをログに記録する
レシピ3.18 レスポンスヘッダの任意のフィールドをログに記録する
レシピ3.19 MySQLデータベースに動作ログを記録する
レシピ3.20 syslogにログを記録する
レシピ3.21 ユーザディレクトリごとにログを記録する
4章 バーチャルホスト
レシピ4.1 ネームベースのバーチャルホストを設定する
レシピ4.2 デフォルトのネームベースのバーチャルホストを設定する
レシピ4.3 アドレスベースのバーチャルホストを設定する
レシピ4.4 デフォルトのアドレスベースのバーチャルホストを設定する
レシピ4.5 アドレスベースとネームベースのバーチャルホストを混在させる
レシピ4.6 mod_vhost_aliasを使ってバーチャルホストをまとめる
レシピ4.7 書き換えルールを使ってバーチャルホストをまとめる
レシピ4.8 バーチャルホストごとにログを記録する
レシピ4.9 バーチャルホストごとにログファイルを分割する
レシピ4.10 ポートベースのバーチャルホストを設定する
レシピ4.11 複数のアドレス上で同じコンテンツを表示する
レシピ4.12 データベースを使ってバーチャルホストを定義する
5章 エイリアスとリダイレクトとリライト
レシピ5.1 URLをディレクトリに対応付ける
レシピ5.2 既存のコンテンツを新しいURLでアクセスする
レシピ5.3 ユーザに独自のURLを与える
レシピ5.4 1つのディレクティブで複数のURLをエイリアスする
レシピ5.5 複数のURLを同じCGIディレクトリに対応付ける
レシピ5.6 ユーザごとにCGIディレクトリを作る
レシピ5.7 別の場所にリダイレクトする
レシピ5.8 複数のURLを同じ宛先にリダイレクトする
レシピ5.9 URLで大文字と小文字を区別しないようにする
レシピ5.10 シンボリックリンクを使わずにPHPソースをハイライトする
レシピ5.11 リクエストされたURLのテキストを書き換える
レシピ5.12 パス情報をCGI引数に書き換える
レシピ5.13 他のサイトからのアクセスを拒否する
レシピ5.14 Refererのないリクエストを説明ページにリダイレクトする
レシピ5.15 クエリ文字列に基づいて書き換える
レシピ5.16 サーバのすべてあるいは一部のリクエストをSSLにリダイレクトする
レシピ5.17 ディレクトリをホスト名に変換する
レシピ5.18 すべてのリクエストを1つのホストにリダイレクトする
レシピ5.19 ドキュメント名を引数に変換する
レシピ5.20 パスとクエリ文字列間で要素を書き換える
レシピ5.21 ホスト名をディレクトリに書き換える
レシピ5.22 URLセグメントをクエリ文字列に書き換える
レシピ5.23 AliasMatch、ScriptAliasMatch、RedirectMatchを使う
6章 セキュリティ
レシピ6.1 システムのアカウント情報をWeb認証に利用する
レシピ6.2 1度だけ使えるパスワードを設定する
レシピ6.3 パスワードを期限切れにする
レシピ6.4 アップロードサイズを制限する
レシピ6.5 画像がサイトの外部から使われるのを禁止する
レシピ6.6 弱い認証と強い認証の両方を要求する
レシピ6.7 .htpasswdファイルを管理する
レシピ6.8 Digest認証のパスワードファイルを作成する
レシピ6.9 サブディレクトリのセキュリティを弱める
レシピ6.10 選択的に制限を解除する
レシピ6.11 ファイル所有権を使ってアクセスを許可する
レシピ6.12 ユーザの証明書をMySQLデータベースに格納する
レシピ6.13 認証されたユーザ名にアクセスする
レシピ6.14 認証に使われたパスワードを取得する
レシピ6.15 パスワードのブルートフォース攻撃を防ぐ
レシピ6.16 Digest認証かBasic認証を使う
レシピ6.17 URLに埋め込まれた証明書にアクセスする
レシピ6.18 WebDAVを保護する
レシピ6.19 Webサーバユーザがファイルを書き込めないようにしてWebDAVを有効にする
レシピ6.20 特定のURLに対するプロキシ経由のアクセスを制限する
レシピ6.21 ラッパーを使ってファイルを保護する
レシピ6.22 悪意のあるスクリプトからサーバのファイルを保護する
レシピ6.23 ファイルに適切なパーミッションを設定する
レシピ6.24 最小限のモジュールを動かす
レシピ6.25 Webディレクトリの外部にあるファイルへのアクセスを制限する
レシピ6.26 ユーザごとに使えるメソッドを制限する
レシピ6.27 Rangeリクエストを制限する
レシピ6.28 mod_evasiveを使ってDoS攻撃を防御する
レシピ6.29 mod_securityを使ってApacheをchrootする
レシピ6.30 Apache 2.2認証に移行する
レシピ6.31 mod_securityを使ってウイルスをブロックする
レシピ6.32 Subversionリポジトリに読み出しのみと書き込み可能アクセスを混在させる
レシピ6.33 禁止されたURLを隠すためにPermanentリダイレクトを使う
7章 SSL
レシピ7.1 SSLをインストールする
レシピ7.2 Windows上にSSLをインストールする
レシピ7.3 自己署名のSSL証明書を生成する
レシピ7.4 信頼されたCAを生成する
レシピ7.5 サイトの一部をSSL経由で提供する
レシピ7.6 クライアント証明書を使って認証する
レシピ7.7 バーチャルホストでSSLを使う
レシピ7.8 ワイルドカード証明書を使う
8章 動的コンテンツ
レシピ8.1 CGIディレクトリを有効にする
レシピ8.2 ScriptAlias以外のディレクトリでCGIスクリプトを有効にする
レシピ8.3 CGIディレクトリにデフォルトドキュメントを指定する
レシピ8.4 Windowsのファイル拡張子を使ってCGIプログラムを起動する
レシピ8.5 CGIスクリプトの拡張子を指定する
レシピ8.6 CGIが正しくセットアップできたかテストする
レシピ8.7 フォームのパラメータを読み出す
レシピ8.8 特定のコンテンツタイプ用のCGIプログラムを呼び出す
レシピ8.9 SSIを使用可能にする
レシピ8.10 最終更新日時を表示する
レシピ8.11 標準ヘッダを挿入する
レシピ8.12 CGIプログラムの出力を挿入する
レシピ8.13 suexecを使って別のユーザとしてCGIスクリプトを実行する
レシピ8.14 CPANからmod_perlハンドラをインストールする
レシピ8.15 mod_perlハンドラを書く
レシピ8.16 PHPスクリプト処理を使用可能にする
レシピ8.17 PHPが正しくインストールされているか確認する
レシピ8.18 CGI出力をSSIで解析する
レシピ8.19 ScriptAliasにあるスクリプトの出力をSSIで解析する
レシピ8.20 すべてのPerlスクリプトをmod_perlで処理する
レシピ8.21 Pythonスクリプト処理を使用可能にする
9章 エラー処理
レシピ9.1 Hostフィールドがないリクエストを処理する
レシピ9.2 CGIスクリプトのレスポンスステータスを変更する
レシピ9.3 エラーメッセージをカスタマイズする
レシピ9.4 複数の言語でエラードキュメントを提供する
レシピ9.5 無効なURLを他のページにリダイレクトする
レシピ9.6 Internet Explorerにエラーページを表示させる
レシピ9.7 エラー状態を通知する
10章 プロキシ
レシピ10.1 プロキシサーバを保護する
レシピ10.2 プロキシサーバがオープンなメールリレーとして使われることを防ぐ
レシピ10.3 別のサーバにリクエストを転送する
レシピ10.4 特定の場所に対するプロキシ経由のリクエストをブロックする
レシピ10.5 mod_perlコンテンツを別のサーバから提供する
レシピ10.6 キャッシュプロキシサーバを設定する
レシピ10.7 プロキシ経由のコンテンツをフィルタリングする
レシピ10.8 プロキシサーバに認証を要求する
レシピ10.9 mod_proxy_balancerを使って負荷分散する
レシピ10.10 バーチャルホストをプロキシする
レシピ10.11 FTPのプロキシを拒否する
11章 パフォーマンス
レシピ11.1 必要なメモリ量を測定する
レシピ11.2 abを使ってApacheをベンチマークする
レシピ11.3 KeepAlive設定を調整する
レシピ11.4 サイトの動作のスナップショットを取得する
レシピ11.5 DNS検索を回避する
レシピ11.6 シンボリックリンクを最適化する
レシピ11.7 .htaccessファイルのパフォーマンスへの影響を最小限にする
レシピ11.8 コンテントネゴシエーションを使用不可にする
レシピ11.9 プロセスの生成を最適化する
レシピ11.10 スレッドの生成をチューニングする
レシピ11.11 頻繁に参照されるファイルをキャッシュする
レシピ11.12 複数のサーバ間で均等に負荷を分散する
レシピ11.13 ディレクトリのリストをキャッシュする
レシピ11.14 mod_perlを使ってPerl CGIプログラムを高速化する
レシピ11.15 動的コンテンツをキャッシュする
12章 ディレクトリのリスト表示
レシピ12.1 ディレクトリやフォルダのリストを生成する
レシピ12.2 標準的なヘッダとフッタを付けてディレクトリのリストを表示する
レシピ12.3 スタイルシートを適用する
レシピ12.4 リスト表示の一部を隠す
レシピ12.5 ディレクトリのリスト表示から特定のファイルを検索する
レシピ12.6 ディレクトリのリストをソートする
レシピ12.7 クライアントがソート順を指定できるようにする
レシピ12.8 リストの表示フォーマットを指定する
レシピ12.9 クライアントが表示フォーマットを指定できるようにする
レシピ12.10 ファイルに説明を付ける
レシピ12.11 ドキュメントのタイトルから説明を自動生成する
レシピ12.12 リスト表示のアイコンを変える
レシピ12.13 ディレクトリからリスト表示する
レシピ12.14 バージョン番号順に表示する
レシピ12.15 ユーザがバージョン番号によるソートを指定できるようにする
レシピ12.16 ユーザが表示出力を完全にコントロールできるようにする
レシピ12.17 ユーザがリスト表示を変更できないようにする
レシピ12.18 リストの特定の列を表示しない
レシピ12.19 リスト表示が禁止されているファイルを表示する
レシピ12.20 ディレクトリのリストにエイリアスを表示する
13章 その他のトピック
レシピ13.1 ディレクティブを適切な場所に書く
レシピ13.2 .htaccessファイルの名前を変更する
レシピ13.3 「末尾のスラッシュ」問題を解決する
レシピ13.4 ブラウザの能力に応じてContent-Typeヘッダを設定する
レシピ13.5 Hostヘッダフィールドがないリクエストを処理する
レシピ13.6 デフォルトドキュメントを変更する
レシピ13.7 デフォルトの"favicon"(お気に入りアイコン)を設定する
レシピ13.8 ScriptAliasされたディレクトリをリスト表示する
レシピ13.9 .htaccessファイルを有効にする
レシピ13.10 IBM/LotusのSSIをApacheのSSIに変換する
付録A Apacheの正規表現
A.1 どのディレクティブで正規表現が使えるのか?
A.2 正規表現の基礎
A.3 実際の例
A.4 参考情報
付録B トラブルシューティング
B.1 トラブルシューティングの方法
B.2 設定のデバッグ
B.3 スクリプトヘッダが正しく終了していない場合のデバッグ
B.4 Windowsでよくある問題
B.5 ビルド時のエラーを修正する
B.6 SSIを利用する
B.7 "Not Found"エラーになるリライトのデバッグ
B.8 .htaccessファイルの効果がない
B.9 アドレスがすでに使われている
索引
コラム目次
認証と許可
HTTPとブラウザと証明書
弱い認証と強い認証
よくある2つの間違い
[]と[::]

この記事へのトラックバックURL

この記事へのトラックバック
書評リンク - Apacheクックブック 第2版 ― Webサーバ管理者のためのレシピ集
Apacheクックブック 第2版 ― Webサーバ管理者のためのレシピ集【書評リンク】at 2008年09月30日 20:46
Apacheクックブック 第2版posted with amazletKen Coar Rich Bowen オライリージャパン Amazon.co.jp で詳細を見る 弾さんのところで書評がでていたapache本。やっぱり2.2というのがポイントみたい。設定ファイルの書き方などが変わっているから。 「Webサーバーでやりたい...
Apacheクックブック 第2版【Shoulder.jp】at 2008年10月06日 06:30
Apacheクックブック 第2版posted with amazletKen Coar Rich Bowen オライリージャパン Amazon.co.jp で詳細を見る 弾さんのところで書評がでていたapache本。やっぱり2.2というのがポイントみたい。設定ファイルの書き方などが変わっているから。 「Webサーバーでやりたいこ...
Apacheクックブック 第2版【Shoulder.jp】at 2010年12月16日 13:49
この記事へのコメント
最近は、mod_railsの登場でRailsでもApacheって感じにはなってきてます。
Posted by chibakick at 2008年10月04日 17:23