目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise Serverマニュアル / 管理ガイド / サービス / Apache HTTPサーバ
適用項目 SUSE Linux Enterprise Server 15 SP2

37 Apache HTTPサーバ

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

37.1 クイックスタート

このセクションでは、Apacheを迅速に設定し、起動します。Apacheをインストールして設定するには、rootユーザでなければなりません。

37.1.1 要件

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

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

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

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

  4. ファイアウォールで、デフォルトのWebサーバポート(80)を開きます。このために、公開ゾーンのサービスhttpを許可するようにfirewalldを設定します。詳細については、Section 23.4.3, “Configuring the Firewall on the Command Line”を参照してください。

37.1.2 インストール

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

手順 37.1: デフォルト設定でApacheをインストールする
  1. YaSTを起動して、ソフトウェア › ソフトウェア管理の順に選択します。

  2. 表示 › パターンの順に選択して、WebおよびLAMPサーバを選択します。

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

37.1.3 開始

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

Apacheをターゲットmulti-user.targetおよびgraphical.targetでブート時に自動的に起動するには、次のコマンドを実行します。

tux > sudo systemctl enable apache2

SUSE Linux Enterprise Serversystemdターゲットの詳細、およびYaSTサービスマネージャの詳細については、15.4項 「YaSTを使用したサービスの管理」を参照してください。

シェルを使用してApacheを手動で起動するには、systemctl start apache2コマンドを実行します。

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

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

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

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

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

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

37.2 Apacheの設定

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

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

重要
重要: 設定変更後のApacheのリロードまたは再起動

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

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

37.2.1 Apache設定ファイル

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

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

37.2.1.1 /etc/sysconfig/apache2

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

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

magic

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

mime.types

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

mod_*.conf

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

server-tuning.conf

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

ssl-global.conf and ssl.*

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

sysconfig.d/*.conf

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

uid.conf

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

vhosts.d/*.conf

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

37.2.2 Apacheを手動で設定する

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

37.2.2.1 仮想ホスト設定

仮想ホストという用語は、同じ物理マシンから複数のURI (universal resource identifiers)のサービスを行えるApacheの機能を指しています。これは、www.example.comとwww.example.netのような複数のドメインを、1台の物理マシン上の単一のWebサーバで保持できることを意味しています。

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

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

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

ヒント
ヒント: 常に仮想ホスト設定を作成する

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

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

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

37.2.2.1.1 名前ベースの仮想ホスト

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

最初のステップは、サービスを提供する、名前ベースの異なるホストそれぞれに対して<VirtualHost>ブロックを作成することです。各<VirtualHost>ブロック内には、少なくとも、サービスの提供対象ホストを指定するServerNameディレクティブと、ファイルシステム内でそのホストのコンテンツが存在する場所を示すDocumentRootディレクティブが必要です。

例 37.1: 名前ベースのVirtualHostエントリの基本例
<VirtualHost *:80>
# This first-listed virtual host is also the default for *:80
ServerName www.example.com
ServerAlias example.com
DocumentRoot /srv/www/htdocs/domain
</VirtualHost>

<VirtualHost *:80>
ServerName other.example.com
DocumentRoot /srv/www/htdocs/otherdomain
</VirtualHost>

VirtualHost開始タグには、名前ベースの仮想ホスト設定の引数としてIPアドレス(または完全修飾ドメイン名)が採用されます。ポート番号ディレクティブはオプションです。

ワイルドカード*をIPアドレスの代わりに使用することもできます。IPv6アドレスを使用する場合には、アドレスを角括弧の中に記述することが必要です。

例 37.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>
37.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で2つのドメインをホストしています。すべての仮想サーバについて、VirtualHostブロックが個別に必要です。

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

37.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">
  Require all granted
</Directory>
注記
注記: Require all granted

Apacheの以前のバージョンでは、Require all granted文を次のように表記していました。

Order allow,deny
Allow from all

この古い構文は、現在もmod_access_compatモジュールでサポートされています。

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

例 37.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">
  Require all granted
  </Directory>
</VirtualHost>

37.2.3 ApacheをYaSTで設定する

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

37.2.3.1 HTTP Server Wizard

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

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

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

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

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

37.2.3.1.2 モジュール

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

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

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

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

HTTP Server Wizard:デフォルトホスト
図 37.1: 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が作成するエラーページなどに表示されます。

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

37.2.3.1.4 仮想ホスト

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

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

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

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

重要
重要: 仮想ホストの作成

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

37.2.3.1.5 概要

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

HTTP Server Wizard:概要
図 37.2: HTTP Server Wizard:概要

37.2.3.2 HTTPサーバの設定

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

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

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

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

HTTP Server Configuration:設定:リッスンポートとアドレス
図 37.3: HTTP Server Configuration:設定:リッスンポートとアドレス
37.2.3.2.2 サーバモジュール

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

HTTP Server Configuration:サーバモジュール
図 37.4: HTTP Server Configuration:サーバモジュール
37.2.3.2.3 メインホストまたはホスト

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

37.3 Apacheの起動および停止

37.2.3項 「ApacheをYaSTで設定する」の説明のようにYaSTを設定すると、Apacheは、ブート時にmulti-user.targetおよびgraphical.targetで起動されます。YaSTのサービスマネージャ、あるいはsystemctlコマンドラインツール(systemctl enableまたはsystemctl disable)を使用して、この動作を変更できます。

稼働中のシステムでApacheを起動、停止、または操作するには、次の説明に従ってsystemctlまたはapachectlコマンドを使用します。

systemctlコマンドの一般的な情報については、15.2.1項 「稼働中のシステムでのサービスの管理」を参照してください。

systemctl status apache2

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

systemctl start apache2

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

systemctl stop apache2

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

systemctl restart apache2

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

systemctl try-restart apache2

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

systemctl reload apache2

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

ヒント
ヒント: 運用環境でApacheを再起動する

このコマンドを使用すると、接続を切らずにApache設定の変更を有効化することができます。

systemctl stop apache2

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

apachectl configtest

実行中のWebサーバに影響することなく、設定ファイルの構文をチェックします。 このチェックは、サーバが起動、再ロードまたは再起動するたびに行われるため、通常は明示的にテストを実行する必要はありません(設定エラーが検出された場合、Webサーバは起動、再ロードまたは再起動されません)。

apachectl statusおよびapachectl fullstatus

それぞれ、簡単または完全ステータス画面を表示します。モジュールmod_statusを有効にし、テキストベースのブラウザ(linksまたはw3mなど)をインストールする必要があります。これに加え、status/etc/sysconfig/apache2ファイルのAPACHE_SERVER_FLAGSに追加する必要があります。

ヒント
ヒント: その他のフラグ

コマンドにその他のフラグを指定した場合、 これらはWebサーバに渡されます。

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

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

Apacheのモジュールは、ビルド時にApacheのバイナリに組み込むことも、実行時に動的にロードすることもできます。動的なモジュールのロード方法の詳細については、37.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サーバソフトウェアの中核となっています。

37.4.1 モジュールのインストール

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

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

37.4.2 有効化と無効化

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

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

重要
重要: 外部モジュール用の設定ファイルを含める

手動で外部モジュールを有効化した場合は、各設定ファイルがすべての仮想ホスト設定にロードされていることを確認します。外部モジュール用の設定ファイルは、/etc/apache2/conf.d/内に存在し、デフォルトで/etc/apache2/default-server.confにロードされます。より詳細に制御するには、外部モジュール用の設定ファイルがインクルードされないよう/etc/apache2/default-server.confでコメントアウトして、特定の仮想ホストに対してのみファイルを追加することができます。その例として、/etc/apache2/vhosts.d/vhost.templateを参照してください。

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

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

mod_actions

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

mod_alias

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

mod_auth*

認証モジュールは、mod_auth_basicによる基本認証やmod_auth_digestによるダイジェスト認証など、さまざまな認証方法を提供します。

mod_auth_basicおよびmod_auth_digestは、認証プロバイダモジュールのmod_authn_* (たとえば、テキストファイルベースの認証用のmod_authn_file)および認証モジュールのmod_authz_* (たとえば、ユーザ認証用のmod_authz_user)と組み合わせる必要があります。

この項目の詳細は、http://httpd.apache.org/docs/2.4/howto/auth.htmlの「Authentication HOWTO」で説明されています。

mod_auth_openidc

mod_auth_openidcは、Apache HTTPサーバでOpenID Connectを使用するための唯一の認定された方法です。(https://openid.net/developers/certified/を参照してください)。

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_http2

mod_http2では、ApacheでのHTTP/2プロトコルの使用がサポートされています。VirtualHostProtocols h2 http/1.1を指定することにより、有効化できます。

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.4/content-negotiation.htmlを参照してください。このモジュールは、デフォルトで有効です。

mod_rewrite

mod_aliasの機能を提供しますが、それ以外の機能と柔軟性も提供します。mod_rewriteを使用すると、複数の規則、要求ヘッダなどに基づいてURLをリダイレクトできます。

mod_setenvif

クライアントから送信されたブラウザ文字列やIPアドレスなどの、クライアントからのリクエスト詳細に基づいて環境変数を設定します。このモジュールは、デフォルトで有効です。

mod_spelling

mod_spellingは、大文字小文字の違いなど、URLの表記エラーの訂正を自動的に試みます。

mod_ssl

Webサーバとクライアント間の暗号化接続を有効化します。詳細については、37.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ディレクティブを設定で指定する必要があります。このモジュールは、デフォルトで有効です。

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

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

37.4.4.1 プリフォークMPM

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

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

重要
重要: このドキュメントでのMPM

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

37.4.4.2 ワーカーMPM

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

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

警告
警告: MPMと組み合わせてPHPモジュールを使用する

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

37.4.5 外部モジュール

ここでは、SUSE Linux Enterprise Serverに付属しているすべての外部モジュールを記載しています。モジュールのドキュメントは、記載のディレクトリ内に存在します。

mod_apparmor

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

パッケージ名:apache2-mod_apparmor
詳細: Part V, “Confining Privileges with AppArmor
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/

37.4.6 コンパイル

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

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

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

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

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

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

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

tux > sudo cd /path/to/module/source
tux > sudo apxs2 -cia MODULE.c

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

37.5 CGIスクリプトの有効化

ApacheのCGI(コモンゲートウェイインタフェース)により、通常CGIスクリプトと呼ばれるプログラムまたはスクリプトを含んだ動的コンテンツを作成できます。CGIスクリプトは、どのプログラム言語でも作成できます。通常、PHPなどのスクリプト言語が使用されます。

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

警告
警告: CGIセキュリティ

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

37.5.1 Apacheの設定

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

例 37.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
 Require all granted4
</Directory>

1

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

2

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

3

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

4

Requireディレクティブは、デフォルトのアクセス状態を制御します。この場合、指定したディレクトリへのアクセスが無制限に許可されます。認証および権限の詳細については、http://httpd.apache.org/docs/2.4/howto/auth.htmlを参照してください。

37.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/www.example.com/cgi-bin/のいずれかにコピーし、「test.cgi」という名前を付けます。ファイルを編集して、#!/bin/shを最初の行に置きます。

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

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

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

CGIトラブルシューティング
  • 設定を変更した後、サーバを再ロードしましたか?していない場合は、systemctl reload apache2を使用して再ロードしてください。

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

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

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

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

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

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

37.6.1 SSL証明書の作成

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

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

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

ヒント
ヒント: 詳細情報

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

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

ca.crtのコピーは、ダウンロード用に/srv/www/htdocs/CA.crtにも配置されます。

重要
重要: テスト専用

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

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

イントラネットまたは定義されている一部のユーザグループ用にセキュアWebサーバをセットアップするときは、多くの場合、独自の認証局(CA)を通じて証明書に署名すれば十分です。Webブラウザは自己署名付き証明書を認識できないため、このようなサイトの訪問者にはこれは信頼できないサイトですという警告が表示されます。

重要
重要: 自己署名付き証明書

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

まず、証明書署名要求(CSR)を生成する必要があります。opensslと、証明書の書式としてPEMを使用します。このステップでは、パスフレーズを入力し、いくつかの質問に回答するよう求められます。入力したパスフレーズは後で必要になるため、覚えておいてください。

tux > sudo openssl req -new > new.cert.csr
Generating a 1024 bit RSA private key
..++++++
.........++++++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:1
Verifying - Enter PEM pass phrase:2
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:3
State or Province Name (full name) [Some-State]:4
Locality Name (eg, city) []:5
Organization Name (eg, company) [Internet Widgits Pty Ltd]:6
Organizational Unit Name (eg, section) []:7
Common Name (for example server FQDN, or YOUR name) []:8
Email Address []:9

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:10
An optional company name []:11

1

パスフレーズを入力し、

2

...もう一度入力します(パスフレーズを覚えてください)。

3

2文字の国コードを入力します(GBCZなど)。

4

住所のある都道府県の名前を入力します。

5

都市名を入力します(Pragueなど)。

6

勤務先の組織の名前を入力します。

7

組織部門を入力します。組織部門がない場合は空白のままにします。

8

サーバのドメイン名または自分の氏名を入力します。

9

勤務先の電子メールアドレスを入力します。

10

チャレンジパスワードは空白のままにします。入力した場合は、Apache Webサーバを再起動するたびにチャレンジパスワードを入力する必要があります。

11

オプションの会社名を入力するか、空白のままにします。

これで証明書を生成できます。もう一度opensslを使用します。証明書の形式はデフォルトのPEMです。

手順 37.3: 証明書を生成する
  1. 鍵の秘密部分をnew.cert.keyにエクスポートします。証明書署名要求(CSR)の作成時に入力したパスフレーズを入力するようプロンプトが表示されます。

    tux > sudo openssl rsa -in privkey.pem -out new.cert.key
  2. 署名要求に入力した情報に従って、証明書の公開部分を生成します。-daysオプションで、証明書が期限切れになるまでの期間を指定します。証明書を取り消すことも、期限切れになる前に置き換えることもできます。

    tux > sudo openssl x509 -in new.cert.csr -out new.cert.cert -req \
    -signkey new.cert.key -days 365
  3. 関連するディレクトリに証明書ファイルをコピーし、Apacheサーバが読み込めるようにします。秘密鍵/etc/apache2/ssl.key/server.keyを全ユーザに対して読み込み可能にせずに、公開PEM証明書を/etc/apache2/ssl.crt/server.crt全ユーザに対して読み込み可能にします。

    tux > sudo cp new.cert.cert /etc/apache2/ssl.crt/server.crt
    tux > sudo cp new.cert.key /etc/apache2/ssl.key/server.key
ヒント
ヒント: パブリック証明書の場所

最後のステップとして、パブリック証明書ファイルを/etc/apache2/ssl.crt/server.crtからユーザがアクセスできる場所にコピーして、Webブラウザの、既知の信頼されたCAのリストにそのファイルを組み込めるようにします。コピーしない場合、ブラウザは、この証明書が不明な認証局から発行されたものであると見なします。

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

証明書に署名する公式の認証局は、多数存在します。証明書は、信用のあるサードパーティによって署名されるため、完全に信用できます。 通常、公式に運営されているセキュアWebサーバには、公式に署名された証明書があります。最もよく使用されている認証局のリストについては、https://en.wikipedia.org/wiki/Certificate_authority#Providersを参照してください。

公式に署名された証明書を要求するとき、CAに証明書を送信しません。代わりに、CSR (Certificate Signing Request)を発行します。CSRを作成するには、次のコマンドを入力します。

tux > openssl req -new -newkey rsa:2048 -nodes -keyout newkey.pem -out newreq.pem

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

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

37.6.2 SSLサポートのあるApacheの設定

Webサーバ側のTLS/SSL要求のデフォルトのポートは、443です。ポート80での通常のApacheリスニングと、ポート443でのTLS/SSL対応のApacheリスニングとの間に競合は発生しません。実際、HTTPとHTTPSは同じApacheインスタンスで実行できます。通常、ポート80とポート443への要求はそれぞれ別の仮想ホストが処理し、別の仮想サーバに送られます。

重要
重要: ファイアウォール設定

ポート443でSSL対応のApacheのファイアウォールを開くことを忘れないでください。これは、Section 23.4.3, “Configuring the Firewall on the Command Line”で説明されているようにfirewalldを使用して行うことができます。

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

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

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

  • DocumentRoot

  • ServerName

  • ServerAdmin

  • ErrorLog

  • TransferLog

37.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で使用できるようにするには、37.2.2.1.1項 「名前ベースの仮想ホスト」で説明しているようにサーバを設定します(ただし、SSLでは、ポート80ではなく、ポート443を使用)。

重要
重要: SNIブラウザのサポート

SNIは、クライアント側でもサポートされる必要があります。ただし、SNIは、一部の旧式のブラウザを除き、ほとんどのブラウザでサポートされています。詳細については、https://en.wikipedia.org/wiki/Server_Name_Indication#Supportを参照してください。

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

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

37.7 複数のApacheインスタンスを同じサーバで実行

SUSE® Linux Enterprise Server 12 SP1では、複数のApacheインスタンスを同じサーバで実行できます。これは、複数の仮想ホストを実行(37.2.2.1項 「仮想ホスト設定」を参照)するよりもいくつかの利点があります。

  • 仮想ホストを無効にする必要がある場合、Webサーバ設定を変更してから、Webサーバを再始動し、変更が適用されるようにする必要があります。

  • 問題のある仮想ホストが1つの場合でも、すべてのWebサーバを再始動しなければなりません。

通常どおり、デフォルトのApacheインスタンスを実行できます。

tux > sudo systemctl start apache2

デフォルトの/etc/sysconfig/apache2ファイルを読み取ります。このファイルが存在しない場合、または存在しても、APACHE_HTTPD_CONF変数が設定されていない場合、/etc/apache2/httpd.confを読み取ります。

別のApacheインスタンスを有効にするために、以下を実行します。

tux > sudo systemctl start apache2@INSTANCE_NAME

次に例を示します。

tux > sudo systemctl start apache2@example_web.org

デフォルトでは、インスタンスはメイン設定ファイルとして/etc/apache2@example_web.org/httpd.confを使用します。このファイルは、/etc/sysconfig/apache2@example_web.orgAPACHE_HTTPD_CONFを設定することにより上書きできます。

Apacheの追加インスタンスの設定例を次に示します。すべてのコマンドをrootユーザで実行する必要があることに注意してください。

手順 37.4: Apacheの追加インスタンスの設定
  1. /etc/sysconfig/apache2に基づいて、新しい設定ファイルを作成します(/etc/sysconfig/apache2@example_web.orgなど)。

    tux > sudo cp /etc/sysconfig/apache2 /etc/sysconfig/apache2@example_web.org
  2. /etc/sysconfig/apache2@example_web.orgというファイルを編集して、次を含んでいる行を変更します。

    APACHE_HTTPD_CONF

    変更後:

    APACHE_HTTPD_CONF="/etc/apache2/httpd@example_web.org.conf"
  3. /etc/apache2/httpd@example_web.org.confというファイルを/etc/apache2/httpd.confに基づいて作成します。

    tux > sudo cp /etc/apache2/httpd.conf /etc/apache2/httpd@example_web.org.conf
  4. /etc/apache2/httpd@example_web.org.confを編集して変更します。

    Include /etc/apache2/listen.conf

    変更後:

    Include /etc/apache2/listen@example_web.org.conf

    すべてのディレクティブを確認し、必要に応じて変更します。多くの場合、

    Include /etc/apache2/global.conf

    各インスタンスに対して変更するか、新しいglobal@example_web.org.confを作成することになるでしょう。変更することをお勧めします。

    ErrorLog /var/log/apache2/error_log

    変更後:

    ErrorLog /var/log/apache2/error@example_web.org_log

    インスタンスごとに個別のログを保有するためです。

  5. /etc/apache2/listen@example_web.org.conf/etc/apache2/listen.confに基づいて作成します。

    tux > sudo cp /etc/apache2/listen.conf /etc/apache2/listen@example_web.org.conf
  6. /etc/apache2/listen@example_web.org.confを編集して、

    Listen 80

    新しいインスタンスを実行したいポート番号(82など)に変更します。

    Listen 82

    新しいApacheインスタンスをセキュアなプロトコルで実行するには(37.6項 「SSLをサポートするセキュアWebサーバのセットアップ」を参照)、次の行を変更します。

    Listen 443

    変更後(例):

    Listen 445
  7. 新しいApacheインスタンスを開始します。

    tux > sudo systemctl start apache2@example_web.org
  8. Webブラウザにhttp://server_name:82を参照させて、サーバが稼働していることを確認します。前に新規インスタンス用のエラーログファイル名を変更していた場合、そのファイルを確認できます。

    tux > sudo tail -f /var/log/apache2/error@example_web.org_log

複数のApacheインスタンスを同じサーバ上に設定する場合に考慮するべきいくつかのポイントを示します。

  • /etc/sysconfig/apache2@INSTANCE_NAMEというファイルには、モジュールのロードやMPM設定などの、/etc/sysconfig/apache2と同じ変数を組み込むことができます。

  • デフォルトのApacheインスタンスが、他のインスタンスの実行中に実行されている必要はありません。

  • Apacheヘルパーユーティリティである、a2enmoda2dismodおよびapachectlは、HTTPD_INSTANCE環境変数で別途指定されていない限り、デフォルトのApacheインスタンスで動作します。次の例

    tux > sudo export HTTPD_INSTANCE=example_web.org
    tux > sudo a2enmod access_compat
    tux > sudo a2enmod status
    tux > sudo apachectl start

    では、access_compatおよびstatusモジュールを/etc/sysconfig/apache2@example_web.orgAPACHE_MODULE変数に追加してから、example_web.orgインスタンスを始動します。

37.8 セキュリティ問題の回避

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

37.8.1 最新版のソフトウェア

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

37.8.2 DocumentRootの許可

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

37.8.3 ファイルシステムアクセス

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

37.8.4 CGIスクリプト

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

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

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

37.8.5 ユーザディレクトリ

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

37.9 トラブルシューティング

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

apache2.serviceサブコマンドの出力:

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

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

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

ヒント
ヒント: 簡単なテスト

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

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

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

これまでに説明したいずれの方法でもエラーを特定できない場合には、http://httpd.apache.org/bug_report.htmlの、オンラインのApacheバグデータベースをチェックしてください。加えて、http://httpd.apache.org/userslist.htmlのメーリングリストで、Apacheのユーザコミュニティに参加することができます。

37.10 詳細情報

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

37.10.1 Apache 2.4

Apache 2.4の新機能のリストについては、http://httpd.apache.org/docs/2.4/new_features_2_4.htmlを参照してください。バージョン2.2から2.4へのアップグレード情報もhttp://httpd.apache.org/docs-2.4/upgrading.htmlで参照できます。

37.10.2 Apacheモジュール

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

37.10.3 開発

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

Apache開発情報

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

Apache開発者ドキュメント

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

37.10.4 その他の情報源

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