42 Apache HTTPサーバ #
https://www.netcraft.com/とhttps://w3techs.com/の調査によると、Apache HTTP Server (Apache)は、世界で最も人気のあるWebサーバの1つです。ApacheはApache Software Foundation (https://www.apache.org/)により開発され、ほとんどのオペレーティングシステムに対応しています。SUSE® Linux Enterprise Serverには、Apacheバージョン2.4が含まれています。この章では、Apacheをインストール、設定、および操作する方法について説明します。また、SSLなどの追加モジュールの使用方法、およびApacheのトラブルシューティング方法についても説明します。
42.1 クイックスタート #
   このセクションは、Apacheをすばやく設定し、起動するのに役立ちます。Apacheをインストールして設定するには、rootユーザでなければなりません。
  
42.1.1 要件 #
Apache Webサーバをセットアップする前に、次の要件が満たされていることを確認してください。
- マシンのネットワークが適切に設定されているか。この項目の詳細については、第23章 「ネットワークの基礎」を参照してください。 
- マシンの正確なシステム時間は、タイムサーバとの同期により維持されます。これは、HTTPプロトコルの一部が正確な時間に依存するために必要です。この項目の詳細については、第38章 「NTPによる時刻の同期」を参照してください。 
- 最新のセキュリティアップデートがインストールされています。不明な場合は、YaSTオンラインアップデートを実行します。 
- ファイアウォールで、デフォルトのWebサーバポート( - 80)を開きます。このために、公開ゾーンのサービス- httpを許可するように- firewalldを設定します。詳細についてはSection 23.4.3, “Configuring the firewall on the command line”を参照してください。
42.1.2 インストール #
SUSE Linux Enterprise ServerのApacheは、デフォルトではインストールされません。「そのまますぐに」実行できる標準の事前定義された設定を使用してインストールするには、次の手順を使用します。
- YaSTを起動して、 › の順に選択します。 
- › の順に選択して、を選択します。 
- 依存関係のあるパッケージのインストールを確認して、インストールプロセスを完了します。 
42.1.3 開始 #
Apacheは、ブート時に自動的に起動することも、手動で起動することもできます。
    Apacheをターゲットmulti-user.targetおよびgraphical.targetでブート時に自動的に起動するには、次のコマンドを実行します。
   
>sudosystemctl enable apache2.service
SUSE Linux Enterprise Serverのsystemdターゲットの詳細、およびYaSTの詳細については、19.4項 「YaSTを使用したサービスの管理」を参照してください。
   
    シェルを使用してApacheを手動で起動するには、systemctl start
    apache2.serviceコマンドを実行します。
   
Apacheの起動時にエラーメッセージが表示されなければ、通常、このWeb serverが実行されています。これをテストするには:
- ブラウザを起動し、http://localhost/を開きます。 - Apacheが立ち上がって稼働している場合は、「It works!」で始まるテストページが表示されます。 
- このページが表示されない場合は、42.9項 「トラブルシューティング」を参照してください。 
Webサーバの起動後は、ドキュメントを追加、必要に応じて設定を調整、およびモジュールをインストールして機能を追加することができます。
42.2 Apacheの設定 #
SUSE Linux Enterprise Serverには、2つの設定オプションがあります。
手動で設定を行えば細かい点まで調整できますが、YaSTのGUIほど便利ではありません。
    設定の変更は、ほとんどの場合、Apacheをリロードまたは再起動しないと有効になりません。systemctl reload
    apache2.serviceコマンドを使用してApacheを手動で再ロードするか、42.3項 「Apacheの起動および停止」に示されている再起動オプションの1つを使用します。
   
YaSTでApatcheを設定する場合、これを自動化するには、42.2.3.2項 「HTTPサーバの設定」で説明されているように、をに設定します。
42.2.1 Apache設定ファイル #
このセクションでは、Apache設定ファイルの概要を示します。環境設定にYaSTを使用する場合は、これらのファイルを操作する必要はありません。ただし、後で手動設定に切り替える場合に、この情報が役立つことがあります。
Apache設定ファイルは、次の2つの場所にあります。
42.2.1.1 /etc/sysconfig/apache2 #
/etc/sysconfig/apache2は、ロードするモジュール、インクルードする付加的な設定ファイル、サーバを起動するときのフラグ、コマンドラインに追加するべきフラグなど、Apacheのグローバル設定を制御します。このファイルの各設定オプションについては、詳細なドキュメントが存在するので、ここでは説明しません。一般的な目的のWebサーバの場合には、/etc/sysconfig/apache2の内容を設定するだけで十分でしょう。
    
42.2.1.2 /etc/apache2/ #
/etc/apache2/には、Apacheのすべての設定ファイルが含まれます。ここでは、各ファイルの目的について説明します。各ファイルには、複数の設定オプションが含まれます(ディレクティブとも呼ばれる)。これらのファイルの各設定オプションについては、詳細なドキュメントがあるので、ここでは説明しません。
    
Apache設定ファイルは、次のように編成されます。
/etc/apache2/
     |
     |- charset.conv
     |- conf.d/
     |   |
     |   |- *.conf
     |
     |- default-server.conf
     |- errors.conf
     |- global.conf
     |- httpd.conf
     |- listen.conf
     |- loadmodule.conf
     |- magic
     |- mime.types
     |- mod_*.conf
     |- protocols.conf
     |- server-tuning.conf
     |- ssl-global.conf
     |- ssl.*
     |- sysconfig.d
     |   |
     |   |- global.conf
     |   |- include.conf
     |   |- loadmodule.conf . .
     |
     |- uid.conf
     |- vhosts.d
     |   |- *.conf- charset.conv
- 各言語に使用する文字セットを指定します。このファイルは、編集しないでください。 
- conf.d/*.conf
- 他のモジュールによって追加される設定ファイル。これらの設定ファイルは、必要に応じて仮想ホスト設定に含めることができます。例については、 - vhosts.d/vhost.templateを参照してください。設定ファイルを仮想ホスト設定に含めることにより、仮想ホストごとに別のモジュールセットを指定できます。
- default-server.conf
- すべての仮想ホストに対応するグローバル設定で、それぞれ適切なデフォルト値が指定されています。デフォルト値を変更する代わりに、仮想ホスト設定で上書きします。 
- errors.conf
- Apacheによるエラーの対処方法を定義します。すべての仮想ホストに対してこれらのメッセージをカスタマイズするには、このファイルを編集します。カスタマイズしない場合は、仮想ホスト設定内のこれらのディレクティブを上書きします。 
- global.conf
- アクセスパス、エラーログ、ログのレベルなど、メインWebサーバプロセスの一般的な設定。 
- httpd.conf
- メインのApacheサーバ設定ファイル。このファイルは変更しません。インクルード文およびグローバル設定が含まれています。ここに記載されている設定ファイルのグローバル設定を上書きします。仮想ホスト設定内のホスト固有の設定(ドキュメントルートなど)を変更します。 
- listen.conf
- Apacheを特定のIPアドレスおよびポートにバインドします。名前ベースの仮想ホスティングもこのファイルで設定します。詳細については、42.2.2.1.1項 「名前ベースの仮想ホスト」を参照してください。 
- magic
- Apacheが自動的に不明なファイルのMIMEタイプを判別できるようにするmime_magicモジュール用のデータ。このファイルは、変更しないでください。 
- mime.types
- システムで認識されるMIMEタイプ( - /etc/mime.typesへのリンク)。このファイルは、編集しないでください。このリスト以外にMIMEタイプを追加する必要がある場合は、- mod_mime-defaults.confに追加します。
- mod_*.conf
- デフォルトでインストールされるモジュール用の設定ファイル。詳細については、42.4項 「モジュールのインストール、有効化、および設定」を参照してください。オプションのモジュール用の設定ファイルは、 - conf.dディレクトリ内にあります。
- protocols.conf
- HTTP2接続を介してページを提供するための設定ディレクティブ。 
- server-tuning.conf
- 各MPMの設定ディレクティブ(42.4.4項 「マルチプロセシングモジュール」を参照)、およびApacheのパフォーマンスを制御する一般的な設定オプションが含まれています。このファイルを変更する場合は、Webサーバを適切にテストしてください。 
- ssl-global.confおよび- ssl.*
- グローバルSSL設定およびSSL証明書データ。詳細については、42.6項 「SSLをサポートするセキュアWebサーバのセットアップ」を参照してください。 
- sysconfig.d/*.conf
- /etc/sysconfig/apache2から自動的に生成される設定ファイル。これらのファイルは、いずれも変更しません。その代わりに、- /etc/sysconfig/apache2を編集します。このディレクトリに、他の設定ファイルを格納しないでください。
- uid.conf
- Apacheを実行する際に使用するユーザおよびグループIDを指定します。このファイルは、変更しないでください。 
- vhosts.d/*.conf
- 仮想ホストの設定はこのファイルにあるはずです。このディレクトリには、SSLの有無にかかわらず、仮想ホストのテンプレートファイルが格納されます。このディレクトリ内の - .confで終わるファイルは、すべて自動的にApache設定に含まれます。詳細については、42.2.2.1項 「仮想ホスト設定」を参照してください。
42.2.2 Apacheを手動で設定する #
    Apacheを手動設定するには、rootユーザとしてプレーンテキストの設定ファイルを編集する必要があります。
   
42.2.2.1 仮想ホスト設定 #
仮想ホストという用語は、同じ物理マシンから複数のURI (universal resource identifiers)のサービスを行えるApacheの機能を指しています。これは、www.example.comとwww.example.netのような複数のドメインを、1台の物理マシン上の単一のWebサーバで保持できることを意味しています。
管理の手間(1つのWebサーバを維持すればよい)とハードウェアの費用(ドメインごとの専用のサーバを必要としない)を省くために仮想ホストを使うことは、よく行われています。仮想ホストは名前ベース、IPベース、またはポートベースのいずれかになります。
     すべての既存仮想ホストをリストするには、コマンドapache2ctl -Sを使用します。デフォルトサーバおよびすべての仮想ホストが、それらのIPアドレスおよびリスニングポートとともにリストに表示されます。リストには、各仮想ホストの設定ファイル内での位置を示すエントリも含まれています。
    
     仮想ホストを設定するには、YaSTを使用するか(42.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の設定ディレクティブの詳細については、https://httpd.apache.org/docs/2.4/mod/quickreference.htmlを参照してください。
    
42.2.2.1.1 名前ベースの仮想ホスト #
      名前ベースの仮想ホストでは、1つのIPアドレスで複数のWebサイトを運用することができます。Apacheは、クライアントから送られたHTTPヘッダのホストフィールドを使用して、仮想ホスト宣言の1つの、一致するServerNameエントリに要求を接続します。一致するServerNameが見つからない場合には、指定されている最初の仮想ホストがデフォルトとして用いられます。
     
      最初のステップは、サービスを提供する、名前ベースの異なるホストそれぞれに対して<VirtualHost>ブロックを作成することです。各<VirtualHost>ブロック内には、少なくとも、サービスの提供対象ホストを指定するServerNameディレクティブと、ファイルシステム内でそのホストのコンテンツが存在する場所を示すDocumentRootディレクティブが必要です。
     
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アドレスを使用する場合には、アドレスを角括弧の中に記述することが必要です。
VirtualHostディレクティブ #<VirtualHost 192.168.3.100:80> ... </VirtualHost> <VirtualHost 192.168.3.100> ... </VirtualHost> <VirtualHost *:80> ... </VirtualHost> <VirtualHost *> ... </VirtualHost> <VirtualHost [2002:c0a8:364::]> ... </VirtualHost>
42.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ブロックが個別に必要です。
     
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)内のディレクティブが適用されます。
     
42.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モジュールでサポートされています。
      
完全な設定ファイルは次のようになります。
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"> Require all granted </Directory> </VirtualHost>
42.2.3 ApacheをYaSTで設定する #
YaSTを使用してWebサーバを設定するには、YaSTを起動して、 › の順に選択します。このモジュールを初めて起動するときに、が起動して、サーバ管理に関していくつかの基本的な事項を決定するように要求されます。このウィザードの完了後、のモジュールを呼び出すたびに、ダイアログが起動します。詳細については、42.2.3.2項 「HTTPサーバの設定」を参照してください。
42.2.3.1 HTTPサーバウィザード #
HTTP Server Wizardには、5つのステップがあります。ダイアログの最後のステップでは、上級者用の設定モードに入って、さらに詳細に設定できます。
42.2.3.1.1 ネットワークデバイスの選択 #
    ここでは、Apacheが着信リクエストをリスンするために使用する、ネットワークインタフェースとポートを指定します。既存のネットワークインタフェースとそれらに対応するIPアドレスから、任意のものを組み合わせて選択できます。他のサービスによって予約されていないものであれば、3つの範囲(ウェルノウンポート、レジスタードポート、ダイナミックまたはプライベートポート)のうちのどのポートでも使用できます。デフォルトの設定では、ポート80ですべてのネットワークインタフェース(IPアドレス)をリスンします。
   
ファイアウォールでWebサーバがリスンするポートを開くには、をクリックします。これは、LAN、WAN、または公共のインターネットなど、ネットワーク上でWebサーバを利用可能にする場合には必須です。外部からのWebサーバへのアクセスが不要なテスト段階でのみ、ポートを閉じておくことは有用です。複数のネットワークインタフェースが存在する場合は、をクリックして、ポートを開くインタフェースを指定します。
をクリックして設定を続けます。
42.2.3.1.2 モジュール #
設定オプションによって、Webサーバでサポートされるスクリプト言語の有効化または無効化を設定できます。他のモジュールの有効化または無効化の詳細については、42.2.3.2.2項 「サーバモジュール」を参照してください。をクリックして次のダイアログに進みます。
42.2.3.1.3 デフォルトホスト #
このオプションは、デフォルトのWebサーバに関連しています。42.2.2.1項 「仮想ホスト設定」で説明されているように、Apacheは、1つの物理的マシンで複数の仮想ホストに使用することができます。設定ファイルで最初に宣言された仮想ホストは通常、「デフォルトのホスト」と呼ばれます。各仮想ホストは、デフォルトホストの設定を継承します。
ホストの設定(「ディレクティブ」)を編集するには、テーブル内の適切なエントリを選択して、をクリックします。新しいディレクティブを追加するには、をクリックします。ディレクティブを削除するには、そのアカウントを選択し、をクリックします。
これはサーバのデフォルト設定のリストです。
- Document Root
- Apacheがこのホストにファイルを送るときに使用されるディレクトリパス。 - /srv/www/htdocsはデフォルトの場所です。
- Alias
- Aliasディレクティブを使えば、URLを物理的なファイルシステムの場所にマップすることができます。このことは、パスのURLエイリアスを行えば、ファイルシステムの- Document Rootの外にあるパスでもアクセスできることを意味しています。- デフォルトの SUSE Linux Enterprise Server では - 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
- インクルードにより、他の設定ファイルを指定できます。2つの - Includeディレクティブが設定済みです。- /etc/apache2/conf.d/は外部モジュールに付属する設定ファイルを保持するディレクトリです。このディレクティブにより、このディレクトリ内の- .confで終わるすべてのファイルが対象となります。もう1つのディレクティブ- /etc/apache2/conf.d/apache2-manual.confでは、- apache2-manualという設定ファイルが対象となります。
- Server Name
- クライアントがWebサーバとコンタクトするために使うデフォルトのURLを指定します。 - http://FQDN/にあるWebサーバへの接続用FQDN(完全修飾ドメイン名)か、またはそのIPアドレスを使用します。ここでは任意の名前は選択できません。サーバはこの名前で「認識」されなければなりません。
- Server Administrator E-Mail
- サーバ管理者の電子メールアドレス。このアドレスは、Apacheが作成するエラーページなどに表示されます。 
のステップを完了したら、をクリックして、設定を続けます。
42.2.3.1.4 仮想ホスト #
このステップでは、ウィザードはすでに設定されている仮想ホストのリストを表示します(42.2.2.1項 「仮想ホスト設定」を参照)。YaST HTTPウィザードを起動する前に手動で変更を行っていなければ、仮想ホストは表示されません。
    ホストを追加するには、をクリックし、、(DocumentRoot)、などホストに関する基本情報を入力するためのダイアログを開きます。は、ホストの識別方法を決めるために使用されます(名前ベースまたはIPベース)。で名前またはIPアドレスを指定します。
   
をクリックして、仮想ホスト設定ダイアログの2番目の部分に進みます。
    仮想ホスト設定のパート2では、CGIスクリプトを有効にするかどうか、およびこれらのスクリプトを使用するディレクトリを指定できます。また、SSLも有効にできます。SSLを有効化する場合は、証明書のパスも指定する必要があります。SSLおよび証明書の詳細については、42.6.2項 「SSLサポートのあるApacheの設定」を参照してください。オプションを使用して、クライアントがディレクトリを要求するときに表示するファイルを指定できます(デフォルトではindex.html)。ファイルを変更するには、1つ以上のファイル名(スペースで区切る)を追加します。で、ユーザのパブリックディレクトリ(~USER/public_html/)のコンテンツを、サーバのhttp://www.example.com/~USERからアクセスできるようにします。
   
仮想ホストを自由に追加することはできません。名前ベースの仮想ホストを使用する場合は、各ホスト名がネットワーク内で解決されている必要があります。IPベースの仮想ホストを使用する場合は、使用可能な各IPアドレスに対し1つのホストのみを割り当てることができます。
42.2.3.1.5 まとめ #
これはウィザードの最後のステップです。ここでは、Apacheサーバをいつ、どのようにして起動するか(ブート時に起動するか、手動で起動するか)を指定します。また、ここまで行った設定の簡単な要約を確認します。この設定でよければ、をクリックして、設定を完了します。変更するには、希望のダイアログまでをクリックして戻ります。をクリックして、42.2.3.2項 「HTTPサーバの設定」で説明しているダイアログを開きます。
42.2.3.2 HTTPサーバの設定 #
ダイアログでは、ウィザード(Webサーバを最初に設定する場合にのみ実行)よりも詳細に設定を調整できます。このダイアログは、次で説明する4つのタブで構成されています。ここで変更する設定オプションは、すぐには適用されません。変更を適用するには、常にをクリックして変更を確認する必要があります。をクリックすると、設定モジュールを終了し、変更が破棄されます。
42.2.3.2.1 待ち受けポートおよびアドレス #
で、Apacheを実行するか()、または停止するか()を選択します。で、サーバが使用可能なアドレスおよびポートについて、、またはを選択します。デフォルトでは、ポート80ですべてのインタフェースをリスンします。常ににチェックマークを入れておく必要があります。そうしないと、外部からWebサーバにアクセスできなくなります。外部からのWebサーバへのアクセスが不要なテスト段階でのみ、ポートを閉じておくことは有用です。複数のネットワークインタフェースが存在する場合は、をクリックして、ポートを開くインタフェースを指定します。
   
で、アクセスログファイルまたはエラーログファイルのいずれかを確認します。これは、設定をテストする場合に便利です。ログファイルは別個のウィンドウに表示されますが、そこから、Webサーバを再起動または再ロードすることも可能です。詳細については、42.3項 「Apacheの起動および停止」を参照してください。これらのコマンドはすぐに有効になり、ログメッセージもすぐに表示されます。
42.2.3.2.2 サーバモジュール #
をクリックして、Apache2モジュールのステータス(有効または無効)を変更できます。すでにインストールされているがリストに含まれていない新規モジュールを追加するには、をクリックします。モジュールの詳細については、42.4項 「モジュールのインストール、有効化、および設定」を参照してください。
42.2.3.2.3 メインホストまたはホスト #
これらのダイアログは、すでに説明したものと同じです。詳細については、42.2.3.1.3項 「デフォルトホスト」および42.2.3.1.4項 「仮想ホスト」を参照してください。
42.3 Apacheの起動および停止 #
42.2.3項 「ApacheをYaSTで設定する」の説明のようにYaSTを設定すると、Apacheは、ブート時にmulti-user.targetおよびgraphical.targetで起動されます。YaSTの、あるいはsystemctlコマンドラインツール(systemctl
   enableまたはsystemctl disable)を使用して、この動作を変更できます。
  
   稼働中のシステムでApacheを起動、停止、または操作するには、次の説明に従ってsystemctlまたはapachectlコマンドを使用します。
  
systemctlコマンドの一般的な情報については、19.2.1項 「稼働中のシステムでのサービスの管理」を参照してください。
  
- systemctl status apache2.service
- Apacheが起動したかどうかをチェックします。 
- systemctl start apache2.service
- Apacheが実行中でない場合に起動します。 
- systemctl stop apache2.service
- 親プロセスを終了して、Apacheを終了します。 
- systemctl restart apache2.service
- Apacheをいったん停止し、再起動します。Apacheが実行中でなかった場合は、新規に起動します。 
- systemctl try-restart apache2.service
- Apacheがすでに実行中の場合にのみ、停止して再起動します。 
- systemctl reload apache2.service
- フォークしたすべてのApacheプロセスに、シャットダウンする前に要求を完了させて、それからWebサーバを停止します。1つのプロセスが終了するたびに、新たに開始したプロセスで置き換えられるので、最終的にはApacheの完全な「再起動」になります。 ヒント: 運用環境でApacheを再起動する- このコマンドを使用すると、接続を切らずにApache設定の変更を有効化することができます。 
- systemctl stop apache2.service
- 既存の要求を完了できるように、 - GracefulShutdownTimeoutで設定された一定の時間の経過後にWebサーバを停止します。
- apachectl configtest
- 実行中のWebサーバに影響することなく、設定ファイルの構文をチェックします。このチェックは、サーバが起動、再ロード、または再起動されるたびに強制されるので、通常は、明示的に実行する必要はありません(ただし、設定エラーが検出されると、ウェブサーバの起動/再ロード/再起動は行われません)。 
- apachectl statusおよび- apachectl fullstatus
- それぞれ、簡単または完全ステータス画面を表示します。モジュール - mod_statusが有効で、テキストベースのブラウザ(- linksや- w3mなど)がインストールされている必要があります。それに加えて、- STATUSが- /etc/sysconfig/apache2ファイルの- APACHE_SERVER_FLAGSに追加されている必要があります。
コマンドにその他のフラグを指定すると、これらのフラグはWebサーバを通過します。
42.4 モジュールのインストール、有効化、および設定 #
   Apacheソフトウェアは、モジュール形式で構築されており、特定の主要タスクを除いてはモジュールごとに処理されます。この方法で、HTTPさえもモジュールによって処理されています(http_core)。
  
Apacheのモジュールは、ビルド時にApacheのバイナリに組み込むことも、実行時に動的にロードすることもできます。動的なモジュールのロード方法の詳細については、42.4.2項 「有効化と無効化」を参照してください。
Apacheモジュールは、次のカテゴリに分類されています。
- 基本モジュール
- 基本モジュールは、デフォルトで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サーバソフトウェアの中核となっています。 
42.4.1 モジュールのインストール #
42.1.2項 「インストール」で説明されているデフォルトインストールを行った場合は、すべての基本モジュールと拡張モジュール、Prefork MPM (マルチプロセシングモジュール)、および外部モジュールのmod_pythonがすでにインストールされています。
   
    YaSTを起動し、 › の順に選択して、その他の外部モジュールをインストールできます。 › の順に選択し、apacheを検索します。他のパッケージの中で、使用可能な外部Apacheモジュールがすべて検索結果のリストに表示されます。
   
42.4.2 有効化と無効化 #
特定モジュールの有効化/無効化は、手動で行うか、YaSTを使用します。YaSTでは、42.2.3.1項 「HTTPサーバウィザード」で説明されているモジュール設定を使用して、スクリプト言語モジュール(PHP 8およびPython)を有効または無効にする必要があります。その他のすべてのモジュールは、42.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を参照してください。
    
42.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)と組み合わせる必要があります。- この項目の詳細は、https://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-openid-connect-implementations/を参照してください)。
- 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プロトコルの使用がサポートされています。- VirtualHostで- Protocols 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サーバとクライアント間の暗号化接続を有効化します。詳細については42.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ディレクティブを設定で指定する必要があります。このモジュールは、デフォルトで有効です。
42.4.4 マルチプロセシングモジュール #
SUSE Linux Enterprise Serverには、Apacheで使用するための2つの異なるマルチプロセッシングモジュール(MPM)が用意されています。
42.4.4.1 プリフォークMPM #
プリフォークMPMは、スレッド対応でない、プリフォークWebサーバを実装します。プリフォークMPMは、各要求を分離し、個々の子プロセスの分岐で処理するApacheバージョン 1.xと同じように、このWebサーバを動作させます。これにより、問題のあるリクエストが他のものに影響することがなくなるので、Webサーバのロックアップを避けられます。
プロセスベースのアプローチによって安定性がもたらされますが、プリフォークMPMは、もう一方のワーカーMPMよりも多くのシステムリソースを消費します。プリフォークMPMは、UnixベースのオペレーティングシステムでのデフォルトのMPMと見なされています。
このドキュメントでは、ApacheがプリフォークMPMで使用されていることを仮定しています。
42.4.4.2 ワーカーMPM #
ワーカーMPMは、マルチスレッド対応のWebサーバを提供します。スレッドとは、「軽い」形態のプロセスです。プロセスよりもスレッドが優れている点は、リソースの消費が少ないことです。ワーカーMPMは、子プロセスを分岐する代わりに、サーバプロセスでスレッドを使用することによってリクエストを処理します。プリフォークした子プロセスはマルチスレッドになります。このアプローチでは、プリフォークMPMの場合よりもシステムリソースの消費が少なくなるので、Apacheの性能が良くなります。
主な欠点としては、ワーカーMPMの安定性の問題が挙げられます。スレッドが壊れた場合、プロセスのすべてのスレッドに影響してしまいます。最悪の場合には、サーバがクラッシュすることがあります。特に、ApacheでCGI (Common Gateway Interface)を使用している場合、負荷が大きくなると、スレッドがシステムリソースと通信できなくなり、内部サーバエラーが生じることがあります。ワーカーMPMを使用すべきでない理由として、Apacheのモジュールのすべてがスレッドセーフになっているわけではないために、ワーカーMPMとともに使用するわけにはいかないということもあります。
      利用可能なPHPモジュールのすべてがスレッドセーフになっているわけではありません。ワーカーMPMとmod_phpは併用しないでください。
     
42.4.5 外部モジュール #
ここでは、SUSE Linux Enterprise Serverに付属しているすべての外部モジュールを記載しています。モジュールのドキュメントは、記載のディレクトリ内に存在します。
- mod_apparmor
- mod_php8などのモジュールが処理する個々のCGIスクリプトに対して、AppArmor制限を提供するために、Apacheにサポートを追加します。- パッケージ名: - apache2-mod_apparmor- 詳細情報: Part V, “Confining privileges with AppArmor” 
- mod_php8
- PHPは、サーバ側クロスプラットフォームのHTML埋め込みスクリプト言語です。 - パッケージ名: - apache2-mod_php8- 設定ファイル: - /etc/apache2/conf.d/php8.conf
- 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- マニュアル: https://github.com/owasp-modsecurity/ModSecurity 
42.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です。
次のコマンドで、ソースコードからモジュールをインストールして、アクティブにします。
>sudocd /path/to/module/source>sudoapxs2 -cia MODULE.c
    ここで、-cはモジュールをコンパイルし、-iはインストールし、-aは有効にします。apxs2のその他のオプションについては、apxs2(1)のマニュアルページを参照してください。
   
42.5 CGIスクリプトの有効化 #
ApacheのCGI(コモンゲートウェイインタフェース)により、プログラムまたはスクリプト(CGIスクリプト)を含んだ動的コンテンツを作成できます。CGIスクリプトは、どのプログラム言語でも作成できます。
   ApacheがCGIスクリプトで作成されたコンテンツを配信できるようにするには、mod_cgiを有効にする必要があります。mod_aliasも必要です。デフォルトでは、両モジュールとも有効化されています。モジュールの有効化の詳細については、42.4.2項 「有効化と無効化」を参照してください。
  
42.5.1 Apacheの設定 #
SUSE Linux Enterprise Serverでは、CGIスクリプトの実行は、/srv/www/cgi-bin/ディレクトリ内でのみ許可されています。この場所は、すでにCGIスクリプトを実行するように設定されています。仮想ホスト設定を作成しておらず(42.2.2.1項 「仮想ホスト設定」を参照してください)、ホスト固有のディレクトリにスクリプトを配置する場合は、このディレクトリのロックを解除し、設定する必要があります。
   
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>
| このディレクトリ内のすべてのファイルをCGIスクリプトとして処理するようにApacheに指示します。 | |
| CGIスクリプトの実行を有効化します。 | |
| .plおよび.cgiの拡張子が付いたファイルをCGIスクリプトとして処理するようにサーバに指示します。必要に応じて調整します。 | |
| 
 | 
42.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ユーザが所有している必要があります。詳細については、42.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」を参照してください。
   
42.5.3 CGIトラブルシューティング #
テストプログラムの出力の代わりにエラーメッセージが表示される場合は、次を確認します。
- 設定を変更した後、サーバを再ロードしましたか? していない場合は、 - systemctl reload apache2.serviceを使用して再ロードしてください。
- カスタム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を変更しなかった場合は該当しませんが、独自のプログラムを使用する場合は、必ず、プログラミングエラーがないかどうか確認してください。
42.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://となることです。
  
42.6.1 SSL証明書の作成 #
TLS/SSLをWebサーバで使用するには、SSL証明書を作成する必要があります。この証明書は、両者が互いに相手を識別できるように、Webサーバとクライアント間の認証に必要です。証明書の整合性を確認するには、すべてのユーザが信用する者によって署名される必要があります。
3種類の証明書を作成することができます。テストの目的のみの「テスト証明書」、あらかじめ定義されている信用する一部のユーザグループ用の自己署名付き証明書、および公的な独立団体のCA (Certificate Authority)によって署名される証明書です。
証明書の作成は、2つのステップで行うことができます。はじめに、CAの秘密鍵が生成され、次に、この鍵を使用してサーバ証明書が署名されます。
42.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にも配置されます。
    
テスト証明書は、実働システム上では使用しないでください。テストの目的のみで使用してください。
42.6.1.2 自己署名証明書の作成 #
イントラネットまたは定義されている一部のユーザグループ用にセキュアWebサーバをセットアップするときは、独自の認証局(CA)を通じて証明書に署名すれば十分です。Webブラウザは自己署名付き証明書を認識できないため、このようなサイトの訪問者には「これは信頼できないサイトです」という警告が表示されます。
自己署名付き証明書は、CA (Certificate Authority)として認識および信用するユーザによってアクセスされるWebサーバ上でのみ使用します。自己署名付き証明書をパブリックショップなどで使用することはお勧めしません。
     まず、証明書署名要求(CSR)を生成する必要があります。opensslと、証明書の書式としてPEMを使用します。このステップでは、パスフレーズを入力し、いくつかの質問に回答するよう求められます。入力したパスフレーズは後で必要になるため、覚えておいてください。
    
>sudoopenssl 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
| パスフレーズを入力します。 | |
| もう一度入力します(パスフレーズを覚えてください)。 | |
| 
       2文字の国コードを入力します( | |
| 住所のある都道府県の名前を入力します。 | |
| 
       都市名を入力します( | |
| 勤務先の組織の名前を入力します。 | |
| 組織部門を入力します。組織部門がない場合は空白のままにします。 | |
| サーバのドメイン名または自分の氏名を入力します。 | |
| 勤務先の電子メールアドレスを入力します。 | |
| チャレンジパスワードは空白のままにします。入力した場合は、Apache Webサーバを再起動するたびにチャレンジパスワードを入力する必要があります。 | |
| オプションの会社名を入力するか、空白のままにします。 | 
     これで証明書を生成できます。もう一度opensslを使用します。証明書の形式はデフォルトのPEMです。
    
- 鍵の秘密部分を - new.cert.keyにエクスポートします。証明書署名要求(CSR)の作成時に入力したパスフレーズを入力するようプロンプトが表示されます。- >- sudoopenssl rsa -in privkey.pem -out new.cert.key
- 署名要求に入力した情報に従って、証明書の公開部分を生成します。 - -daysオプションで、証明書が期限切れになるまでの期間を指定します。証明書を取り消すことも、期限切れになる前に置き換えることもできます。- >- sudoopenssl x509 -in new.cert.csr -out new.cert.cert -req \ -signkey new.cert.key -days 365
- 関連するディレクトリに証明書ファイルをコピーし、Apacheサーバが読み込めるようにします。秘密鍵 - /etc/apache2/ssl.key/server.keyを全ユーザに対して読み込み可能にせずに、公開PEM証明書- /etc/apache2/ssl.crt/server.crtを全ユーザに対して読み込み可能にします。- >- sudocp new.cert.cert /etc/apache2/ssl.crt/server.crt- >- sudocp new.cert.key /etc/apache2/ssl.key/server.key
      最後のステップとして、パブリック証明書ファイルを/etc/apache2/ssl.crt/server.crtからユーザがアクセスできる場所にコピーして、Webブラウザの、既知の信頼されたCAのリストにそのファイルを組み込めるようにします。コピーしない場合、ブラウザは、この証明書が不明な認証局から発行されたものであると見なします。
     
42.6.1.3 公式に署名された証明書の取得 #
証明書に署名する公式の認証局は、多数存在します。証明書は、信用のあるサードパーティによって署名されるため、完全に信用できます。 通常、公式に運営されているセキュアWebサーバには、公式に署名された証明書があります。最もよく使用されている認証局のリストについては、https://en.wikipedia.org/wiki/Certificate_authority#Providersを参照してください。
公式に署名された証明書を要求するとき、CAに証明書を送信しません。代わりに、CSR (Certificate Signing Request)を発行します。CSRを作成するには、次のコマンドを入力します。
> openssl req -new -newkey rsa:2048 -nodes -keyout newkey.pem -out newreq.pemその後、識別名の入力を求められます。このとき、国名または組織名など、いくつかの質問に答える必要があります。ここで入力した内容が証明書に含まれ、確認されるため、有効なデータを入力します。すべての質問に答える必要はありません。該当しない、または空白のままにする場合は、「.」を使用します。一般名は、CA自体の名前です。My company CAなど、意味のある名前を選択します。最後に、チャレンジパスワードおよび代替の企業名を入力する必要があります。
     スクリプトを呼び出したディレクトリでCSRを検索します。ファイルにnewreq.pemという名前を付けます。
    
42.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/apache2でAPACHE_TIMEOUTの値を増やし、Apacheの起動時にパスフレーズを入力するのに十分な時間が与えられるようにします。これらの変更を適用するため、サーバを再起動します。再ロードでは不十分です。
   
    仮想ホスト設定ディレクトリには、SSL固有ディレクティブが詳細に記述されている/etc/apache2/vhosts.d/vhost-ssl.templateテンプレートが含まれています。一般的な仮想ホスト設定については、42.2.2.1項 「仮想ホスト設定」を参照してください。
   
    まず、テンプレートを/etc/apache2/vhosts.d/MYSSL-HOST.confにコピーして編集します。次のディレクティブの値を調整するだけです。
   
- DocumentRoot
- ServerName
- ServerAdmin
- ErrorLog
- TransferLog
42.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で使用できるようにするには、42.2.2.1.1項 「名前ベースの仮想ホスト」で説明しているようにサーバを設定します(ただし、SSLでは、ポート80ではなく、ポート443を使用)。
    
SNIは、クライアント側でもサポートされる必要があります。ただし、SNIは、一部の旧式のブラウザを除き、ほとんどのブラウザでサポートされています。詳細については、https://en.wikipedia.org/wiki/Server_Name_Indication#Supportを参照してください。
      SNI非対応ブラウザの処理を設定するには、ディレクティブSSLStrictSNIVHostCheckを使用します。SNI非対応ブラウザは、サーバ設定でonに設定されると、すべての仮想ホストに関して拒否されます。VirtualHostディレクティブ内でonに設定されると、この特定のホストへのアクセスが拒否されます。
     
      サーバ設定でoffに設定されると、サーバはSNIサポートがないかのように動作します。SSL要求は、(ポート443に対して)定義された最初の仮想ホストによって処理されます。
     
42.7 複数のApacheインスタンスを同じサーバで実行 #
複数のApacheインスタンスを同じサーバで実行することには、複数の仮想ホストを実行するよりもいくつかのメリットがあります(42.2.2.1項 「仮想ホスト設定」を参照)。
- 仮想ホストを一定期間無効にする必要がある場合、Webサーバ設定を変更してから、Webサーバを再始動し、変更が適用されるようにする必要があります。 
- 問題のある仮想ホストが1つの場合でも、すべてのWebサーバを再始動しなければなりません。 
通常どおり、デフォルトのApacheインスタンスを実行できます。
>sudosystemctl start apache2.service
   デフォルトの/etc/sysconfig/apache2ファイルを読み取ります。このファイルが存在しない場合、または存在しても、APACHE_HTTPD_CONF変数が設定されていない場合、/etc/apache2/httpd.confを読み取ります。
  
別のApacheインスタンスを有効にするために、以下を実行します。
>sudosystemctl start apache2@INSTANCE_NAME
例:
>sudosystemctl start apache2@example_web.org
   デフォルトでは、インスタンスはメイン設定ファイルとして/etc/apache2@example_web.org/httpd.confを使用します。このファイルは、/etc/sysconfig/apache2@example_web.orgでAPACHE_HTTPD_CONFを設定することにより上書きできます。
  
   Apacheの追加インスタンスの設定例を次に示します。すべてのコマンドをrootユーザで実行する必要があります。
  
- /etc/sysconfig/apache2に基づいて、新しい設定ファイルを作成します(- /etc/sysconfig/apache2@example_web.orgなど)。- >- sudocp /etc/sysconfig/apache2 /etc/sysconfig/apache2@example_web.org
- /etc/sysconfig/apache2@example_web.orgというファイルを編集して、次を含んでいる行を変更します。- APACHE_HTTPD_CONF - 次のように変更してください。 - APACHE_HTTPD_CONF="/etc/apache2/httpd@example_web.org.conf" 
- /etc/apache2/httpd.confに基づいて- /etc/apache2/httpd@example_web.org.confというファイルを作成します。- >- sudocp /etc/apache2/httpd.conf /etc/apache2/httpd@example_web.org.conf
- /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 - インスタンスごとに個別のログを保有するためです。 
- /etc/apache2/listen.confに基づいて- /etc/apache2/listen@example_web.org.confを作成します。- >- sudocp /etc/apache2/listen.conf /etc/apache2/listen@example_web.org.conf
- /etc/apache2/listen@example_web.org.confを編集します。- Listen 80 - 新しいインスタンスを実行したいポート番号(82など)に変更します。 - Listen 82 - 新しいApacheインスタンスをセキュアなプロトコルで実行するには(42.6項 「SSLをサポートするセキュアWebサーバのセットアップ」を参照)、次の行を変更します。 - Listen 443 - 変更後(例): - Listen 445 
- 新しいApacheインスタンスを開始します。 - >- sudosystemctl start apache2@example_web.org
- Webブラウザに - http://server_name:82を参照させて、サーバが稼働していることを確認します。前に新規インスタンス用のエラーログファイル名を変更していた場合、そのファイルを確認できます。- >- sudotail -f /var/log/apache2/error@example_web.org_log
複数のApacheインスタンスを同じサーバ上に設定する場合に考慮するべきいくつかのポイントを示します。
- ファイル - /etc/sysconfig/apache2@INSTANCE_NAMEには、モジュールロードやMPM設定など、- /etc/sysconfig/apache2と同じ変数を含めることができます。
- デフォルトのApacheインスタンスが、他のインスタンスの実行中に実行されている必要はありません。 
- Apacheヘルパーユーティリティ - a2enmod、- a2dismod、- apachectlは、- HTTPD_INSTANCE環境変数で別途指定されていない限り、デフォルトのApacheインスタンスで動作します。次の例- >- sudoexport HTTPD_INSTANCE=example_web.org- >- sudoa2enmod access_compat- >- sudoa2enmod status- >- sudoapachectl start- では、 - access_compatと- statusモジュールを- /etc/sysconfig/apache2@example_web.orgの- APACHE_MODULES変数に追加してから、- example_web.orgインスタンスを起動します。
42.8 セキュリティ問題の回避 #
公共のインターネットに公開しているWebサーバについては、管理面での不断の努力が求められます。ソフトウェアと、偶然の設定ミスの両方に関連したセキュリティの問題が発生することは避けられません。それらに対処するためのいくつかのヒントを紹介します。
42.8.1 最新版のソフトウェア #
Apacheソフトウェアに脆弱性が見つかると、SUSEからセキュリティ上の勧告が出されます。それには、脆弱性を修正するための指示が含まれているので、可能な限り適用すべきです。SUSEセキュリティ通知は、次の場所から入手できます。
- メーリングリストのアーカイブ. https://lists.opensuse.org/archives/list/security-announce@lists.opensuse.org/ 
- セキュリティアナウンスメントのリスト. https://www.suse.com/support/update/ 
42.8.2 DocumentRootのパーミッション #
SUSE Linux Enterprise Serverのデフォルトでは、DocumentRootディレクトリの/srv/www/htdocsおよびCGIディレクトリの/srv/www/cgi-binの所有者はユーザおよびグループのrootになっています。これらのパーミッションは変更しないでください。ディレクトリにすべてのユーザが書き込み可能な場合、どのユーザもそれらのディレクトリにファイルを格納できます。その後これらのファイルは、Apacheによりwwwrunのパーミッションで実行されます。その結果、意図しない仕方で、ユーザがファイルシステムのリソースにアクセスできるようになる可能性があります。/srv/wwwのサブディレクトリを使用して仮想ホストのDocumentRootおよびCGIディレクトリを配置し、このユーザおよびグループのrootがディレクトリとファイルの所有者であることを確認します。
   
42.8.3 ファイルシステムアクセス #
    デフォルトでは、ファイルシステム全体へのアクセスは、/etc/apache2/httpd.confで否定されます。これらのディレクティブは決して上書きしないでください。ただし、Apacheが読み込む必要のあるすべてのディレクトリに対するアクセスは有効にしてください。詳細については、42.2.2.1.3項 「基本的な仮想ホスト設定」を参照してください。このためには、パスワードまたはシステム設定ファイルなど重要なファイルは外部から読み取ることができないことを確認します。
   
42.8.4 CGIスクリプト #
PHP、SSIまたは他のプログラミング言語によるインタラクティブなスクリプトは、任意のコマンドを実行できるため、一般的なセキュリティの問題が存在します。サーバから実行されるスクリプトは、サーバの管理者が信用するソースからのみインストールされる必要があります。一般的には、ユーザが独自のスクリプトを実行できる環境は適切ではありません。また、すべてのスクリプトに対してセキュリティ監査を行うこともお勧めします。
    スクリプトの管理をできるだけ簡単にするため、CGIスクリプトの実行をグローバルに許可するのではなく、通常、特定のディレクトリに制限されています。ディレクティブScriptAliasとOption
    ExecCGIが設定に使用されます。SUSE Linux Enterprise Serverのデフォルト設定では、任意の場所からのCGIスクリプトの実行は許可されていません。
   
すべてのCGIスクリプトは同一のユーザとして実行するため、異なるスクリプトが互いに競合する可能性があります。suEXECモジュールは、CGIスクリプトを別のユーザとグループで実行できるようにします。
42.8.5 ユーザディレクトリ #
    ユーザディレクトリを(mod_userdirまたはmod_rewriteを使用して)有効化する場合は、.htaccessファイルを許可しないことをお勧めします。これらのファイルは、ユーザによるセキュリティ設定の上書きを可能にするからです。AllowOverRideディレクティブを使用して、少なくとも、ユーザの操作を制限する必要があります。SUSE Linux Enterprise Serverでは、.htaccessファイルはデフォルトで有効化されていますが、ユーザはmod_userdirを使用するときにいずれのOptionディレクティブも上書きすることは許可されていません(/etc/apache2/mod_userdir.conf設定ファイルを参照してください)。
   
42.9 トラブルシューティング #
Apacheが起動しないと、Webページにアクセスすることはできず、ユーザがWebサーバに接続することもできないので、問題の原因を見つけ出すことは重要です。次に、エラーが説明されている場所とチェックすべき重要事項について説明します。
- apache2.serviceサブコマンドの出力:
- Webサーバをバイナリの - /usr/sbin/apache2ctlで起動/停止する代わりに、- systemctlコマンドを使用します(42.3項 「Apacheの起動および停止」を参照)。- systemctl status apache2.serviceは、エラーを詳細に説明し、設定エラーを修正するコツやヒントも提供します。
- ログファイルと冗長性レベル
- 致命的エラーと致命的でないエラーの両方について、Apacheログファイル(主に、デフォルトで - /var/log/apache2/error_logにあるエラーログファイル)をチェックしてください。さらに、ログファイルにさらに詳細な情報を記録することが必要な場合には、- LogLevelディレクティブで、記録されるメッセージの詳細を制御することができます。ヒント: 簡単なテスト- tail -F /var/log/apache2/MY_ERROR_LOGコマンドを使用して、Apacheログメッセージを確認します。続いて、- systemctl restart apache2.serviceを実行します。そして、ブラウザでの接続をもう一度試みて、出力を確認してください。
- ファイアウォールとポート
- よくある間違いで、サーバのファイアウォール設定でApache用のポートを開けていないことがあります。YaSTでApacheを設定する場合には、この点を扱うための別のオプションが存在します(42.2.3項 「ApacheをYaSTで設定する」を参照してください)。Apacheを手動で設定する場合は、YaSTのファイアウォールモジュールを使用してHTTPとHTTPS用のファイアウォールポートを開きます。 
これまでに説明したいずれの方法でもエラーを特定できない場合には、https://httpd.apache.org/bug_report.htmlの、オンラインのApacheバグデータベースをチェックしてください。加えて、https://httpd.apache.org/userslist.htmlのメーリングリストで、Apacheのユーザコミュニティに参加することができます。
42.10 詳細情報 #
apache2-docパッケージには、ローカルインストールおよび参照用に複数ローカライズされている完全なApacheマニュアルが含まれています。これは、デフォルトではインストールされません。このマニュアルを最もすばやくインストールするには、zypper in apache2-docコマンドを使用します。Apacheマニュアルは、インストールされると、http://localhost/manual/から表示できるようになります。また、Webのhttps://httpd.apache.org/docs/2.4/からもアクセスできます。SUSE固有の設定に関するヒントについては、/usr/share/doc/packages/apache2/README.*ディレクトリを参照してください。
  
42.10.1 Apache 2.4 #
Apache 2.4の新機能のリストについては、https://httpd.apache.org/docs/2.4/new_features_2_4.htmlを参照してください。バージョン2.2から2.4へのアップグレード情報もhttps://httpd.apache.org/docs/2.4/upgrading.htmlで参照できます。
42.10.2 Apache モジュール #
42.4.5項 「外部モジュール」で簡単に説明されている外部Apacheモジュールの詳細は、次の場所で入手できます。
- mod_apparmor
- mod_php8
- https://www.php.net/manual/en/install.unix.apache2.php - mod_php8設定に関する詳細情報は、コメントの多いメイン設定ファイル- /etc/php8/apache2/php.iniで入手できます。
- mod_python
- mod_security
42.10.3 開発 #
Apacheモジュールの開発、またはApache Webサーバプロジェクトへの参加に関する情報については、次を参照してください。
- Apache開発者情報
- Apache開発者ドキュメント
42.10.4 その他の情報源 #
SUSE Linux Enterprise ServerのApacheに固有な問題が発生した場合は、Technical Information Search (https://www.suse.com/support/)を参照してください。Apacheの沿革は、https://httpd.apache.org/ABOUT_APACHE.htmlで参照できます。このページでは、Apacheというサーバ名の由来についても説明しています。



