目次
概要
Apache HTTP サーバ (Apache) は、 http://www.netcraft.com/ の調査によると 50% 以上ものシェアを持つ Web サーバで、世界で最もよく 使用されている Web サーバです。 Apache Software Foundation (http://www.apache.org/) で開発されている Apache は 多くのオペレーティングシステムで利用することができます。 openSUSE® には Apache バージョン 2.2 が含まれています。この章では、 Apache Web サーバのインストールから設定、 SSL や CGI の使用方法、および トラブル発生時の解決方法について、それぞれ言及しています。
この章を読み進めていくことで、 Apache の設定と起動を簡単に行なうことが
できます。 Apache のインストールと設定は、 root
の状態から行ないます。
Apache Web サーバを設定する前に、下記の要件を全て満たしていることをご確認 ください:
対象となるマシンのネットワーク設定が正しく行なわれていることを確認して ください。詳しくは 第13章 ネットワークの基礎 をお読みください。
対象となるマシンのシステム時刻が、タイムサーバを利用して正確に同期できて いることを確認してください。これは、 HTTP プロトコルがシステムの時刻に 依存して動作していることによるものです。詳しくは 第17章 NTP を利用した時刻同期 をお読みください。
最新のセキュリティ更新がインストールされていることを確認してください。 YaST オンライン更新を利用することで、最新かどうかを確認することができます。
既定の Web サーバポート (ポート 80
) がファイアウオールで
開くように設定されていることを確認してください。これを行なうには、 SuSEFirewall2
で外部ゾーンに対し、 を許可するよう設定する必要が
あります。この作業は YaST から行なうことができます。詳しくは
項 「YaST を利用したファイアウオールの設定」 (第14章 マスカレードとファイアウオール, ↑セキュリティガイド) をお読みください。
openSUSE において、 Apache は既定ではインストールされません。 「すぐに使うことのできる」 標準設定でインストールを行なうには、下記の 手順を行ないます:
手順20.1 既定の設定での Apache インストール
YaST を起動し、
+ を選択します。+ を選択し、 内の を選択します。
依存関係のパッケージのインストールについて確認を行ない、インストール処理を 完了します。
上記の手順でのインストールには、 PHP5 モジュールと
apache2-prefork
マルチプロセッシングモジュールと
PHP5 モジュールが含まれています。モジュールについて、詳しくは
20.4項 「モジュールのインストール/有効化/設定」 をお読みください。
Apache はシステムの起動時に自動起動するように設定することができるほか、手動で 起動するようにも設定できます。
手順20.2 Apache の自動起動設定
まずはランレベル 3
および 5
で
システムが起動する際、 Apache が自動的に起動するかどうかを確認します。
具体的には下記のコマンドを入力します:
chkconfig -a apache2
上記以外にも、 YaST を起動して
+ を選択する ことでも設定することができます。apache2 の項目を探し、 ボタンを押してサービスを有効に設定します。
これで Web サーバが即時に起動します。
最後に設定を保存するため、
ボタンを押します。
これでシステムの起動時、ランレベルが 3
および
5
であれば Apache が自動で起動するようになります。
シェルを利用して Apache を手動で起動するには、 rcapache2 start コマンドを実行します。
手順20.3 Apache が起動しているかどうかの確認
Apache の起動時に何もエラーメッセージが表示されていなければ、通常 Web サーバ は起動している状態になっているはずです。確認は下記の手順で行ないます:
ブラウザを起動し、 http://localhost/ を開きます。
Apache が起動していて問題なく動作していれば、 「It works!」 で始まるテストページが表示されるはずです。
上記のページが表示されない場合は、 20.8項 「トラブルシューティング」 をお読みください。
これで Web サーバを起動することができました。必要なドキュメントを追加したり、 必要に応じて設定を調整したり、モジュールをインストールして機能を追加したり することができるようになっています。
openSUSE における Apache は、 2 種類の方法で設定することができます:
手作業での設定ではより細かい設定を行なうことができますが、 YaST GUI のような利便性は 備わっていません。
設定変更後の Apache の再読み込みまたは再起動について | |
---|---|
設定のうちの多くは、変更された設定を反映するために Apache の再読み込み
(または再起動) が必要です。手作業で Apache を再読み込みさせるには、
rcapache2 YaST を利用して Apache を設定する場合、 20.2.3.2項 「HTTP サーバ設定」 に書かれている が に設定されていると、 YaST が自動で判断して処理を行ないます。 |
この章では、 Apache の設定ファイルについて概要を示しています。 YaST を利用して 設定を行なう場合は、これらのファイルを直接操作する必要はありません—ただし、 後から手作業による設定に切り替える場合に備え、これらの情報を知っておくとよい でしょう。
Apache の設定ファイルは 2 箇所の異なる場所に配置されています:
/etc/sysconfig/apache2
¶
/etc/sysconfig/apache2
では、読み込むべきモジュール
や取り込むべき追加設定ファイル、サーバ起動時の設定フラグやコマンドラインに
追加すべきフラグなど、Apache に関するいくつかのグローバル設定を保持しています。
このファイル内にある各設定オプションは詳しくドキュメント化されているため、
ここでは敢えて説明を行ないません。一般用途の Web サーバであれば、
/etc/sysconfig/apache2
内にある設定だけで十分に
要件を満たすことができるはずです。
/etc/apache2/
¶
/etc/apache2/
では Apache に必要な全ての設定ファイル
を保持しています。下記ではこのディレクトリ以下にある各ファイルの目的について
説明を行ないます。各ファイルにはいくつかの設定オプション (ディレクティブ
と表現する場合もあります) が含まれていて、これらのファイルに含まれる設定
オプションは詳しくドキュメント化されているため、ここでは一つずつの設定
オプションについて説明を行なうことはしません。
Apache の設定ファイルは下記のような構成になっています:
/etc/apache2/ | |- charset.conv |- conf.d/ | | | |- *.conf | |- default-server.conf |- errors.conf |- httpd.conf |- listen.conf |- magic |- mime.types |- mod_*.conf |- server-tuning.conf |- ssl.* |- ssl-global.conf |- sysconfig.d | | | |- global.conf | |- include.conf | |- loadmodule.conf . . | |- uid.conf |- vhosts.d | |- *.conf
/etc/apache2 内の Apache 設定ファイル
charset.conv
様々な言語に対して使用する文字セットを指定するファイルです。 編集を行なってはいけません。
conf.d/*.conf
他のモジュールから追加される設定ファイルです。これらの設定ファイルは、
必要に応じてお使いの仮想ホスト設定から取り込むことができます。
例として vhosts.d/vhost.template
ファイルを
お読みください。これを行なうことで、それぞれの仮想ホストで別々の
モジュールを利用することができます。
default-server.conf
全ての仮想ホストに適用されるグローバルな設定で、多くの既定値が設定 されています。これらの値を変更するのではなく、各仮想ホスト側の設定で 設定を上書きしてください。
errors.conf
Apache がどのようにしてエラー応答を行なうのかを指定します。全ての仮想 ホストに対してエラーメッセージをカスタマイズするには、このファイルを 編集してください。お使いの各仮想ホストの設定内でこれらを上書きすること もできます。
httpd.conf
Apache サーバの設定ファイルのメインです。このファイルについては変更 は避けてください。このファイルは主にグローバルな設定を取り込む ための仕組みを用意しています。それぞれのグローバルな設定を変更する 際は、この一覧内にある適切な設定ファイルに設定してください。また、 各仮想ホストの設定 (たとえばドキュメントルートなど) は、仮想ホストの 設定で行なってください。
listen.conf
Apache に対して、待ち受けるべき IP アドレスとポートを指定するファイルです。 名前ベースの仮想ホストについても、こちらで設定を行ないます。詳しくは 20.2.2.1.1項 「名前ベースの仮想ホスト」 をお読みください。
magic
mime_magic モジュールが使用するデータで、 Apache が未知のファイルについて MIME タイプを自動判別するのに使用します。変更しないでください。
mime.types
システムで既知となっている MIME タイプの一覧です (実際には
/etc/mime.types
へのリンクになっています) 。
編集はしないでください。ここに記載されていない MIME タイプを新しく
追加したい場合は、 mod_mime-defaults.conf
ファイルに追記してください。
mod_*.conf
既定でインストールされるモジュール向けの設定です。詳しくは
20.4項 「モジュールのインストール/有効化/設定」 をお読みください。
なお、任意指定のモジュールに関する設定は、 conf.d
ディレクトリ内にあります。
server-tuning.conf
様々な MPM (MPM については 20.4.4項 「マルチプロセッシングモジュール (MPM)」 をお読みください) に対する設定ディレクティブが含まれているほか、 Apache の性能を決める一般的な設定オプションが含まれています。これらの 項目について変更する場合は、よくテストを行なってください。
ssl-global.conf
and ssl.*
グローバルな SSL 設定と SSL の証明書データが含まれています。 詳しくは 20.6項 「SSL で通信の機密を保持する Web サーバの設定」 をお読みください。
sysconfig.d/*.conf
/etc/sysconfig/apache2
の設定から自動生成された
設定ファイルです。これらのファイルは直接編集を行なわず、
/etc/sysconfig/apache2
ファイルのほうを編集して
ください。また、このディレクトリには自動生成されるファイル以外は配置
してはなりません。
uid.conf
Apache が動作する際のユーザおよびグループ ID を指定するファイルです。 変更はしないでください。
vhosts.d/*.conf
構築したい仮想ホストの設定をここに配置します。このディレクトリには
SSL 無しの場合と有りの場合の両方について、仮想ホストの雛型ファイルが
含まれています。また、このディレクトリ内に存在し、
.conf
で終わるファイルは、 Apache の設定内に
自動で取り込まれる仕組みになっています。詳しくは
20.2.2.1項 「仮想 (バーチャル) ホストの設定」
をお読みください。
Apache を手作業で設定する場合、ユーザ root
からテキスト形式の設定ファイルを編集して行ないます。
仮想ホスト とは、 1 台の Apache から複数の URI (統一資源識別子) に対するサービスを提供する仕組みです。たとえば www.example.com と www.example.net のように、物理的に 1 台だけのマシンで動作する単一の Web サーバで、複数のドメインを取り扱うこともできます。
仮想ホストは、管理面の手間を省くため (管理する Web サーバを 1 台にまとめる ことができる) と、ハードウエアの費用を削減するため (各ドメインで専用の サーバを必要としない) に使用します。仮想ホストはホスト名 (名前ベース) を 基準に設定することができるほか、 IP アドレスを基準にしたりポート番号を基準 にしたりすることもできます。
全ての設定済み仮想ホストを表示するには、 httpd2 -S
を利用します。これにより既定のサーバと全ての仮想ホストが表示され、
それらの IP アドレスやポート番号などがあわせて表示されます。さらに、設定ファイル
内で仮想ホストが設定されている場所についても表示されます。
仮想ホストは 20.2.3.1.4項 「仮想ホスト」
に書かれている手順で YaST から設定することができるほか、設定ファイルを手作業で
変更することによっても設定できます。 openSUSE の既定では、仮想ホストごとに 1 つの
設定ファイルを /etc/apache2/vhosts.d/
内に作成する
仕組みになっています。このディレクトリ内にあり、かつファイル名が
.conf
で終わるファイルは、自動的に設定として
取り込まれるようになっています。また、仮想ホストを設定する際のテンプレート
についても、このディレクトリ内に配置されています。それぞれ
vhost.template
(SSL 無し) と
vhost-ssl.template
(SSL 有り) のファイルがあります。
仮想ホストの設定の必要性について | |
---|---|
設定しようとしている Web サーバが 1 つのドメインだけをまかなうものであった 場合であっても、仮想ホストの設定ファイルを常に作成しておくことをお勧めします。 これを行なうと、ドメイン固有の設定を別途のファイルに分けて保存することになる ので、単純に仮想ホストの設定ファイルを移動/削除/名前変更するだけで、うまく 動作していたはずの元の基本設定に戻すことができるようになります。また同じ 理由から、仮想ホストごとに別々の設定ファイルを作成してください。
なお名前ベースの仮想ホストを使用する場合、どの仮想ホスト設定にも該当しない
ドメイン名でアクセスが行なわれた場合に対して、既定の仮想ホスト設定を追加して
おくことをお勧めします。既定の仮想ホストは設定ファイルとして最初に
読み込まれるファイルで、設定ファイルの読み込み順序はファイル名で判断される
仕組みになっています。そのため、アンダースコア文字 (「_」) で
始まるファイル (たとえば |
<VirtualHost>
</VirtualHost>
のブロックには、それぞれのドメインに適用される情報が記載されています。
Apache が設定済みのホストに対するリクエストを受け取ったときは、このセクション
内のディレクティブを参照します。この仮想ホスト設定の内側では、ほとんど全ての
ディレクティブを参照することができます。 Apache の設定ディレクティブについて、
詳しくは http://httpd.apache.org/docs/2.2/mod/quickreference.html
をお読みください。
名前ベースの仮想ホストの場合、 IP アドレス 1 つに対して複数の Web サイトを
構築することができます。この方法では、 Apache はクライアントから送信された
ホスト名フィールドと各仮想ホスト内の ServerName
を比較し、一致する仮想ホストを検索します。 ServerName
に該当するものが存在しない場合、最初に設定した仮想ホストを既定のホストとして
使用します。
また、 NameVirtualHost
ディレクティブは Apache
に対し、 IP アドレスや (必要であれば) ポート番号のほか、 HTTP ヘッダ内に含まれる
ホスト名フィールドでも仮想ホストを使用するよう設定します。このオプションは設定ファイル
/etc/apache2/listen.conf
内で設定します。
NameVirtualHost
に設定する最初のパラメータは
完全修飾ドメイン名ですが、 IP アドレスで設定することをお勧めします。 2 番目の
パラメータはポート番号で、必ずしも指定する必要はありません。既定では
Listen
ディレクティブでの設定から、ポート
80
を使用します。
また IP アドレスやポート番号の指定には、ワイルドカード *
を指定することもできます。この場合は全てのインターフェイスに対するリクエスト
を仮想ホストとして設定することを意味します。また、 IPv6 アドレスを設定する
場合は、大括弧で括らなければなりません。
例20.1 様々な名前ベースの VirtualHost
設定¶
# NameVirtualHostIP-address
[:Port]
NameVirtualHost 192.168.3.100:80 NameVirtualHost 192.168.3.100 NameVirtualHost *:80 NameVirtualHost * NameVirtualHost [2002:c0a8:364::]:80
VirtualHost
の開始タグのパラメータには、
NameVirtualHost
で設定した IP アドレス (または
完全修飾ドメイン名) を指定します。 NameVirtualHost
で設定したポート番号については任意指定です。
IP アドレスの代用として、ワイルドカード * を指定する
こともできます。このワイルドカードは NameVirtualHost *
を設定した場合にのみ利用できます。 IPv6 アドレスを利用する場合、そのアドレス
指定は大括弧で括らなければなりません。
例20.2 Name-Based VirtualHost
Directives¶
<VirtualHost 192.168.3.100:80> ... </VirtualHost> <VirtualHost 192.168.3.100> ... </VirtualHost> <VirtualHost *:80> ... </VirtualHost> <VirtualHost *> ... </VirtualHost> <VirtualHost [2002:c0a8:364::]> ... </VirtualHost>
この仮想ホスト方法を利用するには、対象のマシンに複数の IP アドレスを 設定する必要があります。それぞれの IP に割り当てられたドメインに対し、 Apache は 1 つのインスタンスで動作します。
IP ベースの仮想ホストでは、それぞれの仮想ホストに対して 1 つの IP アドレス を設定しなければなりません。お使いのマシンに複数のネットワークカードが存在 しない場合でも、仮想的なネットワークインターフェイス (IP エイリアス) も設定 することができます。
下記は IP アドレス 192.168.3.100
で動作するマシンの Apache 設定例で、追加の IP アドレス
192.168.3.101
および
192.168.3.102
でそれぞれ 1 つ
ずつのドメインをまかなう場合のものです。下記のとおりそれぞれの仮想ホストに
対し、別々の VirtualHost
ブロックを設定する必要が
あります。
例20.3 IP ベースの VirtualHost
設定¶
<VirtualHost 192.168.3.101> ... </VirtualHost> <VirtualHost 192.168.3.102> ... </VirtualHost>
ここで VirtualHost
は、
192.168.3.100
以外のインターフェイスに対してのみ設定
していることに注意してください。 Listen
ディレクティブで 192.168.3.100
のアドレスについても
設定する場合、そのアドレス宛に届いた HTTP リクエストに応答するには、
別途の IP ベース仮想ホストを追加しなければなりません。設定しなかった場合は、
既定のサーバ設定 (/etc/apache2/default-server.conf
)
が使用されます。
それぞれの仮想ホストを設定するには、少なくとも各仮想ホストの設定内に下記の
ディレクティブを設定する必要があります。さらに詳しいオプション設定を
行ないたい場合は、 /etc/apache2/vhosts.d/vhost.template
をお読みください。
ServerName
その仮想ホストに割り当てる完全修飾ドメイン名を指定します。
DocumentRoot
このホストから Apache がファイルを提供するにあたって、基準となる
ディレクトリを指定します。なおセキュリティ上の理由から、ファイルシステム
全体に対するアクセスは既定では禁止されるようになっています。そのため、
Directory
コンテナを利用することで、明示的に
禁止を解除するよう設定してください。
ServerAdmin
サーバ管理者の電子メールアドレスを指定します。たとえば、このアドレスは Apache が生成するエラーページで表示されます。
ErrorLog
この仮想ホストに対するエラーログファイルを指定します。仮想ホスト
ごとに個別のエラーログを作成する必要はありませんが、デバッグが容易になる
ことから、個別に作成しておくことをお勧めします。
/var/log/apache2/
が Apache のログファイルに
関する既定のディレクトリです。
CustomLog
この仮想ホストに対するアクセスログです。仮想ホストごとに個別のエラー
ログを作成する必要はありませんが、各ホストについて個別の分析を行なう
ことができるという理由から、個別に作成しておくことをお勧めします。
/var/log/apache2/
が Apache のログファイルに
関する既定のディレクトリです。
上記のようにセキュリティ上の理由から、ファイルシステム全体へのアクセスは
既定で禁止されています。そのため、 Apache がサービスを提供すべき
ディレクトリについては、明示的に禁止を解除しなければなりません。たとえば
DocumentRoot
であれば、下記のようになります:
<Directory "/srv/www/www.example.com/htdocs"> Order allow,deny Allow from all </Directory>
基本的な設定をそろえると、下記のようになります:
例20.4 基本的な VirtualHost
設定¶
<VirtualHost 192.168.3.100> ServerName www.example.com DocumentRoot /srv/www/www.example.com/htdocs ServerAdmin webmaster@example.com ErrorLog /var/log/apache2/www.example.com_log CustomLog /var/log/apache2/www.example.com-access_log common <Directory "/srv/www/www.example.com/htdocs"> Order allow,deny Allow from all </Directory> </VirtualHost>
YaST を利用して Web サーバを設定するには、 YaST を起動してから
HTTP サーバウイザード
が起動し、サーバ管理について
いくつかの基本事項を質問します。このウイザードを終了すると、以降の
モジュールの起動では
ダイアログが表示されるようになります。
HTTP サーバウイザードは 5 つの段階から構成されています。ダイアログの最後の 段階では、熟練者向けの設定を行なってより詳しい設定を施すことができます。
ここでは Apache が要求を受け付けるために利用する、ネットワークインターフェイス
を指定します。既存のネットワークインターフェイスと IP アドレスから、任意の
組み合わせで選択することができます。また、他のサービスが予約していない任意の
ポート (既知の (Well-known) ポートや登録済みのポート、および動的なポートや
プライベートなポート) を使用することができます。既定の設定では、全ての
ネットワークインターフェイスに対して 80
番のポートで
待ち受ける設定になっています。
Web サーバが待ち受けるポートについて、ファイアウオール側でポートを開くには、
を選択します。この設定は LAN や WAN 、インターネットなどのネットワークに対して Web サーバを公開する 場合に必要な設定です。ポートを閉じたままにする設定は、テストなどで外部からの アクセスを禁止したい場合にのみ有用な設定です。複数のネットワーク インターフェイスをご利用の場合は、 を押してポートを開きたいインターフェイスを選択してください。を押すと設定を続けることができます。
20.2.3.2.2項 「サーバモジュール」 をお読みください。 を押すと設定を続けることができます。
設定オプションでは、 Web サーバがサポートすべき スクリプト言語を有効にしたり無効にしたりすることができます。その他のモジュールを設定 するには、この設定では既定のホストを設定します。 20.2.2.1項 「仮想 (バーチャル) ホストの設定」 で説明しているとおり、 Apache は単一のマシンで複数の仮想ホストを稼働させる ことができます。設定ファイル内で最初に設定したホストのことを 既定のホスト と言いますが、ここではこれを設定します。 それぞれの仮想ホストは既定のホストの設定を引き継ぎます。
ホストの設定 (ディレクティブ とも呼ばれます) を編集する には、表内から変更したい項目を選んで を押します。 新しいディレクティブを追加するには を、ディレクティブ を削除するには対象のものを選んで を押してください。
それぞれ下記にサーバの設定項目を示します:
ドキュメントルート
このホストが提供すべきファイルが存在するディレクトリを指定します。
既定では /srv/www/htdocs
に設定されています。
Alias
Alias
ディレクティブを使用することで、 URL と
物理的なファイルの場所について、割り当てを変更することができます。これにより
ファイルシステム内の ドキュメントルート
以外の場所に
ファイルを配置し、 URL 経由でアクセスさせることができるようになります。
openSUSE の既定値では、 Alias
の設定として
/icons
が /usr/share/apache2/icons
を指すように設定されています。これにより Apache からディレクトリ一覧を
参照すると、アイコンが表示されるようになっています。
ScriptAlias
これは Alias
ディレクティブに似た設定で、
ScriptAlias
も URL とファイルシステムの場所に
ついて割り当てを設定します。ただし ScriptAlias
は CGI の場所を変更するためのもので、指定した場所で CGI を実行できるように
することができます。
Directory
Directory
を利用すると、指定したディレクトリ
に対してのみ適用させる設定群を作成することができます。
既定ではそれぞれ /srv/www/htdocs
,
/usr/share/apache2/icons
, /srv/www/cgi-bin
ディレクトリに対する設定が存在しています。既定の設定から変更すべきでは
ありません。
Include
Include
ディレクティブを利用すると、追加の
設定ファイルを取り込むように設定することができます。既定では 2 つの
Include
が設定されています:
/etc/apache2/conf.d/
は外部のモジュールから
もたらされる設定を取り込むためのもので、これによりそのディレクトリ内に
存在する .conf
で終わるファイルを全て取り込みます。
2 つめは /etc/apache2/conf.d/apache2-manual.conf
が設定されていて、 apache2-manual
の設定ファイルを
取り込むようになっています。
サーバ名
ここではクライアントが Web サーバと通信を行なうにあたって、既定で使われる
サーバ名を指定します。 http://
でアクセスすることができるように完全修飾ドメイン名 (FQDN) を指定するか、
もしくは IP アドレスを指定します。ここでは任意の名前を入力することはできず、
指定したサーバ名で名前を解決できなければなりません。
FQDN
/
サーバ管理者のメールアドレス
サーバ管理者のメールアドレスを指定します。ここで指定したアドレスは、たとえば Apache がエラーページを生成した場合などに表示されます。
の手順を終了したら、 を押すと設定を続けることができます。
この段階では、ウイザードは設定済みの仮想ホストを表示します (詳しくは 20.2.2.1項 「仮想 (バーチャル) ホストの設定」 を ご覧ください) 。 YaST HTTP ウイザードを開始するまでに特に何も設定していない 場合は、何も仮想ホストが表示されません。
ホストを追加するには ドキュメントルート
),
などを設定します。また、 では、ホストの識別方法
を指定します (名前ベースまたは IP ベース) 。
を押して、名前または IP アドレスを指定してください。
を押すと、次の仮想ホスト設定ダイアログに進みます。
仮想ホスト設定の 2 番目のダイアログでは、 CGI を有効にするかどうかを設定すること
ができるほか、これらのスクリプトをどのディレクトリに配置するかを設定することが
できます。また、 SSL についても有効化を設定することができます。 SSL を有効に
設定する場合は、証明書のパスについても設定を行なわなければなりません。 SSL と
証明書について、詳しくは 20.6.2項 「SSL を利用する Apache の設定」 を
お読みください。また オプションでは、
クライアントがディレクトリへのアクセスを要求した場合に出力するファイル
(既定では index.html
) を指定します。ここには 1 つまたは
複数のファイル (複数の場合は半角スペースで区切ります) を指定してください。また、
を選択すると、ユーザの公開ディレクトリ
(~
)
にあるファイルを ユーザ名
/public_html/http://www.example.com/~
から公開することができるようになります。
ユーザ名
仮想ホストの作成 | |
---|---|
仮想ホストは好き勝手に追加することはできません。名前ベースの仮想ホストを利用 している場合、ネットワーク上でそれぞれのホスト名を解決できなければなりません。 IP ベースの仮想ホストを利用している場合は、それぞれ IP アドレスごとに 1 つの 仮想ホストだけを割り当てることができます。 |
これがウイザードの最終段階です。ここでは Apache サーバの起動方法と起動タイミング (システム起動時、または手動) を設定することができます。またこれ以外にも、これまで に設定してきた項目の概要が表示されます。これまでの設定で問題がなければ、 20.2.3.2項 「HTTP サーバ設定」 に示されているダイアログが表示されるようになっています。
を押して設定を完了させてください。何らかの設定を変更 しなおしたい場合は、 を押して必要なダイアログまで 戻って設定し直してください。また、 を押すと、ダイアログでは、ウイザードよりも細かい 設定を行なうことができます (ウイザードは Web サーバの初回設定時にのみ表示 されます) 。このダイアログは下記に示す 4 つのタブから構成されていますが、 いずれの設定ともすぐに反映されることはありません。設定を有効にするには、 を押して設定を確認しておかなければなりません。 なお、 を押すと設定モジュールを終了して変更内容を 破棄することができます。
80
で待ち受けるように設定されています。また、
Web サーバを他のホストからアクセスできるようにするため、
についてもご確認ください。
ポートを閉じたままにする設定は、テストなどの目的で Web サーバに対して外部からの
アクセスを拒否したい場合にのみ有用なものです。なお、お使いのマシンに複数の
ネットワークインターフェイスが存在する場合は、
を押して、ポートを開くべきインターフェイスを設定することもできます。
さらに 20.3項 「Apache の起動と停止」 をお読みください。これらのコマンドはすぐに反映され、それらのログメッセージも 即時に表示されます。
ボタンでは、アクセスログやエラーログを 参照することができます。これはお使いのサーバ設定をテストしたい場合などに便利 です。ログファイルは個別のウインドウで表示され、そこから Web サーバの再起動や 再読み込みなどを行なうことができます。詳しくはそれぞれモジュールを選んで 20.4項 「モジュールのインストール/有効化/設定」 を お読みください。
ボタンを押すと、 Apache2 モジュールの状態 (有効/無効) を切り替えることができます。 ボタンを押すと、インストールされている ものの一覧に表示されていない新しいモジュールを追加することができます。 モジュールについて、詳しくは20.2.3項 「YaST を利用した Apache の設定」 に書かれている手順で YaST から設定を行なうと、ランレベル 3 および 5 であれば Apache はシステム起動時に 開始され、 0, 1, 2, 6 であれば停止するようになっています。 YaST の ランレベルエディタを利用することで、この振る舞いを変えることができるほか、 コマンドラインツール chkconfig を利用することでも 同じことを行なうことができます。
起動中のシステムから Apache を開始したり停止したり、もしくは操作したりしたい 場合は、 init スクリプト /usr/sbin/rcapache2 をご利用 ください。 rcapache2 コマンドは下記のようなパラメータを受け付けます:
status
Apache が起動しているかどうかを確認します。
start
Apache が起動していない場合、起動を行ないます。
startssl
Apache が起動していない場合、 SSL を有効にして起動を行ないます。 SSL の有効化について、詳しくは 20.6項 「SSL で通信の機密を保持する Web サーバの設定」 を お読みください。
stop
親プロセスを終了させることで、 Apache を停止します。
restart
Apache を停止したあと、起動を行ないます。その時点で起動していなかった 場合は、単に起動だけを行ないます。
try-restart
Apache が既に起動している場合にのみ、停止した後に起動を行ないます。
reload
または graceful
Apache の全てのプロセスに対して、その時点で処理中の全てのリクエストを処理 したあとに停止するよう働きかけます。それぞれのプロセスが終了すると、それらは 新しく作成したプロセスに置き換えられ、最終的には Apache の 「再起動」 が行なわれるようにします。
本番環境での Apache 再起動 | |
---|---|
接続が強制的に切断されたりすることなく設定を反映するには、
rcapache2 |
restart-graceful
全ての要求に対して応答することのできる 2 つめの Web サーバを起動します。
従来まで存在していた 1 つめの Web サーバについては、
GracefulShutdownTimeout
で設定した時間間隔だけ
要求に対する処理を続け、最終的には停止するようにします。
rcapache2 restart-graceful
は
新しいバージョンへのアップグレードを行なった場合や、再起動を必要とする設定
変更を行なった場合に便利な方法です。このオプションを使用すると、サービスの
停止時間を最小限にすることができます。
GracefulShutdownTimeout
の設定については
必ず値を入力してください。設定を行なわないと restart-graceful
は通常の restart
と同じ意味になってしまいます。
なお、この値に 0 を設定すると、残っている全てのリクエストを全て処理しきる
まで、無期限に待機するようになります。
また restart-graceful
は、必要な全ての資源を元の
Apache プロセスが解放しない場合、失敗する場合があります。この場合、
このコマンドは stop-graceful
と同じ動作になります。
stop-graceful
既存の全てのリクエストが処理されるようにするため、
GracefulShutdownTimeout
で設定した時間間隔だけ
要求に対する処理を続け、最終的には停止します。
GracefulShutdownTimeout
の設定については
必ず値を入力してください。設定を行なわないと stop-graceful
は通常の restart
と同じ意味になってしまいます。
なお、この値に 0 を設定すると、残っている全てのリクエストを全て処理しきる
まで、無期限に待機するようになります。
configtest
または extreme-configtest
現在実行中の Web サーバに影響を与えることなく、設定ファイルの文法を確認します。
この文法確認はサーバを起動/再読み込み (reload)/再起動する際に毎回行なわれる
ようになっているため、テストだけを明示的に行なう必要はありません (設定エラーが
見つかった場合は、 Web サーバの起動/再読み込み (reload)/再起動は行なわれ
ません) 。また extreme-configtest
オプションでは
nobody
ユーザで Web サーバを
起動し、実際に設定の読み込みを行なってさらなるエラーを検出しようとします。
ただし SSL の証明書については nobody
で読み込むことができないため、 SSL 関連の設定についてはテストを行なうことが
できません。
probe
再読み込みが必要かどうかを検出 (設定が変更されたかどうかを確認し) 、 rcapache2 コマンドに設定するパラメータを提案します。
server-status および full-server-status
それぞれ簡潔なサーバ状態か、もしくは完全なサーバ状態を表示します。
mod_status モジュールを有効化しておく必要があるほか、 lynx または w3m
をインストールする必要があります。また、
/etc/sysconfig/apache2
ファイル内の
APACHE_SERVER_FLAGS
に、
status
を追加しなければなりません。
追加フラグ | |
---|---|
rcapache2 に追加のフラグを指定すると、それらは Web サーバに渡されます。 |
Apache のソフトウエアはモジュールの形で部品化されています。いくつかの中枢機能を 除き、それらの機能は全てモジュールとして提供されています。たとえば HTTP でさえも モジュール (http_core) の形になっています。
Apache のモジュールはそのソフトウエアをコンパイルする際に Apache に内蔵させる ことができるほか、実行時に動的に読み込むこともできます。どのようにして動的に 読み込むのかについては、 20.4.2項 「有効化と無効化」 をお読みください。
Apache のモジュールは下記の 4 つに分類できます:
基本モジュールは既定で Apache に内蔵されます。 openSUSE の Apache
では mod_so
(他のモジュールを読み込むために必要な
モジュール) と http_core
だけが内蔵されるようになって
います。その他のモジュールは全て共有オブジェクトになっていて、サーバの実行ファイル
自身に含まれることはなく、実行時に取り込むことで動作する仕組みになっています。
一般的に、拡張と呼ばれるモジュールについても Apache ソフトウエアパッケージ内 に含まれていますが、通常はサーバに内蔵されることはありません。 openSUSE では、それらは共有オブジェクトとして提供され、実行時に Apache に読み込むこと ができるようになっています。
外部モジュールは公式の Apache 配布物には含まれていないものを指します。 しかしながら、 openSUSE ではいくつかの外部モジュールを提供しています。
マルチプロセッシングモジュール (MPM) は Web サーバに対するリクエストを 受け付けたり処理したりする責任を負ったソフトウエアで、 Web サーバソフトウエアの 中枢部を表わすものです。
20.1.2項 「インストール」 に書かれている既定の手順で
Apache をインストールした場合、全ての基本モジュールと拡張モジュールの
ほか、マルチプロセッシングモジュールである Prefork MPM と外部モジュール
mod_php5
, mod_python
がそれぞれ
インストールされます。
YaST から apache と入力することで、利用可能な 全ての外部モジュールを表示することができます。
+ を起動することで、追加の 外部モジュールをインストールすることができます。ソフトウエア管理を起動したら、 + を利用し、それぞれのモジュールは YaST から有効にしたり無効にしたりすることができるほか、 手作業でもこれを行なうことができます。 YaST では、 20.2.3.1項 「HTTP サーバウイザード」 に書かれている手順で スクリプト言語モジュール (PHP5, Perl, Python) を有効にしたり無効にしたりする ことができます。それ以外のモジュールについては、 20.2.3.2.2項 「サーバモジュール」 に書かれている手順で有効/無効を設定することができます。
モジュールを手作業で有効/無効に設定したい場合は、
a2enmod mod_foo
コマンドか、
もしくは a2dismod mod_foo
コマンドをご利用ください。また、 a2enmod -l を実行する
ことで、有効に設定されている全モジュールの一覧を表示することができます。
外部モジュール向けの設定取り込み | |
---|---|
外部モジュールを手作業で有効化した場合は、全ての仮想ホスト設定で外部モジュール
向けの設定ファイルが読み込まれることを確認してください。外部モジュール向けの
設定ファイルは |
全ての基本モジュールと拡張モジュールは、 Apache のドキュメンテーション内で 詳しく説明されています。最も重要なモジュールについては、概要だけが説明 されています。各モジュールの詳しい説明は、 http://httpd.apache.org/docs/2.2/mod/ をお読みください。
mod_actions
特定の MIME タイプ (たとえば application/pdf
)
や特定の拡張子 (たとえば .rpm
) 、もしくは特定の
リクエスト種別 (たとえば GET
) が要求された
際に、スクリプトを実行する手段を提供します。このモジュールは既定で有効に
設定されます。
mod_alias
Alias
および Redirect
ディレクティブを提供するモジュールで、 URI を特定のディレクトリに割り当てたり
(Alias
) 、要求された URL を別の URL に転送したり
することができます。このモジュールは既定で有効に設定されます。
mod_auth*
認証モジュールは、様々な認証方法を提供するためのモジュールです。
mod_auth_basic
では基本認証を、
mod_auth_digest
ではダイジェスト認証を
それぞれ提供します。 Apache 2.2 におけるダイジェスト認証は、実験中の
ものとして提供されています。
なお、 mod_auth_basic
と
mod_auth_digest
の各モジュールは、それぞれ
認証プロバイダモジュール mod_authn_*
と
認可モジュール mod_authz_*
をあわせて使用する
必要があります。たとえば mod_authn_file
は
テキストファイルを利用した認証を提供するほか、 mod_authz_user
はユーザ認可を提供します。
認証や認可について、詳しくは http://httpd.apache.org/docs/2.2/howto/auth.html にある Authentication HOWTO をお読みください。
mod_autoindex
autoindex モジュールは、索引ファイル (たとえば index.html
ファイル) が存在しない場合に、自動でディレクトリの索引を生成するための
モジュールです。外観については設定を変更することもできます。このモジュールは
既定で有効に設定されていますが、 Options
ディレクティブで生成が無効に設定されています。ディレクトリ一覧を自動生成
させるには、それぞれの仮想ホスト内で設定を上書きしてください。このモジュール
の既定の設定値は、 /etc/apache2/mod_autoindex-defaults.conf
に書かれています。
mod_cgi
mod_cgi
は CGI スクリプトを実行する際に必要な
モジュールです。このモジュールは既定で有効に設定されています。
mod_deflate
このモジュールを利用することで、 Apache はクライアントに特定の種類のファイルを 転送する際、圧縮して転送することができるようになります。
mod_dir
mod_dir
は、ディレクトリに対するアクセスがあった場合に、
どのファイルを転送するかを選択する、 DirectoryIndex
ディレクティブを提供するモジュールです。既定では index.html
が設定されています。このモジュールではほかにも、ディレクトリに対するアクセスがあった
場合、 URI への最後がスラッシュで終わっていないと、それを自動で補完する機能も備わって
います。このモジュールは既定で有効に設定されています。
mod_env
CGI スクリプトや SSI のページに渡される、環境変数を制御するモジュールです。 httpd プロセスから起動されるシェルに対し、環境変数を設定したり設定を消したり することができます。このモジュールは既定で有効に設定されています。
mod_expires
mod_expires
を利用すると、 Expires
ヘッダを利用して期限切れ日時を設定することができます。期限切れ日時はプロキシサーバや
ブラウザが一時記憶 (キャッシュ) のために使用します。このモジュールは既定で有効に設定されて
います。
mod_include
mod_include
はサーバサイドインクルード (Server Side Includes;
SSI) を提供するモジュールで、 HTML ページを動的に生成するための基本機能を提供します。
このモジュールは既定で有効に設定されています。
mod_info
ブラウザから http://localhost/server-info/ の URL にアクセスすることで、
サーバ設定に関する広範囲の概要を提供するモジュールです。セキュリティ上の理由から、
この URL へのアクセスは常に制限しておかなければなりません。既定では
localhost
だけがアクセスを
許されるようになっています。 mod_info
は
/etc/apache2/mod_info.conf
で設定します。
mod_log_config
このモジュールを利用することで、 Apache のログファイルについて設定を行なう ことができます。このモジュールは既定で有効に設定されています。
mod_mime
MIME モジュールは、そのファイル名の拡張子に基づいて正しい MIME ヘッダを
付与するモジュールです (たとえば HTML ドキュメントの場合は
text/html
に設定します) 。このモジュールは既定で
有効に設定されています。
mod_negotiation
コンテントネゴシエーションと呼ばれる機能を提供するモジュールです。詳しくは http://httpd.apache.org/docs/2.2/content-negotiation.html をお読みください。このモジュールは既定で有効に設定されています。
mod_rewrite
mod_alias
に似た機能を提供するモジュールですが、
ずっと高機能で柔軟性に富んだ設定を行なうことができます。 mod_rewrite
を利用すると、複数のルールを設定し URL 転送を行なうことができるほか、
リクエストヘッダを元にした転送なども行なうことができます。
mod_setenvif
クライアントのリクエスト内容に応じて環境変数を設定するモジュールです。 たとえばクライアントが送信したブラウザ文字列のほか、クライアントの IP アドレスなどを基準にすることができます。このモジュールは既定で有効に設定 されています。
mod_speling
mod_speling
は URL の入力ミスやスペルミスに
ついて、自動修正を試みるモジュールです。たとえば大文字と小文字の間違いなどを
修正することができます。
mod_ssl
Web サーバとクライアントの間で、暗号化接続を行なうことができるようにする モジュールです。詳しくは 20.6項 「SSL で通信の機密を保持する Web サーバの設定」 をお読み ください。このモジュールは既定で有効に設定されています。
mod_status
サーバの動作や性能情報を http://localhost/server-status/ から公開する
ことのできるモジュールです。セキュリティ上の理由から、この URL への
アクセスは常に制限しておかなければなりません。既定では
localhost
だけがアクセスを
許されるようになっています。 mod_status
は
/etc/apache2/mod_status.conf
で設定します。
mod_suexec
mod_suexec
は、 CGI スクリプトを特定のユーザや
グループで実行させるためのモジュールです。このモジュールは既定で有効に
設定されています。
mod_userdir
~
のディレクトリ
から、ユーザ固有のディレクトリを提供するモジュールです。
設定ファイル内で ユーザ名
/UserDir
ディレクティブを
指定しなければなりません。このモジュールは既定で有効に設定されています。
openSUSE では、 Apache 向けに 2 種類のマルチプロセッシングモジュール (MPM) を提供しています:
Prefork MPM はスレッドを使用しない MPM で、あらかじめ fork しておくことで 動作する Web サーバを提供します。 Web サーバの動きは Apache バージョン 1.x に似たものとなり、各リクエストは独立して動作する子プロセスが処理する形に なります。そのため、問題のあるリクエストが届いた場合であっても他のプロセスの 動作を止めたりすることはなく、 Web サービスが停止してしまったりすることを 防ぐことができます。
このようにプロセスを基準にしたアプローチは安定性を提供する一方、欠点として worker MPM と比べ多くの資源を必要としてしまいます。 Prefork MPM は Unix ベースのオペレーティングシステムでは既定の MPM として採用されています。
このドキュメント内での MPM | |
---|---|
この文書内で、 Apache は Prefork MPM を使用した場合を想定しています。 |
Worker MPM はスレッドを利用する Web サーバです。スレッドとはプロセスよりも 「軽量の」 仕組みで、プロセスよりも少ない資源で動作するものです。 Worker MPM では子プロセスを fork するだけでなく、そのプロセス内で複数の スレッドを起動してリクエストを処理します。このアプローチにより、 Prefork MPM よりも少ない資源で高い性能を発揮するような仕組みになっています。
Worker MPM の最大の欠点はその安定性で、ある特定のスレッドが何らかの理由で 破壊されてしまうと、そのスレッドを管理していたプロセス全体が影響を受けて しまいます。最悪の場合、サーバクラッシュにもつながる可能性があります。特に Apache で Common Gateway Interface (CGI) を利用していて負荷が高くなると、 システム資源との通信が行なえなくなることで Internal Server Error が発生 してしまいます。また Worker MPM は、 Apache に添付されているモジュール の一部がスレッドセーフ (複数のスレッドから同時に呼び出されても安全に動作する こと) ではないため、それらは Worker MPM と同時に使用することができません。
PHP を利用する場合の MPM について | |
---|---|
PHP モジュールの一部はスレッドセーフではありません。
|
openSUSE に同梱されている全ての外部モジュールを下記に列挙しています。 各モジュールのドキュメンテーションについては、それぞれのディレクトリを ご覧ください。
mod_php5
や mod_perl
などのモジュールで処理される Apache 内の各 CGI スクリプトに対し、 AppArmor の
制限を設定します。
パッケージ名: apache2-mod_apparmor
|
さらなる情報: パート 「AppArmor を利用した権利制限」 (↑セキュリティガイド) |
mod_mono
mod_mono
を利用すると、お使いのサーバ内で
ASP.NET ページを実行することができるようになります。
パッケージ名: apache2-mod_mono
|
設定ファイル:
/etc/apache2/conf.d/mod_mono.conf
|
mod_perl
mod_perl
を利用すると、 Perl スクリプトを内蔵の
インタプリタで実行することができるようになります。サーバ内でインタプリタが
恒久的に保持される形になるため、外部のインタプリタを起動する場合と比べて、
起動時のオーバーヘッドを小さくすることができます。
パッケージ名: apache2-mod_perl
|
設定ファイル: /etc/apache2/conf.d/mod_perl.conf
|
さらなる情報:
/usr/share/doc/packages/apache2-mod_perl
|
mod_php5
PHP はサーバ内で動作するプラットフォーム非依存の HTML 内蔵型 スクリプト言語です。
パッケージ名: apache2-mod_php5
|
設定ファイル: /etc/apache2/conf.d/php5.conf
|
さらなる情報:
/usr/share/doc/packages/apache2-mod_php5
|
mod_python
mod_python
は Apache HTTP サーバ内に Python 機能を
内蔵させるためのもので、性能を相当に改善することができるほか、 Web ベースの
アプリケーションを構築する際の柔軟性を追加することができます。
パッケージ名: apache2-mod_python
|
さらなる情報:
/usr/share/doc/packages/apache2-mod_python
|
mod_tidy
mod_tidy
は TidyLib を利用するモジュールで、
それぞれ発信される HTMLページを検証することができるものです。検証エラーが
発生すると、エラー一覧ページが表示されます。エラーにならなかった場合は
元の HTML ページが表示されます。
パッケージ名: apache2-mod_tidy
|
設定ファイル: /etc/apache2/mod_tidy.conf
|
さらなる情報: /usr/share/doc/packages/apache2-mod_tidy
|
Apache では知識のあるユーザがカスタムなモジュールを作成することで、その機能を
拡張することができます。 Apache のモジュールを開発したりサードパーティ製の
モジュールをコンパイルしたりしたい場合は、開発ツールのほかに
apache2-devel
パッケージが必要となります。
apache2-devel
パッケージには apxs2
と呼ばれるツールが含まれ、これを利用することで Apache 向けの追加モジュールを
コンパイルできるようになっています。
apxs2 はソースコードからモジュールをコンパイルしたり インストールしたりすることができます (インストール作業では、設定ファイルに 対して行なう変更も同時に行なうことができます) 。これにより、 Apache の実行時に 読み込まれる 動的共有ライブラリ (DSO) を作成する ことができます。
apxs2 関連のバイナリは、 /usr/sbin
以下に配置されます:
/usr/sbin/apxs2
—任意の MPM で動作する拡張
モジュールを構築するのに便利なツールです。インストールを行なう際、
インストール先は /usr/lib/apache2
になっています。
/usr/sbin/apxs2-prefork
—prefork MPM
用のモジュールを構築するのに便利なツールです。インストールを行なう際、
インストール先は /usr/lib/apache2-prefork
に
なっています。
/usr/sbin/apxs2-worker
—worker MPM
用のモジュールを構築するのに便利なツールです。インストールを行なう際、
インストール先は /usr/lib/apache2-worker
に
なっています。
ソースコードからモジュールをコンパイルし、インストールしたあとに有効に 設定するには、下記のように入力します:
cd /ソースコードのパス; apxs2 -cia
mod_foo
.c
ここで、 -c
オプションはモジュールのコンパイルを、
-i
オプションはモジュールのインストールを、
-a
オプションはモジュールの有効化をそれぞれ指定して
います。 apxs2 に対するその他のオプションは、
apxs2(1)
のマニュアルページ内に記述されています。
Apache が用意している汎用ゲートウエイインターフェイス (Common Gateway Interface; CGI) は、プログラムやスクリプトから動的なコンテンツを生成するための仕組みで、 CGI スクリプトなどとも呼ばれるものです。 CGI スクリプトでは、任意のプログラミング 言語を使用することができます。通常はスクリプト言語として、 Perl や PHP などを 使用します。
Apache に対して CGI スクリプトの実行と動的コンテンツの生成を許可するには、
mod_cgi
モジュールと mod_alias
モジュールを有効に設定する必要があります。両方とも既定では有効に設定されるモジュールです。
モジュールの有効化について、詳しくは 20.4.2項 「有効化と無効化」
をお読みください。
CGI セキュリティ | |
---|---|
サーバに対して CGI スクリプトの実行を許可すると、それは潜在的なセキュリティ ホールになる場合があります。詳しくは 20.7項 「セキュリティ問題の回避」 をお読みください。 |
openSUSE では、 CGI スクリプトの実行は
/srv/www/cgi-bin/
ディレクトリ内でのみ許可されるように
なっています。このディレクトリは CGI スクリプトを実行するために設定済みの
ディレクトリですが、既に仮想ホストの設定を行なっている場合
(20.2.2.1項 「仮想 (バーチャル) ホストの設定」 を参照) で、
仮想ホスト別のディレクトリに CGI スクリプトを配置したい場合は、
ディレクトリを設定し、禁止を解除しなければなりません。
例20.5 仮想ホストでの CGI 設定¶
CGI のプログラミングは 「通常の」 プログラミングとは異なり、
Content-type: text/html
のような MIME 種類のヘッダを
出力しなければなりません。このヘッダはクライアントに送信され、クライアント
側で解釈されます。また、 CGI スクリプトの出力はクライアント (一般に Web
ブラウザ) が解釈可能な形式でなければなりません。多くの場合は HTML やテキスト
形式ですが、たとえば画像などでもかまいません。
Apache のパッケージには、シンプルなテスト用スクリプト
/usr/share/doc/packages/apache2/test-cgi
が含まれて
います。これはいくつかの環境変数をテキスト形式で出力するものです。このファイルは
/srv/www/cgi-bin/
ディレクトリにコピーするか、もしくは
お使いの仮想ホスト内のスクリプトディレクトリ
(/srv/www/www.example.com/cgi-bin/
) にコピーし、
test.cgi
のようなファイル名を設定してください。
また、 Web サーバがアクセスするファイルは、
root
ユーザに所有権がある
ファイルであるべきものです。詳しい情報は 20.7項 「セキュリティ問題の回避」
をお読みください。 Web サーバは root とは異なるユーザで動作する
ことから、 CGI スクリプトは全てのユーザに対して実行と読み込みを許可しなければ
なりません。 CGI のディレクトリに移動して chmod 755 test.cgi
コマンドを実行すると、必要なパーミッションを設定することができます。
全ての設定が完了したら、 http://localhost/cgi-bin/test.cgi
にアクセスするか、もしくは http://www.example.com/cgi-bin/test.cgi
にアクセスしてください。アクセスすると 「CGI/1.0 test script report」
のような表示が現われるはずです。
テストプログラムの出力が現われず、エラーメッセージが表示された場合は、下記の 項目を確認してください:
CGI トラブルシューティング
設定を変更したあと、再起動を行ないましたか? rcapache2 probe を実行して確認してください。
カスタムな CGI ディレクトリを設定している場合、それらを正しく設定して
ありますか? 不確かな場合は、テスト用のスクリプトを既定の CGI ディレクトリ
/srv/www/cgi-bin/
にコピーし、ブラウザで
http://localhost/cgi-bin/test.cgi
を開いてみてください。
ファイルのパーミッションは正しく設定されていますか? CGI をコピーした ディレクトリに移動し、 ls -l test.cgi を実行して ください。パーミッションは、下記のように表示されなければなりません:
-rwxr-xr-x 1 root root
スクリプトにプログラムエラーが存在しないことを確認してください。
test.cgi
をコピーしただけで変更を行なっていない場合は
起こりませんが、独自のプログラムを作成したり修正したりした場合は、プログラム
エラーが無いかどうかを確認してください。
クレジットカード情報などの機密データは、 Web サーバとクライアントの間で機密を
保持する目的で暗号化を行ない、認証を設定しておくことが望まれます。
mod_ssl
では、 Secure Sockets Layer (SSL) や Transport
Layer Security (TLS) プロトコルを利用し、 Web サーバとクライアント間の HTTP 通信に
強い暗号化を提供します。 SSL や TLS を利用することで、 Web サーバとクライアントの
間で秘密の通信を確立することができます。データの整合性についても確認が行なわれるほか、
サーバとクライアントの間で相互の認証を行なうことができます。
この暗号化通信を成立させるため、サーバは URL を受け付ける前に、自分自身の正当性 を証明する SSL 証明書を送信します。これによりクライアントは、サーバが偽装された ものではなく、通信を開始してよいものかどうかを確認することができます。また証明書は、 機密データを危険にさらすリスクを負うことのないように、サーバとクライアントの間で 情報をやりとりするための、暗号化接続を生成する機能を備えています。
mod_ssl
自身では SSL/TSL プロトコルを実装することは
しておらず、 Apache と SSL ライブラリの間のインターフェイスとして動作する仕組みに
なっています。 openSUSE では、 OpenSSL ライブラリを利用しています。
Apache をインストールすると、 OpenSSL も自動でインストールされます。
Apache で mod_ssl
を利用した場合、 URL が
http://
ではなく https://
になるという
点が最もよくわかる違いです。
証明書のサンプル | |
---|---|
|
Web サーバで SSL/TLS を使用するためには、 SSL の証明書を作成する必要があります。 この証明書は Web サーバとクライアントの間で認証を行なうために必要なもので、 個人や企業同士で相互に所在確認を行なうことができます。証明書の正当性を確かな ものにするには、多くのユーザが信頼する企業や団体によって電子署名されたもので なければなりません。
作成可能な証明書としては、下記の 3 種類があります。テスト用の 「ダミー」 証明書, 公的な信頼を必要としない特定のユーザ範囲で利用する自己署名証明書, 独立した公的認証機関 (CA) が電子署名する証明書の 3 種類です。
証明書の作成は、基本的に 2 段階の作業で行ないます。 1 つめは認証機関向けの 機密鍵作成、 2 つめはその鍵を利用したサーバ証明書への署名です。
さらなる情報 | |
---|---|
SSL/TSL について、考え方や定義をより詳しく知るには、 http://httpd.apache.org/docs/2.2/ssl/ssl_intro.html をお読みください。 |
dummy 証明書の作成は簡単に行なうことができます。単純に
/usr/bin/gensslcert スクリプトを実行するだけです。
これにより下記に示すファイルを生成するか、上書きします。
gensslcert に指定するパラメータを変えることで、
作成する証明書を細かく調整することができます。
詳しくは /usr/bin/gensslcert -h
を実行して表示されるヘルプをお読みください。
/etc/apache2/ssl.crt/ca.crt
/etc/apache2/ssl.crt/server.crt
/etc/apache2/ssl.key/server.key
/etc/apache2/ssl.csr/server.csr
/root/.mkcert.cfg
ダウンロード用に ca.crt
のコピーが
/srv/www/htdocs/CA.crt
に作成されます。
テスト目的にのみご利用ください | |
---|---|
Dummy 証明書は本番環境では使用しないでください。テスト目的でのみ お使いください。 |
イントラネット内の機密 Web サーバを構築する場合や、特定のユーザに対する 機密 Web サーバを構築する場合は、ご自身で証明機関 (CA) を作成し、そこで 署名を行なえば十分です。
自己署名証明書を作成するには、対話処理で 9 段階の作業を行ないます。
まずは /usr/share/doc/packages/apache2
ディレクトリに
移動し、下記のコマンドを実行します: ./mkcert.sh
make --no-print-directory /usr/bin/openssl /usr/sbin/
custom
なお、このコマンドは上記のディレクトリ以外からは実行しないでください。
このプログラムは複数の問い合わせを表示する仕組みで動作し、それぞれに答えていく
ことによって証明書を作成します。
手順20.4 mkcert.sh を利用した自己署名証明書の作成¶
Decide the signature algorithm used for certificates
古いブラウザでは DSA を利用したときに問題が発生する可能性があるため、 RSA を選択 (R, 既定値) してください。
Generating RSA private key for CA (1024 bit)
特に何も操作する必要はありません。
Generating X.509 certificate signing request for
CA
ここから証明機関の識別名を作成します。それぞれ国名や団体名など、いくつかの
項目に回答します (訳注: スクリプトの仕様上、英語表記であることにご注意
ください) 。ここで入力するデータはそれぞれ証明書に記載されるため、正しい
データを入力してください。また、全ての質問に対して何らかの入力を行なう必要
はなく、該当しないものや入力しないままにしておきたい場合は、
「.」 を入力してください。 Common name (共通名) は証明機関
自身の名前を入力します。 My company
CA など
のように、わかりやすい名前を入力してください。
証明機関の共通名について | |
---|---|
証明機関の共通名はサーバの共通名とは異なるものでなければなりません。 そのため、この段階では完全修飾ドメイン名は入力しないでください。 |
Generating X.509 certificate for CA signed by
itself
証明書のバージョンを選択します。 3 (既定値) を選んで ください。
Generating RSA private key for SERVER (1024 bit)
特に何も操作する必要はありません。
Generating X.509 certificate signing request for
SERVER
サーバ用の鍵を作成するための識別名を入力します。証明機関の識別名を入力した 場合とほとんど同じ質問内容で、それぞれ Web サーバに関する情報を入力して ください。なお、証明機関のデータと同じものである必要はありません (たとえば サーバが別の場所に存在する場合など) 。
共通名の選択 | |
---|---|
ここで入力する共通名は、サーバの完全修飾ドメイン名でなければなりません (たとえば www.example.com) 。そうでないとブラウザから Web サーバにアクセスした際、 証明書に記載されている共通名とサーバの完全修飾ドメイン名が異なるとして、 警告が発生してしまいます。 |
Generating X.509 certificate signed by own CA
証明書のバージョンを選択します。 3 (既定値) を選んで ください。
Encrypting RSA private key of CA with a passphrase for
security
証明機関の機密鍵については、暗号化しておくことを強くお勧めします。 そのため、ここでは Y と回答してパスワードを入力してください。
Encrypting RSA private key of SERVER with a passphrase for
security
サーバの鍵を暗号化すると、 Web サーバの起動時に毎回パスワードの入力を 求められるようになります。これはシステム起動時にサーバを自動で開始すること ができなくなるほか、 Web サーバの再起動にも手間がかかることになります。 そのため、一般的にこの質問に対しては N と回答してください。 ただしパスワードで暗号化しない場合、その鍵は自分自身を保護する術を持たない ことになるので、その鍵の利用を許すユーザだけがアクセスできることを確認して ください。
サーバ鍵の暗号化 | |
---|---|
サーバの暗号鍵をパスワードで保護した場合は、
|
スクリプトでの入力が完了すると、生成された証明書と鍵の一覧が表示されます。
スクリプトの出力とは異なり、ファイルはローカルディレクトリである
conf
ではなく、 /etc/apache2/
ディレクトリに作成されます。
最後にやるべきことは、証明機関の証明書ファイルを
/etc/apache2/ssl.crt/ca.crt
からご利用のユーザが
アクセスできる場所にコピーし、各ブラウザに信頼のおける証明機関として登録して
もらうことです。各ブラウザで登録を行なわないと、ブラウザからアクセスを行なった
際に、未知の発信元として警告が表示されてしまいます。なお、証明書は 1 年間
有効です。
自己署名証明書 | |
---|---|
自己署名証明書は、その証明書を信頼してもらうことのできる特定のユーザだけが アクセスする Web サーバを構築する際にのみ、お使いください。たとえば一般的な 店舗などのような、不特定多数がアクセスするサーバには不適切です。 |
お使いの証明書に対して署名を行なうことのできる、公的な証明機関がいくつか 存在しています。証明書は信頼のできる第三者によって署名されるため、それらの 証明書を完全に信頼できるようになります。不特定多数がアクセスし、機密を保持 する Web サーバでは、一般に公的な署名のある証明書を利用します。
最もよく知られた証明機関としては、 Thawte (http://www.thawte.com/) や Verisign (http://www.verisign.com) などがあります。これらを含む 公的な証明機関はあらかじめ全てのブラウザに登録されているため、これらの 証明機関が署名した証明書は、ブラウザ側で自動的に受け付けられます。
公的に署名された証明書を取得する場合は、その証明書そのものを証明機関に送付 する必要はありません。その代わりに、証明書署名要求 (CSR) を送信します。 CSR を作成するには、 /usr/share/ssl/misc/CA.sh -newreq コマンドを実行してください。
まず上記のスクリプトは、 CSR を暗号化する際のパスワードを尋ねます。
そのあと識別名の入力を行ないます。それぞれ国名や団体名など、いくつかの
項目に回答します (訳注: スクリプトの仕様上、英語表記であることにご注意
ください) 。ここで入力するデータはそれぞれ証明書に記載されるため、正しい
データを入力してください。また、全ての質問に対して何らかの入力を行なう必要
はなく、該当しないものや入力しないままにしておきたい場合は、
「.」 を入力してください。 Common name (共通名) は証明機関
自身の名前を入力します。 My company
CA など
のように、わかりやすい名前を入力してください。最後にチャレンジパスワードと
呼ばれるパスワードの入力と、代替の企業名をそれぞれ入力します。
作成された CSR は、スクリプトを実行したときのディレクトリ内に配置されます。
ファイル名は newreq.pem
になっています。
Web サーバで SSL と TLS を利用する場合、既定のサーバ側のポートは 443 です。 「通常の」 設定を Apache に行なっていれば、ポート 80 での http とポート 443 での SSL/TLS (https) という形になるため、特に矛盾が発生すること はありません。実際、単一の Apache が起動している状態で、 HTTP と HTTPS の 両方に対応することができます。通常はそれぞれポート 80 とポート 443 で別々の 仮想ホストを設定し、サービスを提供します。
ファイアウオール設定 | |
---|---|
Apache で SSL をポート 443 で有効化する場合、ファイアウオールを開くことも 忘れずに実施してください。これは 項 「YaST を利用したファイアウオールの設定」 (第14章 マスカレードとファイアウオール, ↑セキュリティガイド) に書かれている手順で YaST から設定することができます。 |
サーバ全体の設定として、 SSL モジュールは既定で有効化されています。お使いの
仮想ホストで無効化している場合は、 a2enmod ssl コマンドで
有効化することができます。最終的に SSL を有効にするには、サーバを起動する際に
「SSL」 フラグを付けて起動する必要があります。これを行なうには、
a2enflag SSL を実行してください。このとき、サーバの証明書
をパスワードで暗号化するようにしている場合は、
/etc/sysconfig/apache2
ファイル内の
APACHE_TIMEOUT
の値を増やしておく必要があります。
これで Apache を起動する際にパスワード入力を行なうのに十分な時間を稼ぐことが
できます。この変更を行なう場合は、サーバを再起動してください。再読み込みでは
不十分です。
なお、仮想ホストのディレクトリ内のファイル
/etc/apache2/vhosts.d/vhost-ssl.template
では、
SSL 固有のディレクティブについて詳しい説明が書かれています。
一般的な仮想ホストの設定については、
20.2.2.1項 「仮想 (バーチャル) ホストの設定」 をお読みください。
仮想ホストの設定を始めるには、上記のテンプレートを
/etc/apache2/vhosts.d/
ファイルなどにコピーしてから編集してください。それぞれ下記のディレクティブを
調整してください:
mySSL-host
.conf
DocumentRoot
ServerName
ServerAdmin
ErrorLog
TransferLog
1 つの IP アドレスしか設定されていないサーバでは、 SSL 対応の仮想ホストを 複数作成することはできません。 SSL 対応の仮想ホストを複数設定した場合に ユーザから接続を行なうと、証明書には 1 つのサーバ名しか記述できないため、 いずれか 1 つの仮想ホストを除き、証明書のサーバ名と実際のサーバ名とが異なる として、アクセスのたびに警告が表示されてしまいます。
openSUSE では Server Name Indication (SNI) と呼ばれる SSL 拡張に対応 していて、 SSL のネゴシエーション内でドメイン名を送信することで、この問題を 解決することができます。これにより、早い段階で正しい仮想ホストに 「切り替える」 ことができるため、ブラウザに対して正しい証明書を 配信できるようになります。
SNI は openSUSE では既定で有効に設定されています。 SSL に対して名前
ベースの仮想ホストを有効にするには、
20.2.2.1.1項 「名前ベースの仮想ホスト」
の手順に従って設定してください (ただし SSL の場合、ポート番号は
80
ではなく 443
であることに注意して
ください) 。
SNI のブラウザ側対応 | |
---|---|
SNI はクライアント側でも対応する必要があります。 SNI は多くのブラウザで 動作しますが、モバイル端末のブラウザや Windows* XP 上で動作する Internet Explorer や Safari の場合、 SNI に対応していません。詳しくは http://en.wikipedia.org/wiki/Server_Name_Indication (英語) をお読みください。
また、サーバ側での SNI 非対応のブラウザにおける動作は、
サーバ全体の設定で |
公的なインターネットに晒された Web サーバは、継続的な管理を行なう必要があります。 セキュリティの問題が発生することは避けられない問題で、ソフトウエアに関連した問題 だけでなく、不用意な設定ミスが発生する場合もあります。ここでは、このような問題に ついて、どのように取り扱うべきかを示しています。
Apache ソフトウエアに脆弱性が発生された場合は、 SUSE からセキュリティ アドバイザリ (助言/忠告の意味) が発信されます。このアドバイザリには、その 脆弱性を修正するための手順が含まれていて、できるかぎり素早い適用を行なう必要があります。 SUSE のセキュリティアドバイザリは、下記の方法で受け取ることができます (訳注: 全て英語によるものです):
openSUSE の既定では、 DocumentRoot
の
ディレクトリ /srv/www/htdocs
と CGI のディレクトリ
/srv/www/cgi-bin
はそれぞれユーザとグループが
root
に設定されています。これらのパーミッション
設定は変更すべきではありません。ディレクトリが書き込み可能であったりすると、
任意のユーザからファイルを配置できるようになってしまいます。これらのファイルは
Apache から wwwrun
の権限下で実行され、ファイル
システムの資源に対して望まないアクセスを発生させる結果になってしまいます。
仮想ホストの DocumentRoot
と CGI の配置先としては
/srv/www
のサブディレクトリを使用するものとし、
それらのファイルやディレクトリが root
ユーザおよびグループに属しているように設定してください。
既定ではファイルシステム全体へのアクセスが禁止されるよう、
/etc/apache2/httpd.conf
に設定が為されています。
これらのディレクティブを変更するのではなく、 Apache から全てのディレクトリに
アクセスし、必要なファイルを読み込むことができるように設定を追加してください。詳しくは
20.2.2.1.3項 「基本的な仮想ホスト設定」
をお読みください。これを行なうことで、たとえばパスワードやシステムの設定ファイル
など、不必要なファイルへのアクセスを禁止し、外部から読み取られないようにすることが
できます。
Perl, PHP, SSI やその他のプログラミング言語で対話的に動作するスクリプトは、 結果的に任意のコマンドを実行できてしまい、広い範囲のセキュリティ問題につながります。 また、サーバから実行されるスクリプトは、サーバ管理者が信頼する発信元から公開された ソースコードを利用してインストールしなければなりません。ユーザに対して独自の スクリプトを実行させてしまうことは、一般に良い方法ではありません。全てのスクリプトに 対し、セキュリティ監査を実施しておくことをお薦めします。
スクリプトの管理をできる限り簡単にするため、システム全体で CGI の実行を許可したり
することをせず、専用のディレクトリ内でのみ実行できるようにするのが一般的です。
それぞれ ScriptAlias
や Option ExecCGI
のディレクティブを設定してください。 openSUSE の既定の設定では、任意の場所
からの CGI 実行は許可しない設定になっています。
全ての CGI スクリプトは同じユーザで動作するため、異なるスクリプト同士が互いに 衝突してしまう場合もあります。このような場合は suEXEC を利用し、それぞれ異なる ユーザやグループで CGI を実行するように設定してください。
ユーザディレクトリを許可する場合 (mod_userdir
または
mod_rewrite
) は、.htaccess
の
使用を禁止することを強くお勧めします。それは、このファイルがセキュリティの設定を
上書きできてしまうものであるためです。少なくとも AllowOverRide
を利用して、ユーザ側で設定できることを制限してください。 openSUSE では
.htaccess
が既定で有効に設定されていますが、
mod_userdir
を利用した場合、ユーザに対しては
Option
ディレクティブでの上書きは行なえないように
なっています (詳しくは設定ファイル /etc/apache2/mod_userdir.conf
をお読みください) 。
Apache がうまく起動しない場合や Web ページにアクセスできない場合、もしくは ユーザが Web サーバに接続できない場合は、問題の原因を探ることが重要です。 ここではよくエラーが発生する場所や、確認しておくべき場所を示します:
Web サーバの起動や停止を行なう場合、 /usr/sbin/httpd2
のバイナリではなく rcapache2 スクリプトをお使いください
(詳しくは 20.3項 「Apache の起動と停止」 をお読みください) 。
このスクリプトではより詳しい出力を行なうようになっているため、設定エラーの
問題を解決する糸口を見つけやすくなります。
致命的なエラーであれそれ以外のエラーであれ、原因を探るには Apache のログ
ファイルを利用するのがよいでしょう。既定では /var/log/apache2/error_log
に出力されるエラーログファイルが主に役立つことでしょう。また、ログファイル
内により詳しい出力を行ないたい場合は、 LogLevel
ディレクティブを利用してログメッセージの詳しさを設定してください。
単純なテスト | |
---|---|
Apache のログメッセージを監視するには、 tail -F /var/log/apache2/
|
一般的に良くある間違いとしては、 Apache 向けのポートをファイアウオール設定で 開いていない場合があります。 YaST で Apache を設定した場合、この問題に対応する ための個別オプションが提供されています (20.2.3項 「YaST を利用した Apache の設定」 をお読みください) 。 Apache を手作業で設定している場合、 HTTP や HTTPS の ポートを開くには、 YaST のファイアウオールモジュールをご利用ください。
上記のようなやり方を行なっても原因がよくわからない場合は、オンラインの Apache バグデータベース (http://httpd.apache.org/bug_report.html) (英語のみ) をご覧ください。また、 Apache のメーリングリストを利用してユーザコミュニティに 質問することもできます (詳しくは http://httpd.apache.org/userslist.html (英語) をお読みください) 。それ以外にも、ニュースグループを利用することもできます (comp.infosystems.www.servers.unix) (英語)。
apache2-doc
パッケージでは、ローカルにインストールされる
各国語対応の Apache マニュアルやリファレンスが提供されています。このパッケージは
既定でインストールされませんので、最も手っ取り早くインストールしたい場合は
zypper in apache2-doc コマンドでインストールを行なってください。
インストールを行なったら、 Apache のマニュアルが ulink url="http://localhost/manual/"/>
からアクセスできるようになります。また、同マニュアルのオンライン版もご利用いただけます
(http://httpd.apache.org/docs-2.2/) 。 SUSE 固有の設定ヒントなどは、
/usr/share/doc/packages/apache2/README.*
ディレクトリにあります。
Apache 2.2 での新機能の一覧については、 http://httpd.apache.org/docs/2.2/new_features_2_2.html をお読み ください。また、バージョン 2.0 から 2.2 にアップグレードする際の情報は、 http://httpd.apache.org/docs-2.2/upgrading.html をお読みください。
20.4.5項 「外部モジュール」 に概要が書かれている Apache の外部 モジュールについて、詳しい情報はそれぞれ下記の場所にあります:
mod_mono
mod_perl
mod_php5
mod_python
mod_tidy
Apache のモジュールを開発したり、 Apache の Web サーバプロジェクトに参加したり するための情報については、それぞれ下記の URL をご覧ください (いずれも英語が主体です):
openSUSE での Apache 固有の問題に直面した場合は、まず http://ja.opensuse.org/Apache (日本語) または http://old-en.opensuse.org/Apache (英語) にある openSUSE wiki をお読みください。 また、 Apache の履歴は http://httpd.apache.org/ABOUT_APACHE.html にあります。 このページでは、 Apache が何故 Apache と呼ばれるようになったのかについても 記述しています。