第30章 Apache HTTPサーバ

目次

30.1. クイックスタート
30.2. Apacheの設定
30.3. Apacheの起動および停止
30.4. モジュールのインストール、有効化および設定
30.5. CGIスクリプトの実行
30.6. SSLをサポートするセキュアWebサーバのセットアップ
30.7. セキュリティ問題の回避
30.8. トラブルシューティング
30.9. 詳細情報

概要

Apache HTTPサーバ(Apache)は、世界で 50%を超える市場シェアを持つ、最も広く利用されていWebサーバです(http://www.netcraft.com/の調査)。Apacheは、Apache Software Foundation (http://www.apache.org/)により開発され、ほとんどのオペレーティングシステムに対応しています。SUSE® Linux Enterprise Serverには、Apache version 2.2が付属しています。この章では、Webサーバのインストール/設定/セットアップの方法、SSL、CGI、および追加モジュールの使用方法、およびApacheのトラブルシュート方法について説明します。

30.1. クイックスタート

このセクションでは、Apacheを迅速に設定し、起動します。Apacheは、rootとしてインストールし、設定する必要があります。

30.1.1. 要件

Apache Webサーバをセットアップする前に、次の要件が満たされていることを確認してください。

  1. マシンのネットワークが適切に設定されているか。この項目の詳細については、第21章 ネットワークの基礎を参照してください。

  2. マシンの正確なシステム時間は、タイムサーバとの同期により維持されます。これは、HTTPプロトコルの一部が正確な時間に依存するために必要です。この項目の詳細については、第23章 NTPによる時刻の同期を参照してください。

  3. 最新のセキュリティアップデートがインストールされています。不明な場合は、YaSTオンラインアップデートを実行します。

  4. ファイアウォールで、デフォルトのWebサーバポート(80)が開いています。ポートを開くには、外部ゾーンでのHTTPサーバサービスが可能になるように、SuSEFirewall2lを設定します。これには、YaSTを使用します。詳細については、項 「Configuring the Firewall with YaST」 (第15章 Masquerading and Firewalls, ↑Security Guide (セキュリティガイド))を参照してください。

30.1.2. インストール

SUSE Linux Enterprise Server上のApacheは、デフォルトではインストールされません。そのまますぐに実行できる標準の事前定義された設定を使用してインストールするには、次の手順を使用します。

手順30.1 デフォルト設定でApacheをインストールする

  1. YaSTを起動して、ソフトウェア+ソフトウェア管理の順に選択します。

  2. フィルタ+パターンの順に選択し、サーバ機能からWebおよびLAMPサーバを選択します。

  3. 依存関係のあるパッケージのインストールを確認して、インストールプロセスを完了します。

このインストールには、apache2-prefork マルチプロセシングモジュール とPHP5モジュールが含まれています。モジュールの詳細については、30.4項 「モジュールのインストール、有効化および設定」を参照してください。

30.1.3. 開始

Apacheは、ブート時に自動的に起動することも、手動で起動することもできます。

手順30.2 Apacheを自動的に起動する

  1. Apacheをランレベル3および5でブート時に自動的に起動するには、次のコマンドを実行します。

    chkconfig -a apache2
  2. または、YaSTを起動してシステム+システムサービス(ランレベルの順に選択します。

  3. サービスの[apache2]および有効を検索します。

    Webサーバがすぐに起動します。

  4. 完了をクリックして、変更を保存します。

    ブート時にランレベル3および5で自動的にApatcheを起動するようにシステムが設定されます。

SUSE Linux Enterprise Serverでのランレベルの詳細、およびYaSTランレベルエディタについては、9.2.3項 「YaSTを使用したSystem Services (Runlevel)の設定」を参照してください。

シェルを使用してApacheを手動で起動するには、rcapache2 startを実行します。

手順30.3 Apacheが実行中かどうかチェックする

Apacheの起動時にエラーメッセージが表示されなければ、通常、このWeb serverが実行されています。これをテストするには:

  1. ブラウザを起動し、http://localhost/を開きます。

    Apacheが立ち上がって稼動している場合は、It works!で始まるテストページが表示されます。

  2. このページが表示されない場合は、30.8項 「トラブルシューティング」を参照してください。

Webサーバの起動後は、ドキュメントを追加、必要に応じて設定を調整、およびモジュールをインストールして機能を追加することができます。

30.2. Apacheの設定

SUSE Linux Enterprise Serverには、次の2つの設定オプションがあります。

手動で設定を行えば細かい点まで調整できますが、YaSTのGUIほど便利ではありません。

[Important]設定変更後のApacheのリロードまたは再起動

設定の変更は、ほとんどの場合、Apacheをリロード(または再起動)しないと有効になりません。rcapache2 reloadを使用してApacheを手動でリロードするか、30.3項 「Apacheの起動および停止」に示されている再起動オプションの1つを使用します。

YaSTでApatcheを設定する場合、これを自動化するには、30.2.3.2項 「HTTPサーバの設定」で説明されているように、HTTPサービス有効に設定します。

30.2.1. Apache設定ファイル

このセクションでは、Apache設定ファイルの概要を示します。環境設定にYaSTを使用する場合は、これらのファイルを操作する必要はありません。ただし、後で手動設定に切り替える場合に、この情報が役立つことがあります。

Apache設定ファイルは、次の2つの場所にあります。

30.2.1.1. /etc/sysconfig/apache2

/etc/sysconfig/apache2は、ロードするモジュール、インクルードする付加的な設定ファイル、サーバを起動するときのフラグ、コマンドラインに追加するべきフラグなど、Apacheのいくつかのグローバル設定を制御します。このファイルの各設定オプションについては、詳細なドキュメントが存在するので、ここでは説明しません。一般的な目的のWebサーバの場合には、/etc/sysconfig/apache2の内容を設定するだけで十分でしょう。

30.2.1.2. /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アドレスおよびポートにバインドします。名前ベースの仮想ホスティングもこのファイルで設定します。詳細については、30.2.2.1.1項 「名前ベースの仮想ホスト」を参照してください。

magic

Apacheが自動的に不明なファイルのMIMEタイプを判別できるようにするmime_magicモジュール用のデータ。このファイルは、変更しないでください。

mime.types

システムで認識されるMIMEタイプ(実際には/etc/mime.typesへのリンク)。このファイルは、編集しないでください。このリスト以外にMIMEタイプを追加する必要がある場合は、mod_mime-defaults.confに追加します。

mod_*.conf

デフォルトでインストールされるモジュール用の設定ファイル。詳細については、30.4項 「モジュールのインストール、有効化および設定」を参照してください。オプションのモジュール用の設定ファイルは、conf.dディレクトリ内にあります。

server-tuning.conf

各MPMの設定ディレクティブ(30.4.4項 「マルチプロセシングモジュール」を参照)、およびApacheのパフォーマンスを制御する一般的な設定オプションが含まれています。このファイルを変更する場合は、Webサーバを適切にテストしてください。

ssl-global.conf and ssl.*

グローバルSSL設定およびSSL証明書データ。詳細については、30.6項 「SSLをサポートするセキュアWebサーバのセットアップ」を参照してください。

sysconfig.d/*.conf

/etc/sysconfig/apache2から自動的に生成される設定ファイル。これらのファイルは、いずれも変更しません。その代わりに、/etc/sysconfig/apache2を編集します。このディレクトリに、他の設定ファイルを格納しないでください。

uid.conf

Apacheを実行する際に使用するユーザおよびグループIDを指定します。このファイルは、変更しないでください。

vhosts.d/*.conf

仮想ホストの設定はこのファイルにあるはずです。このディレクトリには、SSLの有無に関わらず、仮想ホストのテンプレートファイルが格納されます。このディレクトリ内の .conf で終わるファイルは、すべて自動的にApache設定に含まれます。詳細については、30.2.2.1項 「仮想ホスト設定」を参照してください。

30.2.2. Apacheを手動で設定する

Apacheを手動設定するには、rootユーザとしてプレーンテキストの設定ファイルを編集する必要があります。

30.2.2.1. 仮想ホスト設定

仮想ホスト という用語は、同じ物理マシンから複数のURI (universal resource identifiers)のサービスを行えるApacheの機能を指しています。これは、たとえばwww.example.comやwww.example.netのような複数のドメインが、1台の物理コンピュータ上で動作する単一のWebサーバで処理されていることを表します。

管理の手間(1つのWebサーバを維持すればよい)とハードウェアの費用(ドメインごとの専用のサーバを必要としない)を省くために仮想ホストを使うことは、よく行われています。仮想ホストは名前ベース、IPベース、またはポートベースのいずれかになります。

すべての既存仮想ホストをリストするには、コマンドhttpd2 -Sを使用します。デフォルトサーバおよびすべての仮想ホストが、それらのIPアドレスおよびリスニングポートとともにリストに表示されます。リストには、各仮想ホストの設定ファイル内での位置を示すエントリも含まれています。

仮想ホストを設定するには、YaSTを使用するか(30.2.3.1.4項 「仮想ホスト」で説明)、または設定ファイルを手動で編集します。SUSE Linux Enterprise ServerのApacheは、デフォルトでは、/etc/apache2/vhosts.d/内の仮想ホストごとに1つの設定ファイルを使用するようになっています。このディレクトリ内で、拡張子が.confのファイルは、すべて自動的に設定に含まれます。仮想ホストの基本的なテンプレートはこのディレクトリ内に用意されています(vhost.template、またはSSLサポートのある仮想ホストの場合はvhost-ssl.template)。

[Tip]常に仮想ホスト設定を作成する

Webサーバに1つのドメインしか存在しない場合でも、常に仮想ホストの設定ファイルを作成することをお勧めします。そうすることによって、ドメイン固有の設定が1つのファイルにまとまるだけでなく、仮想ホストの設定ファイルを移動、削除、または名前変更することによって使用可能な基本設定に常時フォールバックできます。同じ理由で、仮想ホストごとに個別の設定ファイルも作成します。

名前ベースの仮想ホストを使用する際、ドメイン名が仮想ホスト設定と一致しない場合に使用されるデフォルト設定を設定することを推奨します。デフォルト仮想ホストは、その設定が最初にロードされるホストです。設定ファイルの順序は、ファイル名で決定されるので、デフォルト仮想ホスト設定のファイル名は、下線文字(_)で始めて (たとえば、_default_vhost.conf).、そのファイルが最初にロードされるようにします。

<VirtualHost></VirtualHost>ブロックには、特定のドメインに適用される情報を記述します。Apacheは、クライアントから定義済みの仮想ホストへの要求を受け取ると、このセクションに記述されているディレクティブを使用します。仮想ホストでは、ほぼすべてのディレクティブを使用できます。Apacheの設定ディレクティブの詳細については、http://httpd.apache.org/docs/2.2/mod/quickreference.htmlを参照してください。

30.2.2.1.1. 名前ベースの仮想ホスト

名前ベースの仮想ホストでは、1つのIPアドレスで複数のWebサイトを運用することができます。Apacheは、クライアントから送られたHTTPヘッダのホストフィールドを使用して、仮想ホスト宣言の1つの、一致するServerNameエントリに要求を接続します。一致するServerNameが見つからない場合には、指定されている最初の仮想ホストがデフォルトとして用いられます。

NameVirtualHostディレクティブは、HTTPヘッダ内のドメイン名を含むクライアントからの要求に関して、どのIPアドレス(オプションとして、どのポート)をリスンすべきかApatcheに指示しますこのオプションは、/etc/apache2/listen.conf設定ファイルで設定されます。

最初の引数には完全修飾ドメイン名を指定することができますが、IPアドレスを使用することをお勧めします。2番目の引数はポートで、オプションです。デフォルトでは、ポート80が使用され、 Listen ディレクティブで設定されます。

ワイルドカード*は、IPアドレスとポート番号の両方で使用することができます。その場合、すべてのインタフェースでの要求を受け取ります。IPv6のアドレスは、角カッコの中に記述する必要があります。

例30.1 名前ベースのVirtualHostエントリの応用例

# NameVirtualHost IP-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アドレスを使用する場合には、アドレスを角カッコの中に記述することが必要です。

例30.2 名前ベースのVirtualHostディレクティブ

<VirtualHost 192.168.3.100:80>
  ...
</VirtualHost>

<VirtualHost 192.168.3.100>
  ...
</VirtualHost>

<VirtualHost *:80>
  ...
</VirtualHost>

<VirtualHost *>
  ...
</VirtualHost>

<VirtualHost [2002:c0a8:364::]>
  ...
</VirtualHost>

30.2.2.1.2. IPベースの仮想ホスト

この仮想ホスト設定では、1つのコンピュータに対して複数のIPアドレスを設定する必要があります。Apacheの1つのインスタンスが、複数のドメインにホストとしてサービスを提供し、各ドメインに別のIPアドレスが割り当てられることになります。

物理サーバは、IPベースの仮想ホストごとに、1つのIPアドレスを持つ必要があります。マシンに複数のネットワークカードがない場合には、仮想ネットワークインタフェース(IPエイリアス)を使用することもできます。

次の例では、IP 192.168.3.100のマシンでApacheが実行されており、付加的なIP 192.168.3.101および192.168.3.102をホストしています。すべての仮想サーバについて、VirtualHostブロックが個別に必要です。

例30.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)内のディレクティブが適用されます。

30.2.2.1.3. 基本的な仮想ホスト設定

仮想ホストをセットアップするには、少なくとも次のディレクティブが各仮想ホスト設定に含まれている必要があります。オプションについては、/etc/apache2/vhosts.d/vhost.templateを参照してください。

ServerName

ホストに割り当てられている完全修飾ドメイン名。

DocumentRoot

Apacheがこのホストにファイルをサービスする際に使用されるディレクトリパス。セキュリティ上の理由から、ファイルシステム全体へのアクセスはデフォルトで禁じられているため、Directoryコンテナ内でこのディレクトリを明示的にロック解除する必要があります。

ServerAdmin

サーバ管理者の電子メールアドレス。このアドレスは、Apacheが作成するエラーページなどに表示されます。

ErrorLog

この仮想ホストに関するエラーログファイル。仮想ホストごとに個別のエラーログファイルを作成する必要はありませんが、エラーのデバッグが簡単にできるため、作成されるのが一般的です。/var/log/apache2/はApacheのログファイルのデフォルトディレクトリです。

CustomLog

この仮想ホストに関するアクセスログファイル。仮想ホストごとに個別のアクセスログファイルを作成する必要はありませんが、ホストごとのアクセス統計を個別に分析できるため、作成されるのが一般的です。/var/log/apache2/はApacheのログファイルのデフォルトディレクトリです。

セキュリティ上の理由から、ファイルシステム全体へのアクセスはデフォルトで禁じられています。したがって、DocumentRootなど、Apacheによりサービスされるファイルを保管したディレクトリを明示的にロック解除する必要があります。

<Directory "/srv/www/www.example.com/htdocs">
  Order allow,deny
  Allow from all
</Directory>

完全な設定ファイルは次のようになります。

例30.4 基本的な仮想ホスト設定

<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>

30.2.3. ApacheをYaSTで設定する

YaSTを使用してWebサーバを設定するには、YaSTを起動して、ネットワークサービス+HTTPサーバの順に選択します。このモジュールを初めて起動するときに、HTTPサーバウィザードが起動して、サーバ管理に関していくつかの基本的な事項を決定するように要求されます。このウィザードの完了後、HTTPサーバのモジュールを呼び出すたびに、HTTPサーバの環境設定ダイアログが起動します。詳細については、30.2.3.2項 「HTTPサーバの設定」を参照してください。

30.2.3.1. HTTP Server Wizard

HTTP Server Wizardには、5つのステップがあります。ダイアログの最後のステップでは、上級者用の設定モードに入って、さらに詳細な設定を行うかどうか選択できます。

30.2.3.1.1. Network Device Selection (ネットワークデバイスの選択)

ここでは、Apacheが着信リクエストをリスンするために使用する、ネットワークインタフェースとポートを指定します。既存のネットワークインタフェースとそれらに対応するIPアドレスから、任意のものを組み合わせて選択できます。他のサービスによって予約されていないものであれば、3つの範囲(ウェルノウンポート、レジスタードポート、ダイナミックまたはプライベートポート)のうちのどのポートでも使用できます。デフォルトの設定では、ポート80ですべてのネットワークインタフェース(IPアドレス)をリスンします。

ファイアウォールでWebサーバがリスンするポートを開くには、ファイアウォールでポートを開くをクリックします。これは、LAN、WAN、または公共のインターネットなど、ネットワーク上でWebサーバを利用可能にする場合には必須です。外部からのWebサーバへのアクセスが不要なテスト段階でのみ、ポートを閉じておくことは有用です。複数のネットワークインタフェースが存在する場合は、ファイアウォールの詳細...をクリックして、ポートを開くインタフェースを指定します。

次へ をクリックして設定を続けます。

30.2.3.1.2. モジュール

モジュール設定オプションによって、Webサーバでサポートされるスクリプト言語の有効化または無効化を設定できます。他のモジュールの有効化または無効化の詳細については、30.2.3.2.2項 「サーバモジュール」を参照してください。次へをクリックして次のダイアログに進みます。

30.2.3.1.3. Default Host (デフォルトのホスト)

このオプションは、デフォルトのWebサーバに関連しています。30.2.2.1項 「仮想ホスト設定」で説明されているように、Apacheは、1つの物理的マシンで複数の仮想ホストに使用することができます。設定ファイルで最初に宣言された仮想ホストは通常、デフォルトのホストと呼ばれます。各仮想ホストは、デフォルトホストの設定を継承します。

ホストの設定(ディレクティブ)を編集するには、テーブル内の適切なエントリを選択して、編集をクリックします。新しいディレクティブを追加するには、追加をクリックします。ディレクティブを削除するには、そのアカウントを選択し、削除をクリックします。

図30.1 HTTP Server Wizard:デフォルトホスト

HTTP Server Wizard:デフォルトホスト

これはサーバのデフォルト設定のリストです。

ドキュメントルート

Apacheがこのホストにファイルを送るときに使用されるディレクトリパス。/srv/www/htdocsはデフォルトの場所です。

別名

Aliasディレクティブを使えば、URLを物理的なファイルシステムの場所にマップすることができます。このことは、パスのURLエイリアスを行えば、ファイルシステムのDocument Rootの外にあるパスでもアクセスできることを意味しています。

デフォルトのSUSE Linux Enterprise Serverでは、Alias/icons/usr/share/apache2/iconsを指しています。ここには、ディレクトリのインデックス表示で使用されるApacheのアイコンがあります。

ScriptAlias

Aliasディレクティブと同様に、ScriptAliasディレクティブはURLをシステム内の場所にマップします。相違点は、ScriptAliasはターゲットディレクトリをCGIの場所として指定するということです。つまり、その場所にあるCGIスクリプトが実行されます。

ディレクトリ

ディレクトリ]設定を使用して、指定したディレクトリにのみ適用される設定オプションのグループを含めることができます。

/srv/www/htdocs/usr/share/apache2/icons/srv/www/cgi-binディレクトリのアクセスおよび表示オプションをここで設定します。デフォルトを変更する必要はありません。

対象項目

インクルードにより、他の設定ファイルを指定できます。2つのインクルードディレクティブが設定済みです。/etc/apache2/conf.d/は外部モジュールに付属する設定ファイルを保持するディレクトリです。このディレクティブにより、このディレクトリ内の.confで終わるすべてのファイルが対象となります。もう1つのディレクティブでは、/etc/apache2/conf.d/apache2-manual.confというapache2-manual設定ファイルが対象となります。

サーバ名

クライアントがWebサーバとコンタクトするために使うデフォルトのURLを指定します。http://FQDN/にあるWebサーバへの接続用FQDN(完全修飾ドメイン名)か、またはそのIPアドレスを使用します。ここでは任意の名前は選択できません。サーバはこの名前で認識されなければなりません。

Server Administrator E-Mail

サーバ管理者の電子メールアドレス。このアドレスは、Apacheが作成するエラーページなどに表示されます。

デフォルトホストのステップを完了したら、次へをクリックして、設定を続けます。

30.2.3.1.4. 仮想ホスト

このステップでは、ウィザードはすでに設定されている仮想ホストのリストを表示します(30.2.2.1項 「仮想ホスト設定」を参照)。YaST HTTPウィザードを起動する前に手動で変更を行っていなければ、仮想ホストは表示されません。

ホストを追加するには、追加をクリックし、サーバ名サーバのコンテンツルート(DocumentRoot)、管理者電子メールなどホストに関する基本情報を入力するためのダイアログを開きます。サーバ解像度は、ホストの識別方法を決めるために使用されます(名前ベースまたはIPベース)。仮想ホストIDの変更で名前またはIPアドレスを指定します。

次へをクリックして、仮想ホスト設定ダイアログの2番目の部分に進みます。

仮想ホスト設定のパート2では、CGIスクリプトを有効にするかどうか、およびこれらのスクリプトを使用するディレクトリを指定できます。また、SSLも有効にできます。SSLを有効化する場合は、証明書のパスも指定する必要があります。SSLおよび証明書の詳細については、30.6.2項 「SSLサポートのあるApacheの設定」を参照してください。ディレクトリインデックスオプションを使用して、クライアントがディレクトリを要求するときに表示するファイルを指定できます(デフォルトではindex.html)。ファイルを変更する場合は、1つ以上のファイル名(スペースで区切る)を追加します。公開HTMLを有効にするで、ユーザのパブリックディレクトリ(~user/public_html/)のコンテンツが、サーバのhttp://www.example.com/~userからアクセスできるようにします。

[Important]仮想ホストの作成

仮想ホストを自由に追加することはできません。名前ベースの仮想ホストを使用する場合は、各ホスト名がネットワーク内で解決されている必要があります。IPベースの仮想ホストを使用する場合は、使用可能な各IPアドレスに対し1つのホストのみを割り当てることができます。

30.2.3.1.5. 概要

これはウィザードの最後のステップです。ここでは、Apacheサーバをいつ、どのようにして起動するか(ブート時に起動するか、手動で起動するか)を指定します。また、ここまで行った設定の簡単な要約を確認します。この設定でよければ、完了をクリックして、設定を完了します。変更する場合は、希望のダイアログまで戻るをクリックして戻ります。HTTPサーバのエキスパート環境設定をクリックして、30.2.3.2項 「HTTPサーバの設定」で説明しているダイアログを開きます。

図30.2 HTTP Server Wizard:概要

HTTP Server Wizard:概要

30.2.3.2. HTTPサーバの設定

HTTPサーバの設定ダイアログでは、ウィザード(Webサーバを最初に設定する場合にのみ実行)よりも詳細に設定を調整できます。このダイアログは、次で説明する4つのタブで構成されています。ここで変更する設定オプションは、すぐには適用されません。変更を適用するには、常に完了をクリックして変更を確認する必要があります。中止をクリックすると、設定モジュールを終了し、変更が破棄されます。

30.2.3.2.1. 待ち受けポートおよびアドレス

HTTPサービスで、Apacheを実行するか(有効にする)、または停止するか(無効)を選択します。Listen on Portsで、サーバが使用可能なアドレスおよびポートについて追加編集、または削除を選択します。デフォルトでは、ポート80ですべてのインタフェースをリスンします。常にファイアウォールでポートを開くにチェックマークを入れておく必要があります。そうしないと、外部からWebサーバにアクセスできなくなります。外部からのWebサーバへのアクセスが不要なテスト段階でのみ、ポートを閉じておくことは有用です。複数のネットワークインタフェースが存在する場合は、ファイアウォールの詳細...をクリックして、ポートを開くインタフェースを指定します。

ログファイルで、アクセスログまたはエラーログのいずれかを確認します。これは、設定をテストする場合に便利です。ログファイルは別個のウィンドウに表示されますが、そこから、Webサーバを再起動または再ロードすることも可能です。詳細については、30.3項 「Apacheの起動および停止」を参照してください。これらのコマンドはすぐに有効になり、ログメッセージもすぐに表示されます。

図30.3 HTTP Server Configuration:設定:リッスンポートとアドレス

HTTP Server Configuration:設定:リッスンポートとアドレス

30.2.3.2.2. サーバモジュール

状態の変更をクリックして、Apache2モジュールのステータス(有効または無効)を変更できます。すでにインストールされているがリストに含まれていない新規モジュールを追加するには、Add Moduleをクリックします。モジュールの詳細については、30.4項 「モジュールのインストール、有効化および設定」を参照してください。

図30.4 HTTP Server Configuration:サーバモジュール

HTTP Server Configuration:サーバモジュール

30.2.3.2.3. メインホストまたはホスト

これらのダイアログは、すでに説明したものと同じです。詳細については、30.2.3.1.3項 「Default Host (デフォルトのホスト)」および30.2.3.1.4項 「仮想ホスト」を参照してください。

30.3. Apacheの起動および停止

Apacheは、30.2.3項 「ApacheをYaSTで設定する」の説明のようにYaSTで設定されると、ブート時にランレベル3および5で起動され、ランレベル0、1、2、および6で停止されます。YaSTのランレベルエディタまたはコマンドラインツールのchkconfigを使って、この動作を変更することができます。

実行中のシステムでApacheを起動、停止、操作するには、initスクリプト/usr/sbin/rcapache2を使用します。initスクリプトの一般的な情報については、9.2.2項 「initスクリプト」を参照してください。rcapache2コマンドでは、次のパラメータが使用されます。

status

Apacheが起動したかどうかチェックします。

start

Apacheが実行中でない場合に起動します。

startssl

SSLサポートのあるApacheが実行中でない場合に起動します。SSLサポートについての詳細は、30.6項 「SSLをサポートするセキュアWebサーバのセットアップ」を参照してください。

stop

親プロセスを終了して、Apacheを終了します。

restart

Apacheをいったん停止し、再起動します。Apacheが実行中でなかった場合は、新規に起動します。

try-restart

停止し、すでに実行している場合のみApacheを再起動します。

reloadまたはgraceful

フォークしたすべてのApacheプロセスに、シャットダウンする前に要求を完了させて、それからWebサーバを停止します。1つのプロセスが終了するたびに、新たに開始したプロセスで置き換えられるので、最終的にはApacheの完全な再起動になります。

[Tip]運用環境でApacheを再起動する

接続を中断しないでApacheの変更を有効にするには、rcapache2 reloadコマンドを使用します。

restart-graceful

すべての着信要求をただちに処理する2つ目のウェブサーバを起動します。ウェブサーバの以前のインスタンスはGracefulShutdownTimeoutで設定された一定時間、引き続きすべの既存要求を処理します。

rcapache2 restart-gracefulは、新しいバージョンへのアップグレード時、または再起動が必要な設定オプションの変更時に便利です。このオプションを使用すると、サーバのダウンタイムが最小限になります。

GracefulShutdownTimeoutの設定が必要です。これを設定しないと、restart-gracefulを指定しても、通常の再起動が行われます。ゼロに設定した場合、残っている要求がすべて完全に処理されるまで、サーバが無制限に待機します。

最初のApacheインスタンスが必要なリソースをすべてクリアできなかった場合、graceful restartは失敗します。この場合、コマンドの結果はgraceful stopとなります。

stop-graceful

既存要求の処理を完了できるように、GracefulShutdownTimeoutで設定された一定時間の経過後にウェブサーバを停止します。

GracefulShutdownTimeoutの設定が必要です。これを設定しないと、stop-gracefulを指定しても、通常のstopが実行されます。ゼロに設定した場合、残っている要求がすべて完全に処理されるまで、サーバが無制限に待機します。

configtestまたはextreme-configtest

実行中のWebサーバに影響することなく、設定ファイルの構文をチェックします。このチェックは、サーバが起動、再ロード、または再起動されるたびに強制されるので、通常は、明示的に実行する必要はありません(ただし、設定エラーが検出されると、ウェブサーバの起動/再ロード/再起動は行われません)。extreme-configtestオプションを指定すると、Webサーバがユーザnobodyとして起動し、設定を実際にロードするので、より多くのエラーを検出できます。ただし、設定はロードされますが、nobodyではSSL証明書を読み取れないため、SSLセットアップをテストすることはできません。

probe

再ロードの必要性を検出し(設定が変更されたかどうかを確認)、rcapache2コマンドに必要な引数を提示します。

server-status and full-server-status

それぞれ、簡単または完全ステータス画面を表示します。lynxまたはw3mのいずれかがインストールされ、モジュールmod_statusが有効になっている必要があります。これに加え、status/etc/sysconfig/apache2ファイルのAPACHE_SERVER_FLAGSに追加する必要があります。

[Tip]その他のフラグ

rcapache2にその他のフラグを指定すると、これらのフラグはWebサーバを通過します。

30.4. モジュールのインストール、有効化および設定

Apacheソフトウェアは、モジュール形式で構築されており、一部の主要タスクを除いてはモジュールごとに処理されます。この方法で、HTTPさえもモジュールによって処理されています(http_core)。

Apacheのモジュールは、ビルド時にApacheのバイナリに組み込むことも、実行時に動的にロードすることもできます。動的なモジュールのロード方法の詳細については、30.4.2項 「有効化と無効化」を参照してください。

Apacheモジュールは、次の4つのカテゴリに分類されます。

基本モジュール

基本モジュールは、デフォルトでApacheにコンパイルされています。SUSE Linux Enterprise ServerのApacheでは、mod_so(他のモジュールのロードに必要)およびhttp_coreのみがコンパイルされています。他のモジュールは、サーバのバイナリに入れる代わりに、ランタイム時に入れるように共有オブジェクトとして利用できます。

拡張モジュール

一般に、拡張とされているモジュールは、Apache ソフトウェアパッケージに含まれてはいますが、通常、サーバに静的にはコンパイルされていません。SUSE Linux Enterprise Serverでは、これらは実行時にApacheにロードすることができる共有オブジェクトとして利用可能になっています。

外部モジュール

外部とラベルされているモジュールは、公式のApacheのディストリビューションには含まれていません。ただし、SUSE Linux Enterprise Serverでは、そのいくつかを提供します。

MPM(マルチプロセシングモジュール)

MPMは、Webサーバへのリクエストを受け取って処理する役割を果たすもので、Webサーバソフトウェアの中核となっています。

30.4.1. モジュールのインストール

30.1.2項 「インストール」で説明されているデフォルトインストールを行った場合は、すべての基本モジュールと拡張モジュール、マルチプロセシングモジュール、プリフォークMPM、および外部モジュールのmod_php5mod_pythonがすでにインストールされています。

YaSTを起動し、ソフトウェア+ソフトウェアの管理の順に選択して、その他の外部モジュールをインストールできます。フィルタ+検索の順に選択し、[apache]を検索します。他のパッケージの中で、使用可能な外部Apacheモジュールがすべて検索結果のリストに表示されます。

30.4.2. 有効化と無効化

特定モジュールの有効化/無効化は、手動で行うか、YaSTを使用します。YaSTでは、30.2.3.1項 「HTTP Server Wizard」で説明されているモジュール設定を使用して、スクリプト言語モジュール(PHP5、Perl、およびPython)を有効または無効にする必要があります。その他のすべてのモジュールは、30.2.3.2.2項 「サーバモジュール」で説明しているように有効化または無効化できます。

手動でモジュールを有効化または無効化する場合は、a2enmod mod_fooまたはa2dismodmod_fooコマンドをそれぞれ使用します。a2enmod -lは、すべての現在アクティブなモジュールのリストを出力します。

[Important]外部モジュール用の設定ファイルを含める

手動で外部モジュールを有効化した場合は、各設定ファイルがすべての仮想ホスト設定にロードされていることを確認します。外部モジュール用の設定ファイルは、/etc/apache2/conf.d/内に位置し、デフォルトではロードされません。各仮想ホスト上に同じモジュールが必要な場合は、このディレクトリ内の*.confを含めることができます。必要でない場合は、個々のファイルを含めます。その例として、「/etc/apache2/vhost.d/vhost.template」を参照してください。

30.4.3. 基本および拡張モジュール

すべての基本および拡張モジュールは、Apacheのマニュアルに詳しく説明されています。ここでは、主要なモジュールについて簡単に説明します。各モジュールの詳細については、http://httpd.apache.org/docs/2.2/mod/を参照してください。

mod_actions

特定のMIMEタイプ(application/pdfなど)、特定の拡張子を持つファイル(.rpmなど)、または特定の要求方法(GETなど)が要求された場合に、常にスクリプトを実行する方法を提供します。このモジュールは、デフォルトで有効です。

mod_alias

AliasおよびRedirectディレクティブを提供します。これにより、特定のディレクトリにURIをマップ(Alias)、または要求されたURLを別の場所にリダイレクトできます。このモジュールは、デフォルトで有効です。

mod_auth*

認証モジュールは、mod_auth_basicを使用する基本認証やmod_auth_digestを使用するダイジェスト認証などさまざまな認証方法を提供します。Apache 2.2のダイジェスト認証は実験的なものであると考えなくてはなりません。

mod_auth_basicおよびmod_auth_digestは、認証プロバイダモジュールのmod_authn_*(たとえば、テキストファイルベースの認証用のmod_authn_file)および認証モジュールのmod_authz_*(たとえば、ユーザ認証用の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)自動的に配信されるファイルを設定できます。ディレクトリ要求に末尾のスラッシュが含まれていない場合は、正しいURLへの自動リダイレクトも提供します。このモジュールは、デフォルトで有効です。

mod_env

CGIスクリプトやSSIページに渡す環境を制御します。環境変数を設定、設定解除したり、httpdプロセスを起動したシェルから渡すことができます。このモジュールは、デフォルトで有効です。

mod_expires

mod_expiresを使用すると、Expiresヘッダの送信によって、プロキシとブラウザのキャッシュがドキュメントを更新する頻度を制御できます。このモジュールは、デフォルトで有効です。

mod_include

mod_includeは、動的にHTMLページを生成するための基本機能を提供するSSI (Server-Side Includes)を使用できるようにします。このモジュールは、デフォルトで有効です。

mod_info

http://localhost/server-info/にサーバ設定の包括的な概要を表示します。セキュリティ上の理由から、このURLへのアクセスは常に制限されます。デフォルトでは、localhostにのみ、このURLへのアクセスが許可されます。mod_infoは、/etc/apache2/mod_info.confで設定されます。

mod_log_config

このモジュールを使用して、Apacheログファイルの書式を設定できます。このモジュールは、デフォルトで有効です。

mod_mime

mimeモジュールは、ファイル名の拡張子(HTMLドキュメント用のtext/htmlなど)に基づいた、適切なMIMEヘッダを使用してファイルが配信されるようにします。このモジュールは、デフォルトで有効です。

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サーバとクライアント間の暗号化接続を有効化します。詳細については、30.6項 「SSLをサポートするセキュアWebサーバのセットアップ」を参照してください。このモジュールは、デフォルトで有効です。

mod_status

サーバの動作およびパフォーマンスに関する情報をhttp://localhost/server-status/に表示します。セキュリティ上の理由から、このURLへのアクセスは常に制限する必要があります。デフォルトでは、localhostにのみ、このURLへのアクセスが許可されます。mod_statusは、/etc/apache2/mod_status.confで設定されます。

mod_suexec

mod_suexecは、CGIスクリプトを別のユーザとグループで実行できるようにします。このモジュールは、デフォルトで有効です。

mod_userdir

~user/の下に、ユーザ固有のディレクトリを用意します。UserDirディレクティブを設定で指定する必要があります。このモジュールは、デフォルトで有効です。

30.4.4. マルチプロセシングモジュール

SUSE Linux Enterprise Serverには、Apacheで使用するための2つの異なるMPM(マルチプロセシングモジュール)が用意されています。

30.4.4.1. プリフォークMPM

プリフォークMPMは、スレッド対応でない、プリフォークWebサーバを実装します。プリフォークMPMは、各要求を分離し、個々の子プロセスの分岐で処理するApacheバージョン 1.xと同じように、このWebサーバを動作させます。これにより、問題のあるリクエストが他のものに影響することがなくなるので、Webサーバのロックアップを避けられます。

プロセスベースのアプローチによって安定性がもたらされますが、プリフォークMPMは、もう一方のワーカーMPMよりも多くのシステムリソースを消費します。プリフォークMPMは、UnixベースのオペレーティングシステムでのデフォルトのMPMとみなされています。

[Important]このドキュメントでのMPM

このドキュメントでは、ApacheがプリフォークMPMで使用されていることを仮定しています。

30.4.4.2. ワーカーMPM

ワーカーMPMは、マルチスレッド対応のWebサーバを提供します。スレッドとは、軽い形態のプロセスです。プロセスよりもスレッドが優れている点は、リソースの消費が少ないことです。ワーカーMPMは、子プロセスを分岐する代わりに、サーバプロセスでスレッドを使用することによってリクエストを処理します。プリフォークした子プロセスはマルチスレッドになります。このアプローチでは、プリフォークMPMの場合よりもシステムリソースの消費が少なくなるので、Apacheの性能が良くなります。

主な欠点としては、ワーカーMPMの安定性の問題が挙げられます。スレッドが壊れた場合、プロセスのすべてのスレッドに影響してしまいます。最悪の場合には、サーバがクラッシュすることがあります。特に、ApacheでCGI (Common Gateway Interface)を使用している場合、負荷が大きくなると、スレッドがシステムリソースと通信できなくなり、内部サーバエラーが生じることがあります。ワーカーMPMを使用すべきでないという意見の別の根拠は、利用できるApacheのモジュールのすべてがスレッドセーフになっているわけではなく、そのためワーカーMPMと組み合わせて使用することはできないという点です。

[Warning]MPMと組み合わせてPHPモジュールを使用する

利用可能なPHPモジュールのすべてがスレッドセーフになっているわけではありません。ワーカーMPMとmod_phpは併用しないでください。

30.4.5. 外部モジュール

ここでは、SUSE Linux Enterprise Serverに付属しているすべての外部モジュールのリストを示します。

mod-apparmor

mod_php5mod_perlなどのモジュールが処理する個々のCGIスクリプトに対して、AppArmor制限を提供するために、Apacheにサポートを追加します。

パッケージ名:apache2-mod_apparmor
詳細: パート 「Confining Privileges with AppArmor」 (↑Security Guide (セキュリティガイド))
mod_mono

mod_auth_kerbにより、Kerberos認証がApache Webサーバに提供されます。

パッケージ名:apache2-mod_auth_kerb
詳細: http://modauthkerb.sourceforge.net/configure.html
mod_mono

mod_monoを使用すると、サーバでASP.NETページを実行できます。

パッケージ名: apache2-mod_mono
環境設定ファイル: /etc/apache2/conf.d/mod_mono.conf
mod_perl

mod_perlは、埋め込まれているインタプリタで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_security

mod_securityにより、さまざまな範囲の攻撃からWebアプリケーションを保護するためのファイアウォールがWebアプリケーションに提供されます。さらに、HTTPトラフィックモニタリングおよびリアルタイム分析も可能です。

パッケージ名: apache2-mod_security2
環境設定ファイル: /etc/apache2/conf.d/mod_security2.conf
詳細: /usr/share/doc/packages/apache2-mod_security2
マニュアル: http://modsecurity.org/documentation/

30.4.6. コンパイル

上級ユーザは、カスタムのモジュールを記述してApacheを拡張することができます。Apache用のモジュールを開発したり、サードパーティのモジュールをコンパイルしたりするには、apache2-develパッケージ、および対応する開発ツールが必要です。apache2-develには、Apache用の追加モジュールのコンパイルに必要なapxs2ツールも含まれています。

apxs2は、ソースコードからモジュールをコンパイルし、インストールすることを可能にします(設定ファイルへの必要な変更も含みます)。これは、実行時にApacheにロードされる、ダイナミック共有オブジェクト (DSO)を作成します。

apxs2バイナリは、/usr/sbinの下層にあります

  • /usr/sbin/apxs2—MPMと共に動作する拡張モジュールを構築するのに適しています。インストール場所は/usr/lib/apache2です。

  • /usr/sbin/apxs2-prefork—プリフォークMPMモジュールに適しています。インストール場所は/usr/lib/apache2-preforkです。

  • /usr/sbin/apxs2-worker—ワーカーMPMモジュールに適しています。インストール場所は/usr/lib/apache2-workerです。

次のコマンドで、ソースコードからモジュールをインストールして、アクティブにします。

cd /path/to/module/source; apxs2 -cia
    mod_foo.c

ここで、-cはモジュールをコンパイルし、-iはモジュールをインストールし、-aはモジュールをアクティブにします。apxs2のその他のオプションについては、apxs2(1) manページを参照してください。

30.5. CGIスクリプトの実行

ApacheのCGI (Common Gateway Interface)により、通常CGIスクリプトとして呼ばれるスクリプトまたはプログラムを含んだ動的コンテンツを作成できます。CGIスクリプトは、どのプログラム言語でも作成できます。通常、PerlまたはPHPなどのスクリプト言語が使用されます。

ApacheがCGIスクリプトで作成されたコンテンツを配信できるようにするには、mod_cgiを有効にする必要があります。mod_aliasも必要です。デフォルトでは、両モジュールとも有効化されています。モジュールの有効化の詳細については、30.4.2項 「有効化と無効化」を参照してください。

[Warning]CGIセキュリティ

サーバがCGIスクリプトを実行できるようになると、潜在的なセキュリティホールが発生します。詳細については、30.7項 「セキュリティ問題の回避」を参照してください。

30.5.1. Apacheの設定

SUSE Linux Enterprise Serverでは、CGIスクリプトの実行は、/srv/www/cgi-bin/ディレクトリでのみ許可されています。この場所は、すでにCGIスクリプトを実行するように設定されています。仮想ホスト設定を作成しておらず(30.2.2.1項 「仮想ホスト設定」を参照してください)、ホスト固有のディレクトリにスクリプトを配置する場合は、このディレクトリのロックを解除し、設定する必要があります。

例30.5 VirtualHost CGIの設定

ScriptAlias /cgi-bin/ "/srv/www/www.example.com/cgi-bin/"1

<Directory "/srv/www/www.example.com/cgi-bin/">
 Options +ExecCGI2
 AddHandler cgi-script .cgi .pl3
 Order allow,deny4
 Allow from all
</Directory>

1

このディレクトリ内のすべてのファイルをCGIスクリプトとして処理するようにApacheに指示します。

2

CGIスクリプトの実行を有効化します。

3

.plおよび.cgiの拡張子が付いたファイルをCGIスクリプトとして処理するようにサーバに指示します。必要に応じて調整します。

4

OrderディレクティブとAllowディレクティブは、デフォルトのアクセス状態と、許可および拒否のディレクティブが評価される順序を制御します。この場合、deny文の前にallow文が評価され、ユニバーサルアクセスが有効になります。


30.5.2. テストスクリプトの実行

CGIプログラミングは通常のプログラミングとは異なり、CGIプログラムとスクリプトの前にContent-type: text/htmlなどのMIMEタイプヘッダを記述する必要があります。このヘッダはクライアントに送信されるので、クライアントは、受信したコンテンツによってコンテンツの種類を識別します。次に、このスクリプトの出力は、通常、Webブラウザなどのクライアントが認識できる形式(たいていの場合はHTML、プレーンテキスト、画像など)でなければなりません。

Apacheパッケージの一部として、/usr/share/doc/packages/apache2/test-cgi内に簡単なテストスクリプトが含まれています。このスクリプトは、いくつかの環境変数の内容をプレーンテキストとして出力します。このスクリプトを/srv/www/cgi-bin/か、仮想ホストのスクリプトディレクトリ/srv/www/example.com_cgi-bin/のいずれかにコピーし、「test.cgi」という名前を付けます。

Webサーバがアクセスできるファイルは、rootユーザが所有している必要があります。詳細については、30.7項 「セキュリティ問題の回避」を参照してください。Webサーバは別のユーザ名で実行しているので、CGIスクリプトはworld-executableおよびworld-readableである必要があります。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を参照してください。

30.5.3. CGIトラブルシューティング

テストプログラムの出力の代わりにエラーメッセージが表示される場合は、次を確認します。

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を変更しなかった場合は該当しませんが、独自のプログラムを使用する場合は、必ず、プログラミングエラーがないかどうか確認してください。

30.6. SSLをサポートするセキュアWebサーバのセットアップ

クレジットカード情報などの機密データをWebサーバやクライアント間で送信する場合は必ず、認証を使用して、安全で、暗号化された接続の確立を推奨します。mod_sslは、クライアントとWebサーバ間のHTTP通信にセキュアソケットレイヤ(SSL)プロトコルとトランスポートレイヤセキュリティ(TLS)プロトコルを使用して、強力な暗号化を行います。SSL/TSLを使用することにより、Webサーバとクライアント間でプライベートな接続が確立されます。データの整合性が保証され、クライアントとサーバ間で相互認証ができるようになります。

この目的で、サーバは、URLに対するリクエストに応答する前に、サーバの有効な識別情報を含むSSL証明書を送ります。これにより、サーバが唯一の正当な通信相手であることが保証されます。加えて、この証明書は、クライアントとサーバの間の暗号化された通信が、重要な内容がプレーンテキストとして見られる危険なしに、情報を転送できることを保証します。

mod_sslは、SSL/TSLプロトコル自体は実装しませんが、ApacheとSSLライブラリ間のインタフェースとして機能します。SUSE Linux Enterprise Serverでは、OpenSSLライブラリが使用されます。OpenSSLは、Apacheとともに自動的にインストールされます。

Apacheでmod_sslを使用した場合の最も明白な効果は、URLのプレフィックスがhttp://ではなくhttps://となることです。

[Tip]証明書サンプル

パッケージapache2-example-certificatesをインストールすると、架空会社Snake Oilの証明書のサンプルを入手できます。

30.6.1. SSL証明書の作成

SSL/TSLをWebサーバで使用するには、SSL証明書を作成する必要があります。この証明書は、両者が互いに相手を識別できるように、Webサーバとクライアント間の認証に必要です。証明書の整合性を確認するには、すべてのユーザが信用する者によって署名される必要があります。

3種類の証明書を作成することができます。テストの目的のみのダミー証明書、あらかじめ定義されている信用する一部のユーザグループ用の自己署名付き証明書、および公的な独立団体のCA (Certificate Authority)によって署名される証明書です。

証明書の作成には、基本的に2つのステップで行うことができます。はじめに、CAの秘密鍵が生成され、次に、この鍵を使用してサーバ証明書が署名されます。

[Tip]詳細情報

SSL/TSLの概念および定義の詳細については、http://httpd.apache.org/docs/2.2/ssl/ssl_intro.htmlを参照してください。

30.6.1.1. ダミー証明書の作成

ダミー証明書の生成は簡単です。/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にも配置されます。

[Important]テスト専用

ダミー証明書は、実働システム上では使用しないでください。テストの目的のみで使用してください。

30.6.1.2. 自己署名付き証明書の作成

イントラネットまたは定義されている一部のユーザグループ用にセキュアWebサーバをセットアップするとき、独自のCA (Certificate Authority)を通じて証明書に署名するので\'8f\'5c分な場合があります。

自己署名付き証明書の作成手順は、対話形式の9つのステップで構成されています。/usr/share/doc/packages/apache2ディレクトリに移動し、次のコマンドを実行します。/mkcert.sh make --no-print-directory /usr/bin/openssl /usr/sbin/ customこのディレクトリ以外からこのコマンドを実行しないでください。プログラムは、一連のプロンプトを表示します。この一部には、ユーザ入力が必要なものもあります。

手順30.4 mkcert.shを使用した自己署名付き証明書の作成

  1. 証明書を使用してシグネチャアルゴリズムを決定します

    一部の古いブラウザでDSAを使用すると問題があるため、RSA (デフォルトのR)を選択します。

  2. CA用RSA秘密鍵を生成(1024ビット)

    操作の必要はありません。

  3. CAへのX.509証明書署名要求を生成

    ここで、CAの識別名を作成します。このとき、国名または組織名など、いくつかの質問に答える必要があります。ここで入力した内容が証明書に含まれるため、有効なデータを入力します。すべての質問に答える必要はありません。該当しない、または空白のままにする場合は、.を使用します。一般名は、CA自体の名前です。My company CAなど、意味のある名前を選択します。

    [Important]CAの一般名

    CAの一般名はサーバの一般名と異なる名前にする必要があるため、この手順では完全修飾ホスト名は選択しないでください。

  4. CAによる署名用のX.509証明書を生成

    証明書バージョン3を選択します(デフォルト)。

  5. SERVER用のRSA秘密鍵を生成(1024ビット)

    操作の必要はありません。

  6. SERVERへのX.509証明書署名要求を生成

    ここで、サーバの鍵の識別名を作成します。質問は、CAの識別名で答えたものとほぼ同じです。ここで入力するデータがWebサーバに適用されますが、CAのデータと同一である必要はありません(サーバが別の場所に位置する場合など)。

    [Important]一般名の選択

    ここで入力する一般名は、セキュアサーバの完全修飾ホスト名(www.example.comなど)である必要があります。完全修飾ホスト名でない場合、Webサーバへのアクセス時、証明書がサーバと一致していないという警告がブラウザに表示されます。

  7. 独自のCAによる署名付きX.509証明書を生成

    証明書バージョン3を選択します(デフォルト)。

  8. セキュリティ用パスフレーズのあるCAのRSA秘密鍵の暗号化

    CAの秘密鍵をパスワードで暗号化することをお勧めします。そのため、Yを選択し、パスワードを入力します。

  9. セキュリティ用パスフレーズのあるSERVERのRSA秘密鍵の暗号化

    秘密鍵をパスワードで暗号化すると、Webサーバを起動するたびにこのパスワードを入力するよう求められます。このため、Webサーバのブートおよび再起動時にサーバを自動的に起動するのが難しくなります。したがって、一般的に、この質問にはNと答えます。パスワードで暗号化しないと鍵は保護されないため、この鍵へのアクセスは許可されたユーザのみに限定する必要があることに注意してください。

    [Important]サーバ鍵の暗号化

    サーバ鍵をパスワードで暗号化する場合は、/etc/sysconfig/apache2APACHE_TIMEOUTの値を増やします。値を増やさないと、サーバを起動しようとする試みが停止する前に、パスフレーズを入力するのに十分な時間がなくなります。

スクリプトの結果ページに、生成された鍵と証明書のリストが表示されます。スクリプトの出力とは異なり、ファイルはローカルディレクトリのconf内ではなく、適切な場所である、/etc/apache2/内に生成されます。

最後のステップとして、Webブラウザ内の認識および信用されたCAのリストに含まれるように、ユーザがアクセスできる場所に/etc/apache2/ssl.crt/ca.crtからCA証明書ファイルをコピーします。コピーしない場合、ブラウザは、この証明書が不明な認証局から発行されたものであると見なします。証明書は1年間有効です。

[Important]自己署名付き証明書

自己署名付き証明書は、CA (Certificate Authority)として認識および信用するユーザによってアクセスされるWebサーバ上でのみ使用します。自己署名付き証明書をパブリックショップなどで使用することはお勧めしません。

30.6.1.3. 公式に署名された証明書の取得

証明書に署名する公式なCA (Certificate Authority)は、多数存在します。証明書は、信用のあるサードパーティによって署名されるため、完全に信用できます。通常、一般に運営されているセキュアWebサーバでは、証明書が公式に署名されます。

最も良く知られている公式なCAには、Thawte (http://www.thawte.com/)またはVerisign (http://www.verisign.com)があります。これらや、その他のCAは、すべてのブラウザにすでにコンパイルされているため、これらのCAによって署名された証明書は、ブラウザによって自動的に許可されます。

公式に署名された証明書を要求するとき、CAに証明書を送信しません。代わりに、CSR (Certificate Signing Request)を発行します。CSRを作成するには、/usr/share/ssl/misc/CA.sh -newreqスクリプトを呼び出します。

はじめに、スクリプトは、CSRの暗号化に使用されているパスワードを問い合わせてきます。その後、識別名を入力するよう求められます。このとき、国名または組織名など、いくつかの質問に答える必要があります。ここで入力した内容が証明書に含まれ、確認されるため、有効なデータを入力します。すべての質問に答える必要はありません。該当しない、または空白のままにする場合は、.一般名は、CA自体の名前です。My company CAなど、意味のある名前を選択します。最後に、チャレンジパスワードおよび代替の企業名を入力する必要があります。

スクリプトを呼び出したディレクトリでCSRを検索します。ファイルには、newreq.pemという名前が付きます。

30.6.2. SSLサポートのあるApacheの設定

Webサーバ側のSSLとTLS要求用のデフォルトのポートは 443です。ポート 80をリスンする通常のApacheと、ポート 443をリスンするSSL/TL対応のApacheとの間に競合は生じません。通常、ポート80とポート443への要求はそれぞれ別の仮想ホストが処理し、別の仮想サーバに送られます。

[Important]ファイアウォール設定

ポート443でSSL対応のApache用のファイアウォールを開くことを忘れないでください。ファイアウォールは、項 「Configuring the Firewall with YaST」 (第15章 Masquerading and Firewalls, ↑Security Guide (セキュリティガイド))で説明されているように、YaSTを使用して設定できます。

SSLモジュールはグローバルサーバ設定でデフォルトで有効になっています。ホストで無効にされている場合は、コマンドa2enmod sslで有効にします。最終的にSSLを有効にするには、サーバをフラグSSLで起動する必要があります。このためには、a2enflag SSLを呼び出します。サーバ証明書をパスワードで暗号化している場合は、/etc/sysconfig/apache2APACHE_TIMEOUTの値を増やし、Apacheの起動時にパスフレーズを入力するのに十分な時間が与えられるようにします。これらの変更を適用するため、サーバを再起動します。再ロードでは不十分です。

仮想ホスト設定ディレクトリには、SSL固有ディレクティブが詳細に記述されている/etc/apache2/vhosts.d/vhost-ssl.templateテンプレートが含まれています。一般的な仮想ホスト設定については、30.2.2.1項 「仮想ホスト設定」を参照してください。

始めるには、テンプレートを/etc/apache2/vhosts.d/mySSL-host.confにコピーして編集します。次のディレクティブの値を調整するだけです。

  • DocumentRoot

  • ServerName

  • ServerAdmin

  • ErrorLog

  • TransferLog

30.6.2.1. 名前ベースの仮想ホストとSSL

IPアドレスが1つだけのサーバで、複数のSSL対応の仮想ホストを実行することはできません。名前ベースの仮想ホスティングでは、要求されたサーバ名をApacheが知っている必要があります。SSL接続の問題は、SSL接続が(デフォルトの仮想ホストの使用により)確立された後でのみ、そのような要求の読み込みが可能なことです。その結果、証明書がサーバ名に一致しないという警告メッセージが表示されます。

SUSE Linux Enterprise Serverは、SNI (Server Name Indication)と呼ばれるSSLプロトコルの拡張を組み込んでおり、仮想ドメインの名前をSSLネゴシエーションの一部として送信することで、この問題を解決します。これにより、サーバが正しい仮想ドメインに早く切り替わり、ブラウザに正しい証明書を提示することが可能になります。

SUSE Linux Enterprise Serverでは、デフォルトでSNIが有効になっています。名前ベースの仮想ホストをSSLで使用可能にするには、30.2.2.1.1項 「名前ベースの仮想ホスト」で説明されているようにサーバを設定します (ただし、SSLでは、ポート80ではなく、ポート443を使用)。

[Important]SNIブラウザのサポート

SNIは、クライアント側でもサポートされる必要があります。SNIは、ほとんどのブラウザでサポートされていますが、モバイルハードウェアの一部のブラウザやWindows* XP上のInternet ExplorerとSafariにはSNIのサポートがありません。詳細については、http://en.wikipedia.org/wiki/Server_Name_Indicationを参照してください。

ディレクティブSSLStrictSNIVHostCheckを使用して、SNIに非対応のブラウザを処理する方法を設定しますSNI非対応ブラウザは、サーバ設定でonに設定されると、すべての仮想ホストに関して拒否されます。VirtualHostディレクティブ内でonに設定されると、この特定のホストへのアクセスが拒否されます。

サーバ設定でoffに設定されると、サーバはSNIサポートがないかのように動作します。SSL要求は、(ポート443に対して)定義された最初の仮想ホストによって処理されます。

30.7. セキュリティ問題の回避

公共のインターネットに公開しているWebサーバについては、管理面での不断の努力が求められます。ソフトウェアと、偶然の設定ミスの両方に関連したセキュリティの問題が発生することは避けられません。それらに対処するためのいくつかのヒントを紹介します。

30.7.1. 最新版のソフトウェア

Apacheソフトウェアに脆弱性が見つかると、SUSEからセキュリティ上の勧告が出されます。これには、脆弱性を修正するための指示が含まれているので、可能な限り早期の適用が必要です。SUSEセキュリティ通知は、次の場所から入手できます。

30.7.2. DocumentRootのパーミッション

SUSE Linux Enterprise Serverのデフォルトでは、DocumentRootディレクトリの/srv/www/htdocsおよびCGIディレクトリの/srv/www/cgi-binは、ユーザおよびグループrootに属します。これらのパーミッションは変更しないでください。ディレクトリにすべてのユーザが書き込み可能な場合、どのユーザもそれらのディレクトリにファイルを格納できます。その後これらのファイルは、Apacheによりwwwrunのパーミッションで実行されます。その結果、意図しない仕方で、ユーザがファイルシステムのリソースにアクセスできるようになる可能性があります。/srv/wwwのサブディレクトリを使用して仮想ホストのDocumentRootおよびCGIディレクトリを配置し、このユーザおよびグループのrootがディレクトリとファイルの所有者であることを確認します。

30.7.3. ファイルシステムアクセス

デフォルトでは、ファイルシステム全体へのアクセスは、/etc/apache2/httpd.confで定義されています。これらのディレクティブは決して上書きしないでください。ただし、Apacheが読み込む必要のあるすべてのディレクトリに対するアクセスは有効にしてください。詳細については、30.2.2.1.3項 「基本的な仮想ホスト設定」を参照してください。このためには、パスワードまたはシステム設定ファイルなど重要なファイルは外部から読み取ることができないことを確認します。

30.7.4. CGIスクリプト

Perl、PHP、SSIまたは他のプログラミング言語によるインタラクティブなスクリプトは、事実上、任意のコマンドを実行できるため、一般的なセキュリティの問題が存在します。サーバから実行されるスクリプトは、サーバの管理者が信用するソースからのみインストールされる必要があります。一般的には、ユーザが独自のスクリプトを実行できる環境は適切ではありません。また、すべてのスクリプトに対してセキュリティ監査を行うこともお勧めします。

スクリプトの管理をできるだけ簡単にするため、CGIスクリプトの実行をグローバルに許可するのではなく、通常、特定のディレクトリに制限されています。設定には、ディレクティブのScriptAliasおよびOption ExecCGIが使用されます。SUSE Linux Enterprise Serverのデフォルト設定では、任意の場所からのCGIスクリプトの実行は許可されません。

すべてのCGIスクリプトは同一のユーザとして実行するため、異なるスクリプトが互いに競合する可能性があります。suEXECモジュールは、CGIスクリプトを別のユーザとグループで実行できるようにします。

30.7.5. ユーザディレクトリ

ユーザディレクトリを(mod_userdirまたはmod_rewriteを使用して)有効化する場合は、 .htaccessファイルを許可しないことをお勧めします。これらのファイルは、ユーザによるセキュリティ設定の上書きを可能にするからです。AllowOverRideディレクティブを使用して、少なくとも、ユーザの操作を制限する必要があります。SUSE Linux Enterprise Serverでは、.htaccessファイルはデフォルトで有効化されていますが、ユーザはmod_userdirの使用時にいずれのOptionディレクティブも上書きできません(詳細は、/etc/apache2/mod_userdir.conf 設定ファイル参照)。

30.8. トラブルシューティング

Apacheが起動しないと、Webページにアクセスすることはできず、ユーザがWebサーバに接続することもできないので、問題の原因を見つけ出すことは重要です。次に、エラーが説明されている場所とチェックすべき重要事項について説明します。

rcapache2の出力

Webサーバをバイナリの/usr/sbin/httpd2で起動/停止する代わりに、rcapache2スクリプトを使用します(30.3項 「Apacheの起動および停止」参照)。このスクリプトは、エラーを詳細に説明し、設定エラーを修正するコツやヒントも提供します。

ログファイルと冗長性レベル

致命的エラーと致命的でないエラーの両方について、Apacheログファイル(主に、デフォルトで/var/log/apache2/error_logにあるエラーログファイル)をチェックしてください。さらに、ログファイルにさらに詳細な情報を記録することが必要な場合には、LogLevelディレクティブで、記録されるメッセージの詳細を制御することができます。

[Tip]簡単なテスト

tail -F /var/log/apache2/my_error_logコマンドで、Apacheのログメッセージを確認します。それから、rcapache2 restartを実行します。そして、ブラウザでの接続をもう一度試みて、出力を確認してください。

ファイアウォールとポート

よくある間違いで、サーバのファイアウォール設定でApache用のポートを開けていないことがあります。YaSTでApacheを設定する場合には、この点を扱うための別のオプションが存在します(30.2.3項 「ApacheをYaSTで設定する」を参照してください)。Apacheを手動で設定する場合は、YaSTのファイアウォールモジュールを使用してHTTPとHTTPS用のファイアウォールポートを開きます。

このようにしても、エラーを特定できない場合には、http://httpd.apache.org/bug_report.htmlの、オンラインのApacheバグデータベースをチェックしてください。加えて、http://httpd.apache.org/userslist.htmlのメーリングリストで、Apacheのユーザコミュニティに参加することができます。お勧めできるニュースグループは、comp.infosystems.www.servers.unixです。

30.9. 詳細情報

apache2-docパッケージには、ローカルインストールおよび参照用にそれぞれローカライズされている完全なApacheマニュアルが含まれています。これは、デフォルトではインストールされません。このマニュアルを最も素早くインストールするには、zypper in apache2-docコマンドを使用します。Apacheマニュアルは、インストールされると、http://localhost/manual/から表示できるようになります。また、Webのhttp://httpd.apache.org/docs-2.2/からもアクセスできます。SUSE固有の設定に関するヒントについては、/usr/share/doc/packages/apache2/README.*を参照してください。

30.9.1. Apache 2.2

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で参照できます。

30.9.2. Apacheモジュール

30.4.5項 「外部モジュール」で簡単に説明されている外部Apacheモジュールの詳細は、次の場所で入手できます。

30.9.3. 開発

Apacheモジュールの開発、またはApache Webサーバプロジェクトへの参加に関する情報については、次を参照してください。

Apache開発情報

http://httpd.apache.org/dev/

Apache開発者ドキュメント

http://httpd.apache.org/docs/2.2/developer/

PerlおよびCを使用したApacheモジュールの作成

http://www.modperl.com/

30.9.4. その他の情報源

SUSE Linux Enterprise ServerのApacheに固有な問題が発生した場合は、Technical Information Search (http://www.novell.com/support)を参照してください。Apacheの沿革は、http://httpd.apache.org/ABOUT_APACHE.htmlで参照できます。このページでは、Apacheというサーバ名の由来についても説明しています。


SUSE Linux Enterprise Server 管理ガイド 11 SP3