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
でブート時に自動的に起動するには、次のコマンドを実行します。
>
sudo
systemctl 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 モジュール #
42.2.3.2.2項 「サーバモジュール」を参照してください。 をクリックして次のダイアログに進みます。
設定オプションによって、Webサーバでサポートされるスクリプト言語の有効化または無効化を設定できます。他のモジュールの有効化または無効化の詳細については、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 待ち受けポートおよびアドレス #
80
ですべてのインタフェースをリスンします。常に にチェックマークを入れておく必要があります。そうしないと、外部からWebサーバにアクセスできなくなります。外部からのWebサーバへのアクセスが不要なテスト段階でのみ、ポートを閉じておくことは有用です。複数のネットワークインタフェースが存在する場合は、 をクリックして、ポートを開くインタフェースを指定します。
42.3項 「Apacheの起動および停止」を参照してください。これらのコマンドはすぐに有効になり、ログメッセージもすぐに表示されます。
で、アクセスログファイルまたはエラーログファイルのいずれかを確認します。これは、設定をテストする場合に便利です。ログファイルは別個のウィンドウに表示されますが、そこから、Webサーバを再起動または再ロードすることも可能です。詳細については、42.2.3.2.2 サーバモジュール #
42.4項 「モジュールのインストール、有効化、および設定」を参照してください。
をクリックして、Apache2モジュールのステータス(有効または無効)を変更できます。すでにインストールされているがリストに含まれていない新規モジュールを追加するには、 をクリックします。モジュールの詳細については、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
です。
次のコマンドで、ソースコードからモジュールをインストールして、アクティブにします。
>
sudo
cd /path/to/module/source>
sudo
apxs2 -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項 「有効化と無効化」を参照してください。
サーバがCGIスクリプトを実行できるようになると、潜在的なセキュリティホールが発生します。詳細については、42.8項 「セキュリティ問題の回避」を参照してください。
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の秘密鍵が生成され、次に、この鍵を使用してサーバ証明書が署名されます。
TLS/SSLの概念と定義に関する詳細については、http://httpd.apache.org/docs/2.4/ssl/ssl_intro.htmlを参照してください。
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
を使用します。このステップでは、パスフレーズを入力し、いくつかの質問に回答するよう求められます。入力したパスフレーズは後で必要になるため、覚えておいてください。
>
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
パスフレーズを入力します。 | |
もう一度入力します(パスフレーズを覚えてください)。 | |
2文字の国コードを入力します( | |
住所のある都道府県の名前を入力します。 | |
都市名を入力します( | |
勤務先の組織の名前を入力します。 | |
組織部門を入力します。組織部門がない場合は空白のままにします。 | |
サーバのドメイン名または自分の氏名を入力します。 | |
勤務先の電子メールアドレスを入力します。 | |
チャレンジパスワードは空白のままにします。入力した場合は、Apache Webサーバを再起動するたびにチャレンジパスワードを入力する必要があります。 | |
オプションの会社名を入力するか、空白のままにします。 |
これで証明書を生成できます。もう一度openssl
を使用します。証明書の形式はデフォルトのPEM
です。
鍵の秘密部分を
new.cert.key
にエクスポートします。証明書署名要求(CSR)の作成時に入力したパスフレーズを入力するようプロンプトが表示されます。>
sudo
openssl rsa -in privkey.pem -out new.cert.key署名要求に入力した情報に従って、証明書の公開部分を生成します。
-days
オプションで、証明書が期限切れになるまでの期間を指定します。証明書を取り消すことも、期限切れになる前に置き換えることもできます。>
sudo
openssl 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
を全ユーザに対して読み込み可能にします。>
sudo
cp new.cert.cert /etc/apache2/ssl.crt/server.crt>
sudo
cp 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インスタンスを実行できます。
>
sudo
systemctl start apache2.service
デフォルトの/etc/sysconfig/apache2
ファイルを読み取ります。このファイルが存在しない場合、または存在しても、APACHE_HTTPD_CONF
変数が設定されていない場合、/etc/apache2/httpd.conf
を読み取ります。
別のApacheインスタンスを有効にするために、以下を実行します。
>
sudo
systemctl start apache2@INSTANCE_NAME
例:
>
sudo
systemctl 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
など)。>
sudo
cp /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
というファイルを作成します。>
sudo
cp /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
を作成します。>
sudo
cp /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インスタンスを開始します。
>
sudo
systemctl start apache2@example_web.orgWebブラウザに
http://server_name:82
を参照させて、サーバが稼働していることを確認します。前に新規インスタンス用のエラーログファイル名を変更していた場合、そのファイルを確認できます。>
sudo
tail -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インスタンスで動作します。次の例>
sudo
export HTTPD_INSTANCE=example_web.org>
sudo
a2enmod access_compat>
sudo
a2enmod status>
sudo
apachectl 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というサーバ名の由来についても説明しています。