
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のトラブルシューティング方法について説明します。
ここでは、Apacheをすばやく簡単に設定、起動する方法について説明します。Apacheをインストールおよび設定するには、rootである必要があります。
Apache Webサーバをセットアップする前に、次の要件が満たされていることを確認してください。
マシンのネットワークが適切に設定されているか。この項目の詳細については、第19章 ネットワークの基礎を参照してください。
マシンの正確なシステム時間は、タイムサーバとの同期により維持されます。これは、HTTPプロトコルの一部が正確な時間に依存するために必要です。この項目の詳細については、第21章 NTPによる時刻の同期を参照してください。
最新のセキュリティアップデートがインストールされています。不明な場合は、YaSTオンラインアップデートを実行します。
ファイアウォールで、デフォルトのWebサーバポート(80)を開きます。ポートを開くには、SuSEFirewall2を設定して外部ゾーンでサービスを実行できるようにします。これには、YaSTを使用します。詳細については、Section “Configuring the Firewall with YaST”, Chapter 15, Masquerading and Firewalls, Security Guideを参照してください。
SUSE Linux Enterprise ServerのApacheは、デフォルトではインストールされません。「そのまますぐに」実行できる標準の事前定義された設定を使用してインストールするには、次の手順を使用します。
YaSTを起動して、 › の順に選択します。
› の順に選択し、からを選択します。
依存関係のあるパッケージのインストールを確認して、インストールプロセスを完了します。
このインストールには、apache2-prefork マルチプロセシングモジュール とPHP5モジュールが含まれています。モジュールの詳細については、29.4項 「モジュールのインストール、有効化、および設定」を参照してください。
Apacheは、ブート時に自動的に起動することも、手動で起動することもできます。
Apacheをターゲットmulti-user.targetおよびgraphical.targetでブート時に自動的に起動するには、次のコマンドを実行します。
root # systemctl enable apache2.service
SUSE Linux Enterprise Serverのsystemdターゲットの詳細、およびYaSTの詳細については、10.4項 「YaSTを使用したサービスの管理」を参照してください。
シェルを使用してApacheを手動で起動するには、systemctl start apache2.serviceを実行します。
Apacheの起動時にエラーメッセージが表示されなければ、通常、このWeb serverが実行されています。これをテストするには:
ブラウザを起動し、http://localhost/を開きます。
Apacheが立ち上がって稼動している場合は、「It works!」で始まるテストページが表示されます。
このページが表示されない場合は、29.8項 「トラブルシューティング」を参照してください。
Webサーバの起動後は、ドキュメントを追加、必要に応じて設定を調整、およびモジュールをインストールして機能を追加することができます。
SUSE Linux Enterprise Serverには、2つの設定オプションがあります。
手動で設定を行えば細かい点まで調整できますが、YaSTのGUIほど便利ではありません。
設定の変更は、ほとんどの場合、Apacheをリロード(または再起動)しないと有効になりません。systemctl reload apache2.serviceを使用してApacheを手動で再ロードするか、29.3項 「Apacheの起動および停止」に示されている再起動オプションの1つを使用します。
YaSTでApatcheを設定する場合、これを自動化するには、29.2.3.2項 「HTTPサーバの設定」で説明されているように、をに設定します。
このセクションでは、Apache設定ファイルの概要を示します。環境設定にYaSTを使用する場合は、これらのファイルを操作する必要はありません。ただし、後で手動設定に切り替える場合に、この情報が役立つことがあります。
Apache設定ファイルは、次の2つの場所にあります。
/etc/sysconfig/apache2 #
/etc/sysconfig/apache2は、ロードするモジュール、インクルードする付加的な設定ファイル、サーバを起動するときのフラグ、コマンドラインに追加するべきフラグなど、Apacheのいくつかのグローバル設定を制御します。このファイルの各設定オプションについては、詳細なドキュメントが存在するので、ここでは説明しません。一般的な目的のWebサーバの場合には、/etc/sysconfig/apache2の内容を設定するだけで十分でしょう。
/etc/apache2/ #
/etc/apache2/には、Apacheのすべての設定ファイルが含まれます。ここでは、各ファイルの目的について説明します。各ファイルには、複数の設定オプション(ディレクティブ)が含まれています。これらのファイルの各設定オプションについては、詳細なドキュメントがあるので、ここでは説明しません。
Apache設定ファイルは、次のように編成されます。
/etc/apache2/
|
|- charset.conv
|- conf.d/
| |
| |- *.conf
|
|- default-server.conf
|- errors.conf
|- httpd.conf
|- listen.conf
|- magic
|- mime.types
|- mod_*.conf
|- server-tuning.conf
|- ssl.*
|- ssl-global.conf
|- sysconfig.d
| |
| |- global.conf
| |- include.conf
| |- loadmodule.conf . .
|
|- uid.conf
|- vhosts.d
| |- *.confcharset.conv
各言語に使用する文字セットを指定します。このファイルは、編集しないでください。
conf.d/*.conf
他のモジュールによって追加される設定ファイル。これらの設定ファイルは、必要に応じて仮想ホスト設定に含めることができます。その例として、vhosts.d/vhost.templateを参照してください。設定ファイルを仮想ホスト設定に含めることにより、仮想ホストごとに別のモジュールセットを指定できます。
default-server.conf
すべての仮想ホストに対応するグローバル設定で、それぞれ適切なデフォルト値が指定されています。デフォルト値を変更する代わりに、仮想ホスト設定で上書きします。
errors.conf
Apacheによるエラーの対処方法を定義します。すべての仮想ホストに対してこれらのメッセージをカスタマイズするには、このファイルを編集します。カスタマイズしない場合は、仮想ホスト設定内のこれらのディレクティブを上書きします。
httpd.conf
メインのApacheサーバ設定ファイル。このファイルは変更しません。インクルード文およびグローバル設定が含まれています。ここに記載されている設定ファイルのグローバル設定を上書きします。仮想ホスト設定内のホスト固有の設定(ドキュメントルートなど)を変更します。
listen.conf
Apacheを特定のIPアドレスおよびポートにバインドします。名前ベースの仮想ホスティングもこのファイルで設定します。詳細については、29.2.2.1.1項 「名前ベースの仮想ホスト」を参照してください。
magic
Apacheが自動的に不明なファイルのMIMEタイプを判別できるようにするmime_magicモジュール用のデータ。このファイルは、変更しないでください。
mime.types
システムで認識されるMIMEタイプ(実際には/etc/mime.typesへのリンク)。このファイルは、編集しないでください。このリスト以外にMIMEタイプを追加する必要がある場合は、mod_mime-defaults.confに追加します。
mod_*.conf
デフォルトでインストールされるモジュール用の設定ファイル。詳細については、29.4項 「モジュールのインストール、有効化、および設定」を参照してください。オプションのモジュール用の設定ファイルは、conf.dディレクトリ内にあります。
server-tuning.conf
各MPMの設定ディレクティブ(29.4.4項 「マルチプロセシングモジュール」を参照)、およびApacheのパフォーマンスを制御する一般的な設定オプションが含まれています。このファイルを変更する場合は、Webサーバを適切にテストしてください。
ssl-global.conf and ssl.*
グローバルSSL設定およびSSL証明書データ。詳細については、29.6項 「SSLをサポートするセキュアWebサーバのセットアップ」を参照してください。
sysconfig.d/*.conf
/etc/sysconfig/apache2から自動的に生成される設定ファイル。これらのファイルは、いずれも変更しません。その代わりに、/etc/sysconfig/apache2を編集します。このディレクトリに、他の設定ファイルを格納しないでください。
uid.conf
Apacheを実行する際に使用するユーザおよびグループIDを指定します。このファイルは、変更しないでください。
vhosts.d/*.conf
仮想ホストの設定はこのファイルにあるはずです。このディレクトリには、SSLの有無に関わらず、仮想ホストのテンプレートファイルが格納されます。このディレクトリ内の .conf で終わるファイルは、すべて自動的にApache設定に含まれます。詳細については、29.2.2.1項 「仮想ホスト設定」を参照してください。
Apacheを手動設定するには、rootユーザとしてプレーンテキストの設定ファイルを編集する必要があります。
仮想ホスト という用語は、同じ物理マシンから複数のURI (universal resource identifiers)のサービスを行えるApacheの機能を指しています。これは、www.example.comとwww.example.netのような複数のドメインを、1台の物理マシン上の単一のWebサーバで保持できることを意味しています。
管理の手間(1つのWebサーバを維持すればよい)とハードウェアの費用(ドメインごとの専用のサーバを必要としない)を省くために仮想ホストを使うことは、よく行われています。仮想ホストは名前ベース、IPベース、またはポートベースのいずれかになります。
すべての既存仮想ホストをリストするには、コマンドhttpd2 を使用します。デフォルトサーバおよびすべての仮想ホストが、それらのIPアドレスおよびリスニングポートとともにリストに表示されます。リストには、各仮想ホストの設定ファイル内での位置を示すエントリも含まれています。
-S
仮想ホストを設定するには、YaSTを使用するか(29.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を参照してください。
名前ベースの仮想ホストでは、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>
この仮想ホスト設定では、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)内のディレクティブが適用されます。
仮想ホストをセットアップするには、少なくとも次のディレクティブが各仮想ホスト設定に含まれている必要があります。オプションについては、/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では
Order allow,deny Allow from all
として表われていました。この古い構文は、現在もmod_access_compatモジュールでサポートされています。
完全な設定ファイルは次のようになります。
仮想ホスト設定 #<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>
YaSTを使用してWebサーバを設定するには、YaSTを起動して、 › の順に選択します。このモジュールを初めて起動するときに、が起動して、サーバ管理に関していくつかの基本的な事項を決定するように要求されます。このウィザードの完了後、のモジュールを呼び出すたびに、ダイアログが起動します。詳細については、29.2.3.2項 「HTTPサーバの設定」を参照してください。
HTTP Server Wizardには、5つのステップがあります。ダイアログの最後のステップでは、上級者用の設定モードに入って、さらに詳細な設定を行うかどうか選択できます。
ここでは、Apacheが着信リクエストをリスンするために使用する、ネットワークインタフェースとポートを指定します。既存のネットワークインタフェースとそれらに対応するIPアドレスから、任意のものを組み合わせて選択できます。他のサービスによって予約されていないものであれば、3つの範囲(ウェルノウンポート、レジスタードポート、ダイナミックまたはプライベートポート)のうちのどのポートでも使用できます。デフォルトの設定では、ポート80ですべてのネットワークインタフェース(IPアドレス)をリスンします。
ファイアウォールでWebサーバがリスンするポートを開くには、をクリックします。これは、LAN、WAN、または公共のインターネットなど、ネットワーク上でWebサーバを利用可能にする場合には必須です。外部からのWebサーバへのアクセスが不要なテスト段階でのみ、ポートを閉じておくことは有用です。複数のネットワークインタフェースが存在する場合は、をクリックして、ポートを開くインタフェースを指定します。
をクリックして設定を続けます。
設定オプションによって、Webサーバでサポートされるスクリプト言語の有効化または無効化を設定できます。他のモジュールの有効化または無効化の詳細については、29.2.3.2.2項 「サーバモジュール」を参照してください。をクリックして次のダイアログに進みます。
このオプションは、デフォルトのWebサーバに関連しています。29.2.2.1項 「仮想ホスト設定」で説明されているように、Apacheは、1つの物理的マシンで複数の仮想ホストに使用することができます。設定ファイルで最初に宣言された仮想ホストは通常、デフォルトのホストと呼ばれます。各仮想ホストは、デフォルトホストの設定を継承します。
ホストの設定(「ディレクティブ」)を編集するには、テーブル内の適切なエントリを選択して、をクリックします。新しいディレクティブを追加するには、をクリックします。ディレクティブを削除するには、そのアカウントを選択し、をクリックします。
これはサーバのデフォルト設定のリストです。
ドキュメントルート
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が作成するエラーページなどに表示されます。
のステップを完了したら、をクリックして、設定を続けます。
このステップでは、ウィザードはすでに設定されている仮想ホストのリストを表示します(29.2.2.1項 「仮想ホスト設定」を参照)。YaST HTTPウィザードを起動する前に手動で変更を行っていなければ、仮想ホストは表示されません。
ホストを追加するには、をクリックし、、(DocumentRoot)、などホストに関する基本情報を入力するためのダイアログを開きます。は、ホストの識別方法を決めるために使用されます(名前ベースまたはIPベース)。で名前またはIPアドレスを指定します。
をクリックして、仮想ホスト設定ダイアログの2番目の部分に進みます。
仮想ホスト設定のパート2では、CGIスクリプトを有効にするかどうか、およびこれらのスクリプトを使用するディレクトリを指定できます。また、SSLも有効にできます。SSLを有効化する場合は、証明書のパスも指定する必要があります。SSLおよび証明書の詳細については、29.6.2項 「SSLサポートのあるApacheの設定」を参照してください。オプションを使用して、クライアントがディレクトリを要求するときに表示するファイルを指定できます(デフォルトではindex.html)。ファイルを変更する場合は、1つ以上のファイル名(スペースで区切る)を追加します。で、ユーザのパブリックディレクトリ(~user/public_html/)のコンテンツを、サーバのhttp://www.example.com/~userからアクセスできるようにします。
仮想ホストを自由に追加することはできません。名前ベースの仮想ホストを使用する場合は、各ホスト名がネットワーク内で解決されている必要があります。IPベースの仮想ホストを使用する場合は、使用可能な各IPアドレスに対し1つのホストのみを割り当てることができます。
これはウィザードの最後のステップです。ここでは、Apacheサーバをいつ、どのようにして起動するか(ブート時に起動するか、手動で起動するか)を指定します。また、ここまで行った設定の簡単な要約を確認します。この設定でよければ、をクリックして、設定を完了します。変更する場合は、希望のダイアログまでをクリックして戻ります。をクリックして、29.2.3.2項 「HTTPサーバの設定」で説明しているダイアログを開きます。
ダイアログでは、ウィザード(Webサーバを最初に設定する場合にのみ実行)よりも詳細に設定を調整できます。このダイアログは、次で説明する4つのタブで構成されています。ここで変更する設定オプションは、すぐには適用されません。変更を適用するには、常にをクリックして変更を確認する必要があります。をクリックすると、設定モジュールを終了し、変更が破棄されます。
で、Apacheを実行するか()、または停止するか()を選択します。で、サーバが使用可能なアドレスおよびポートについて、、またはを選択します。デフォルトでは、ポート80ですべてのインタフェースをリスンします。常ににチェックマークを入れておく必要があります。そうしないと、外部からWebサーバにアクセスできなくなります。外部からのWebサーバへのアクセスが不要なテスト段階でのみ、ポートを閉じておくことは有用です。複数のネットワークインタフェースが存在する場合は、をクリックして、ポートを開くインタフェースを指定します。
で、アクセスログファイルまたはエラーログファイルのいずれかを確認します。これは、設定をテストする場合に便利です。ログファイルは別個のウィンドウに表示されますが、そこから、Webサーバを再起動または再ロードすることも可能です。詳細については、29.3項 「Apacheの起動および停止」を参照してください。これらのコマンドはすぐに有効になり、ログメッセージもすぐに表示されます。
をクリックして、Apache2モジュールのステータス(有効または無効)を変更できます。すでにインストールされているがリストに含まれていない新規モジュールを追加するには、をクリックします。モジュールの詳細については、29.4項 「モジュールのインストール、有効化、および設定」を参照してください。
これらのダイアログは、すでに説明したものと同じです。詳細については、29.2.3.1.3項 「Default Host (デフォルトのホスト)」および29.2.3.1.4項 「仮想ホスト」を参照してください。
29.2.3項 「ApacheをYaSTで設定する」の説明のようにYaSTを設定すると、Apacheは、ブート時にmulti-user.targetおよびgraphical.targetで起動されます。YaSTの、あるいはsystemctlコマンドラインツール(systemctl enableまたはsystemctl disable)を使用して、この動作を変更できます。
稼働中のシステムでApacheを起動、停止、または操作するには、次の説明に従ってsystemctlまたはapachectlコマンドを使用します。
systemctlコマンドの一般的な情報については、10.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の完全な「再起動」になります。
apachectl -k graceful
すべての着信要求をただちに処理する2つ目のウェブサーバを起動します。ウェブサーバの以前のインスタンスはGracefulShutdownTimeoutで設定された一定時間、引き続きすべの既存要求を処理します。
このコマンドは、新しいバージョンへのアップグレード時、または再起動が必要な設定オプションの変更時に便利です。このオプションを使用すると、サーバのダウンタイムが最小限になります。
GracefulShutdownTimeoutの設定が必要です。これを設定しないと、このコマンドを実行しても通常どおり再起動されます。ゼロに設定した場合、残っている要求がすべて完全に処理されるまで、サーバが無制限に待機します。
最初のApacheインスタンスが必要なリソースをすべてクリアできなかった場合、graceful restartは失敗します。この場合、コマンドの結果はgraceful stopとなります。
systemctl stop apache2.service
既存の要求を完了できるように、GracefulShutdownTimeoutで設定された一定時間の経過後にWebサーバを停止します。
GracefulShutdownTimeoutの設定が必要です。これを設定しないと、このコマンドを実行しても通常どおり再起動されます。ゼロに設定した場合、残っている要求がすべて完全に処理されるまで、サーバが無制限に待機します。
apachectl configtest
実行中のWebサーバに影響することなく、設定ファイルの構文をチェックします。 このチェックは、サーバが起動、再ロードまたは再起動するたびに行われるため、通常は明示的にテストを実行する必要はありません(設定エラーが検出された場合、Webサーバは起動、再ロードまたは再起動されません)。
コマンドにその他のフラグを指定した場合、 これらはWebサーバに渡されます。
Apacheソフトウェアは、モジュール形式で構築されており、一部の主要タスクを除いてはモジュールごとに処理されます。この方法で、HTTPさえもモジュールによって処理されています(http_core)。
Apacheのモジュールは、ビルド時にApacheのバイナリに組み込むことも、実行時に動的にロードすることもできます。動的なモジュールのロード方法の詳細については、29.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は、Webサーバへのリクエストを受け取って処理する役割を果たすもので、Webサーバソフトウェアの中核となっています。
29.1.2項 「インストール」で説明されているデフォルトインストールを行った場合は、すべての基本モジュールと拡張モジュール、マルチプロセシングモジュール、プリフォークMPM、および外部モジュールのmod_php5とmod_pythonがすでにインストールされています。
YaSTを起動し、 › の順に選択して、その他の外部モジュールをインストールできます。 › の順に選択し、[apache]を検索します。他のパッケージの中で、使用可能な外部Apacheモジュールがすべて検索結果のリストに表示されます。
特定モジュールの有効化/無効化は、手動で行うか、YaSTを使用します。YaSTでは、29.2.3.1項 「HTTP Server Wizard」で説明されているモジュール設定を使用して、スクリプト言語モジュール(PHP5、Perl、およびPython)を有効または無効にする必要があります。その他のすべてのモジュールは、29.2.3.2.2項 「サーバモジュール」で説明しているように有効化または無効化できます。
手動でモジュールを有効化または無効化する場合は、a2enmod mod_fooまたはa2dismodmod_fooコマンドをそれぞれ使用します。a2enmod -lは、すべての現在アクティブなモジュールのリストを出力します。
手動で外部モジュールを有効化した場合は、各設定ファイルがすべての仮想ホスト設定にロードされていることを確認します。外部モジュール用の設定ファイルは、/etc/apache2/conf.d/内に位置し、デフォルトではロードされません。各仮想ホスト上に同じモジュールが必要な場合は、このディレクトリ内の*.confを含めることができます。必要でない場合は、個々のファイルを含めます。その例として、「/etc/apache2/vhost.d/vhost.template」を参照してください。
すべての基本および拡張モジュールは、Apacheのマニュアルに詳しく説明されています。ここでは、主要なモジュールについて簡単に説明します。各モジュールの詳細については、http://httpd.apache.org/docs/2.4/mod/ (http://httpd.apache.org/docs/2.4/mod/)を参照してください。
mod_actions
特定のMIMEタイプ(application/pdfなど)、特定の拡張子を持つファイル(.rpmなど)、または特定の要求方法(GETなど)が要求された場合に、常にスクリプトを実行する方法を提供します。このモジュールは、デフォルトで有効です。
mod_alias
AliasおよびRedirectディレクティブを提供します。これにより、特定のディレクトリにURIをマップ(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_autoindex
Autoindexは、インデックスファイル(index.htmlなど)が存在しない場合にディレクトリリストを生成します。これらのインデックスのルックアンドフィールは設定可能です。このモジュールは、デフォルトで有効です。ただし、ディレクトリリストは、デフォルトでOptionsディレクティブを経由して無効化されています。仮想ホスト設定でこの設定を上書きします。このモジュール用のデフォルト設定は、/etc/apache2/mod_autoindex-defaults.confに存在します。
mod_cgi
mod_cgiは、CGIスクリプトを実行するのに必要です。このモジュールは、デフォルトで有効です。
mod_deflate
このモジュールを使用して、配信前にファイルタイプを圧縮するようにApacheを設定できます。
mod_dir
mod_dirは、DirectoryIndexディレクティブを提供します。これを使用して、ディレクトリが要求されたときに(デフォルトではindex.html)自動的に配信されるファイルを設定できます。ディレクトリ要求に末尾のスラッシュが含まれていない場合は、正しいURLへの自動リダイレクトも提供します。このモジュールは、デフォルトで有効です。
mod_env
CGIスクリプトやSSIページに渡す環境を制御します。環境変数を設定、設定解除したり、httpdプロセスを起動したシェルから渡すことができます。このモジュールは、デフォルトで有効です。
mod_expires
mod_expiresを使用すると、Expiresヘッダの送信によって、プロキシとブラウザのキャッシュがドキュメントを更新する頻度を制御できます。このモジュールは、デフォルトで有効です。
mod_include
mod_includeは、動的にHTMLページを生成するための基本機能を提供するSSI (Server-Side Includes)を使用できるようにします。このモジュールは、デフォルトで有効です。
mod_info
http://localhost/server-info/にサーバ設定の包括的な概要を表示します。セキュリティ上の理由から、このURLへのアクセスは常に制限されます。デフォルトでは、localhostにのみ、このURLへのアクセスが許可されます。mod_infoは、/etc/apache2/mod_info.confで設定されます。
mod_log_config
このモジュールを使用して、Apacheログファイルの書式を設定できます。このモジュールは、デフォルトで有効です。
mod_mime
mimeモジュールは、ファイル名の拡張子(HTMLドキュメント用のtext/htmlなど)に基づいた、適切なMIMEヘッダを使用してファイルが配信されるようにします。このモジュールは、デフォルトで有効です。
mod_negotiation
コンテンツネゴシエーションに必要です。詳細については、http://httpd.apache.org/docs/2.4/content-negotiation.html (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サーバとクライアント間の暗号化接続を有効化します。詳細については、29.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ディレクティブを設定で指定する必要があります。このモジュールは、デフォルトで有効です。
SUSE Linux Enterprise Serverには、Apacheで使用するための2つの異なるマルチプロセッシングモジュール(MPM)が用意されています。
プリフォークMPMは、スレッド対応でない、プリフォークWebサーバを実装します。プリフォークMPMは、各要求を分離し、個々の子プロセスの分岐で処理するApacheバージョン 1.xと同じように、このWebサーバを動作させます。これにより、問題のあるリクエストが他のものに影響することがなくなるので、Webサーバのロックアップを避けられます。
プロセスベースのアプローチによって安定性がもたらされますが、プリフォークMPMは、もう一方のワーカーMPMよりも多くのシステムリソースを消費します。プリフォークMPMは、UnixベースのオペレーティングシステムでのデフォルトのMPMとみなされています。
このドキュメントでは、ApacheがプリフォークMPMで使用されていることを仮定しています。
ワーカーMPMは、マルチスレッド対応のWebサーバを提供します。スレッドとは、「軽い」形態のプロセスです。プロセスよりもスレッドが優れている点は、リソースの消費が少ないことです。ワーカーMPMは、子プロセスを分岐する代わりに、サーバプロセスでスレッドを使用することによってリクエストを処理します。プリフォークした子プロセスはマルチスレッドになります。このアプローチでは、プリフォークMPMの場合よりもシステムリソースの消費が少なくなるので、Apacheの性能が良くなります。
主な欠点としては、ワーカーMPMの安定性の問題が挙げられます。スレッドが壊れた場合、プロセスのすべてのスレッドに影響してしまいます。最悪の場合には、サーバがクラッシュすることがあります。特に、ApacheでCGI (Common Gateway Interface)を使用している場合、負荷が大きくなると、スレッドがシステムリソースと通信できなくなり、内部サーバエラーが生じることがあります。ワーカーMPMを使用すべきでないという意見の別の根拠は、利用できるApacheのモジュールのすべてがスレッドセーフになっているわけではなく、そのためワーカーMPMと組み合わせて使用することはできないという点です。
利用可能なPHPモジュールのすべてがスレッドセーフになっているわけではありません。ワーカーMPMとmod_phpは併用しないでください。
ここでは、SUSE Linux Enterprise Serverに付属しているすべての外部モジュールを記載しています。モジュールのドキュメントは、記載のディレクトリ内に存在します。
mod_php5やmod_perlなどのモジュールが処理する個々のCGIスクリプトに対して、AppArmor制限を提供するために、Apacheにサポートを追加します。
パッケージ名:apache2-mod_apparmor |
| 詳細: Part “Confining Privileges with AppArmor”, Security Guide |
mod_perl
mod_perlは、埋め込まれているインタプリタでPerlスクリプトを実行できるようにします。サーバに埋め込まれている永続的なインタプリタにより、外部インタプリタの起動のオーバーヘッド、およびPerlの起動時間のペナルティを回避できます。
パッケージ名: apache2-mod_perl |
環境設定ファイル: /etc/apache2/conf.d/mod_perl.conf |
詳細: /usr/share/doc/packages/apache2-mod_perl |
mod_php5
PHPは、サーバ側クロスプラットフォームのHTML埋込みスクリプト言語です。
パッケージ名: apache2-mod_php5 |
環境設定ファイル: /etc/apache2/conf.d/php5.conf |
詳細: /usr/share/doc/packages/apache2-mod_php5 |
mod_python
mod_pythonは、Apache HTTPサーバへのPythonの埋込みができるようにし、Webベースのアプリケーションの設計で、さらに柔軟性を持たせ、パフォーマンスを向上させます。
パッケージ名: apache2-mod_python |
詳細: /usr/share/doc/packages/apache2-mod_python |
mod_security
mod_securityにより、さまざまな範囲の攻撃からWebアプリケーションを保護するためのファイアウォールがWebアプリケーションに提供されます。さらに、HTTPトラフィックモニタリングおよびリアルタイム分析も可能です。
パッケージ名: apache2-mod_security2 |
環境設定ファイル: /etc/apache2/conf.d/mod_security2.conf |
詳細: /usr/share/doc/packages/apache2-mod_security2 |
| マニュアル: http://modsecurity.org/documentation/ |
上級ユーザは、カスタムのモジュールを記述してApacheを拡張することができます。Apache用のモジュールを開発したり、サードパーティのモジュールをコンパイルしたりするには、apache2-develパッケージ、および対応する開発ツールが必要です。apache2-develには、Apache用の追加モジュールのコンパイルに必要なapxs2ツールも含まれています。
apxs2は、ソースコードからモジュールをコンパイルし、インストールすることを可能にします(設定ファイルへの必要な変更も含みます)。これは、実行時にApacheにロードされる、ダイナミック共有オブジェクト (DSO)を作成します。
apxs2バイナリは、/usr/sbinの下層にあります
/usr/sbin/apxs2—MPMと共に動作する拡張モジュールを構築するのに適しています。インストール場所は/usr/lib/apache2です。
/usr/sbin/apxs2-prefork—プリフォークMPMモジュールに適しています。インストール場所は/usr/lib/apache2-preforkです。
/usr/sbin/apxs2-worker—ワーカーMPMモジュールに適しています。インストール場所は/usr/lib/apache2-workerです。
次のコマンドで、ソースコードからモジュールをインストールして、アクティブにします。
cd /path/to/module/source; apxs2 -cia
mod_foo.c
ここで、-cはモジュールをコンパイルし、-iはモジュールをインストールし、-aはモジュールをアクティブにします。apxs2のその他のオプションについては、apxs2(1) manページを参照してください。
ApacheのCGI (Common Gateway Interface)により、通常CGIスクリプトとして呼ばれるスクリプトまたはプログラムを含んだ動的コンテンツを作成できます。CGIスクリプトは、どのプログラム言語でも作成できます。通常、PerlまたはPHPなどのスクリプト言語が使用されます。
ApacheがCGIスクリプトで作成されたコンテンツを配信できるようにするには、mod_cgiを有効にする必要があります。mod_aliasも必要です。デフォルトでは、両モジュールとも有効化されています。モジュールの有効化の詳細については、29.4.2項 「有効化と無効化」を参照してください。
SUSE Linux Enterprise Serverでは、CGIスクリプトの実行は、/srv/www/cgi-bin/ディレクトリ内でのみ許可されています。この場所は、すでにCGIスクリプトを実行するように設定されています。仮想ホスト設定を作成しておらず(29.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スクリプトとして処理するようにサーバに指示します。必要に応じて調整します。 | |
|
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」という名前を付けます。
Webサーバがアクセスできるファイルは、rootユーザが所有している必要があります。詳細については、29.7項 「セキュリティ問題の回避」を参照してください。Webサーバは別のユーザ名で実行しているので、CGIスクリプトはworld-executableおよびworld-readableである必要があります。CGIディレクトリに移動し、chmod 755 test.cgiコマンドを使用して適切なパーミッションを適用します。
次に、http://localhost/cgi-bin/test.cgiまたはhttp://www.example.com/cgi-bin/test.cgiを呼び出します。「CGI/1.0 test script report」を参照してください。
テストプログラムの出力の代わりにエラーメッセージが表示される場合は、次を確認します。
カスタムCGIディレクトリを設定した場合、適切に設定されていますか?不明な場合は、デフォルトのCGIディレクトリの/srv/www/cgi-bin/内にあるスクリプトを実行し、http://localhost/cgi-bin/test.cgiを呼び出します。
ファイルのパーミッションは正しいですか?CGIディレクトリに移動して、ls -l test.cgiを実行します。その出力が次で始まっているかどうかを確認します。
-rwxr-xr-x 1 root root
そのスクリプトにプログラミングエラーがないかどうか確認します。test.cgiを変更しなかった場合は該当しませんが、独自のプログラムを使用する場合は、必ず、プログラミングエラーがないかどうか確認してください。
クレジットカード情報などの機密データをWebサーバやクライアント間で送信する場合は必ず、認証を使用して、安全で、暗号化された接続の確立を推奨します。mod_sslは、クライアントとWebサーバ間のHTTP通信にセキュアソケットレイヤ(SSL)プロトコルとトランスポートレイヤセキュリティ(TLS)プロトコルを使用して、強力な暗号化を行います。SSL/TSLを使用することにより、Webサーバとクライアント間でプライベートな接続が確立されます。データの整合性が保証され、クライアントとサーバ間で相互認証ができるようになります。
この目的で、サーバは、URLに対するリクエストに応答する前に、サーバの有効な識別情報を含むSSL証明書を送ります。これにより、サーバが唯一の正当な通信相手であることが保証されます。加えて、この証明書は、クライアントとサーバの間の暗号化された通信が、重要な内容がプレーンテキストとして見られる危険なしに、情報を転送できることを保証します。
mod_sslは、SSL/TSLプロトコル自体は実装しませんが、ApacheとSSLライブラリ間のインタフェースとして機能します。SUSE Linux Enterprise Serverでは、OpenSSLライブラリが使用されます。OpenSSLは、Apacheとともに自動的にインストールされます。
Apacheでmod_sslを使用した場合の最も明白な効果は、URLのプレフィックスがhttp://ではなくhttps://となることです。
SSL/TSLをWebサーバで使用するには、SSL証明書を作成する必要があります。この証明書は、両者が互いに相手を識別できるように、Webサーバとクライアント間の認証に必要です。証明書の整合性を確認するには、すべてのユーザが信用する者によって署名される必要があります。
3種類の証明書を作成することができます。テストの目的のみの「ダミー証明書」、あらかじめ定義されている信用する一部のユーザグループ用の自己署名付き証明書、および公的な独立団体のCA (Certificate Authority)によって署名される証明書です。
証明書の作成は、2つのステップで行うことができます。はじめに、CAの秘密鍵が生成され、次に、この鍵を使用してサーバ証明書が署名されます。
SSL/TSLの概念および定義の詳細については、http://httpd.apache.org/docs/2.4/ssl/ssl_intro.html (http://httpd.apache.org/docs/2.4/ssl/ssl_intro.html)を参照してください。
ダミー証明書を生成するには、スクリプト/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にも配置されます。
ダミー証明書は、実働システム上では使用しないでください。テストの目的のみで使用してください。
イントラネットまたは定義されている一部のユーザグループ用にセキュア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 (e.g. 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
最後のステップとして、Webブラウザ内の認識および信用されたCAのリストに組み込めるように、/etc/apache2/ssl.crt/server.crtからユーザがアクセスできる場所に公開証明書ファイルをコピーします。コピーしない場合、ブラウザは、この証明書が不明な認証局から発行されたものであると見なします。
証明書に署名する公式なCA (Certificate Authority)は、多数存在します。証明書は、信用のあるサードパーティによって署名されるため、完全に信用できます。通常、一般に運営されているセキュアWebサーバでは、証明書が公式に署名されます。
最も良く知られている公式なCAには、Thawte (http://www.thawte.com/)またはVerisign (http://www.verisign.com)があります。これらや、その他のCAは、すべてのブラウザにすでにコンパイルされているため、これらのCAによって署名された証明書は、ブラウザによって自動的に許可されます。
公式に署名された証明書を要求するとき、CAに証明書を送信しません。代わりに、CSR (Certificate Signing Request)を発行します。CSRを作成するには、/usr/share/ssl/misc/CA.sh -newreqスクリプトを呼び出します。
はじめに、スクリプトは、CSRの暗号化に使用されているパスワードを問い合わせてきます。その後、識別名を入力するよう求められます。このとき、国名または組織名など、いくつかの質問に答える必要があります。ここで入力した内容が証明書に含まれ、確認されるため、有効なデータを入力します。すべての質問に答える必要はありません。該当しない、または空白のままにする場合は、「.」を使用します。一般名は、CA自体の名前です。My company CAなど、意味のある名前を選択します。最後に、チャレンジパスワードおよび代替の企業名を入力する必要があります。
スクリプトを呼び出したディレクトリでCSRを検索します。ファイルには、newreq.pemという名前が付きます。
Webサーバ側のSSLとTLS要求用のデフォルトのポートは 443です。ポート 80をリスンする「通常」のApacheと、ポート 443をリスンするSSL/TL対応のApacheとの間に競合は生じません。通常、ポート80とポート443への要求はそれぞれ別の仮想ホストが処理し、別の仮想サーバに送られます。
ポート443でSSL対応のApache用のファイアウォールを開くことを忘れないでください。ファイアウォールは、Section “Configuring the Firewall with YaST”, Chapter 15, Masquerading and Firewalls, Security Guideで説明されているように、YaSTを使用して設定できます。
SSLモジュールはグローバルサーバ設定でデフォルトで有効になっています。ホストで無効にされている場合は、コマンドa2enmod sslで有効にします。最終的にSSLを有効にするには、サーバをフラグ「SSL」で起動する必要があります。このためには、a2enflag SSLを呼び出します。サーバ証明書をパスワードで暗号化している場合は、/etc/sysconfig/apache2でAPACHE_TIMEOUTの値を増やし、Apacheの起動時にパスフレーズを入力するのに十分な時間が与えられるようにします。これらの変更を適用するため、サーバを再起動します。再ロードでは不十分です。
仮想ホスト設定ディレクトリには、SSL固有ディレクティブが詳細に記述されている/etc/apache2/vhosts.d/vhost-ssl.templateテンプレートが含まれています。一般的な仮想ホスト設定については、29.2.2.1項 「仮想ホスト設定」を参照してください。
始めるには、テンプレートを/etc/apache2/vhosts.d/mySSL-host.confにコピーして編集します。次のディレクティブの値を調整するだけです。
DocumentRoot
ServerName
ServerAdmin
ErrorLog
TransferLog
IPアドレスが1つだけのサーバで、複数のSSL対応の仮想ホストを実行することはできません。名前ベースの仮想ホスティングでは、要求されたサーバ名をApacheが知っている必要があります。SSL接続の問題は、SSL接続が(デフォルトの仮想ホストの使用により)確立された後でのみ、そのような要求の読み込みが可能なことです。その結果、証明書がサーバ名に一致しないという警告メッセージが表示されます。
SUSE Linux Enterprise Serverは、SNI (Server Name Indication)と呼ばれるSSLプロトコルの拡張を組み込んでおり、仮想ドメインの名前をSSLネゴシエーションの一部として送信することで、この問題を解決します。これにより、サーバが正しい仮想ドメインに早く「切り替わり」、ブラウザに正しい証明書を提示することが可能になります。
SUSE Linux Enterprise Serverでは、SNIはデフォルトで有効になっています。名前ベースの仮想ホストをSSLで使用可能にするには、29.2.2.1.1項 「名前ベースの仮想ホスト」で説明されているようにサーバを設定します (ただし、SSLでは、ポート80ではなく、ポート443を使用)。
SNIは、クライアント側でもサポートされる必要があります。SNIは、ほとんどのブラウザでサポートされていますが、モバイルハードウェアの一部のブラウザやWindows* XP上のInternet ExplorerとSafariにはSNIのサポートがありません。詳細については、http://en.wikipedia.org/wiki/Server_Name_Indicationを参照してください。
ディレクティブSSLStrictSNIVHostCheckを使用して、SNIに非対応のブラウザを処理する方法を設定しますSNI非対応ブラウザは、サーバ設定でonに設定されると、すべての仮想ホストに関して拒否されます。VirtualHostディレクティブ内でonに設定されると、この特定のホストへのアクセスが拒否されます。
サーバ設定でoffに設定されると、サーバはSNIサポートがないかのように動作します。SSL要求は、(ポート443に対して)定義された最初の仮想ホストによって処理されます。
公共のインターネットに公開しているWebサーバについては、管理面での不断の努力が求められます。ソフトウェアと、偶然の設定ミスの両方に関連したセキュリティの問題が発生することは避けられません。それらに対処するためのいくつかのヒントを紹介します。
Apacheソフトウェアに脆弱性が見つかると、SUSEからセキュリティ上の勧告が出されます。これには、脆弱性を修正するための指示が含まれているので、可能な限り早期の適用が必要です。SUSEセキュリティ通知は、次の場所から入手できます。
メーリングリストのアーカイブ. http://lists.opensuse.org/opensuse-security-announce/
セキュリティアナウンスメントのリスト. http://www.suse.com/support/update/
SUSE Linux Enterprise Serverのデフォルトでは、DocumentRootディレクトリの/srv/www/htdocsおよびCGIディレクトリの/srv/www/cgi-binの所有者はユーザおよびグループのrootになっています。これらのパーミッションは変更しないでください。ディレクトリにすべてのユーザが書き込み可能な場合、どのユーザもそれらのディレクトリにファイルを格納できます。その後これらのファイルは、Apacheによりwwwrunのパーミッションで実行されます。その結果、意図しない仕方で、ユーザがファイルシステムのリソースにアクセスできるようになる可能性があります。/srv/wwwのサブディレクトリを使用して仮想ホストのDocumentRootおよびCGIディレクトリを配置し、このユーザおよびグループのrootがディレクトリとファイルの所有者であることを確認します。
デフォルトでは、ファイルシステム全体へのアクセスは、/etc/apache2/httpd.confで定義されています。これらのディレクティブは決して上書きしないでください。ただし、Apacheが読み込む必要のあるすべてのディレクトリに対するアクセスは有効にしてください。詳細については、29.2.2.1.3項 「基本的な仮想ホスト設定」を参照してください。このためには、パスワードまたはシステム設定ファイルなど重要なファイルは外部から読み取ることができないことを確認します。
Perl、PHP、SSIまたは他のプログラミング言語によるインタラクティブなスクリプトは、事実上、任意のコマンドを実行できるため、一般的なセキュリティの問題が存在します。サーバから実行されるスクリプトは、サーバの管理者が信用するソースからのみインストールされる必要があります。一般的には、ユーザが独自のスクリプトを実行できる環境は適切ではありません。また、すべてのスクリプトに対してセキュリティ監査を行うこともお勧めします。
スクリプトの管理をできるだけ簡単にするため、CGIスクリプトの実行をグローバルに許可するのではなく、通常、特定のディレクトリに制限されています。設定には、ディレクティブのScriptAliasおよびOption ExecCGIが使用されます。SUSE Linux Enterprise Serverのデフォルト設定では、任意の場所からのCGIスクリプトの実行は許可されていません。
すべてのCGIスクリプトは同一のユーザとして実行するため、異なるスクリプトが互いに競合する可能性があります。suEXECモジュールは、CGIスクリプトを別のユーザとグループで実行できるようにします。
ユーザディレクトリを(mod_userdirまたはmod_rewriteを使用して)有効化する場合は、 .htaccessファイルを許可しないことをお勧めします。これらのファイルは、ユーザによるセキュリティ設定の上書きを可能にするからです。AllowOverRideディレクティブを使用して、少なくとも、ユーザの操作を制限する必要があります。SUSE Linux Enterprise Serverでは、.htaccessファイルはデフォルトで有効化されていますが、ユーザはmod_userdirを使用するときにいずれのOptionディレクティブも上書きすることは許可されていません(/etc/apache2/mod_userdir.conf設定ファイルを参照してください)。
Apacheが起動しないと、Webページにアクセスすることはできず、ユーザがWebサーバに接続することもできないので、問題の原因を見つけ出すことは重要です。次に、エラーが説明されている場所とチェックすべき重要事項について説明します。
apache2.serviceサブコマンドの出力:
Webサーバをバイナリの/usr/sbin/httpd2で起動/停止する代わりに、systemctlコマンドを使用します(29.3項 「Apacheの起動および停止」を参照)。このスクリプトは、エラーを詳細に説明し、設定エラーを修正するコツやヒントも提供します。
致命的エラーと致命的でないエラーの両方について、Apacheログファイル(主に、デフォルトで/var/log/apache2/error_logにあるエラーログファイル)をチェックしてください。さらに、ログファイルにさらに詳細な情報を記録することが必要な場合には、LogLevelディレクティブで、記録されるメッセージの詳細を制御することができます。
tail -F /var/log/apache2/my_error_logコマンドで、Apacheのログメッセージを確認します。その後、systemctl restart apache2.serviceを実行します。そして、ブラウザでの接続をもう一度試みて、出力を確認してください。
よくある間違いで、サーバのファイアウォール設定でApache用のポートを開けていないことがあります。YaSTでApacheを設定する場合には、この点を扱うための別のオプションが存在します(29.2.3項 「ApacheをYaSTで設定する」を参照してください)。Apacheを手動で設定する場合は、YaSTのファイアウォールモジュールを使用してHTTPとHTTPS用のファイアウォールポートを開きます。
このようにしても、エラーを特定できない場合には、http://httpd.apache.org/bug_report.htmlの、オンラインのApacheバグデータベースをチェックしてください。加えて、http://httpd.apache.org/userslist.htmlのメーリングリストで、Apacheのユーザコミュニティに参加することができます。お勧めできるニュースグループは、comp.infosystems.www.servers.unixです。
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.*ディレクトリを参照してください。
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で参照できます。
29.4.5項 「外部モジュール」で簡単に説明されている外部Apacheモジュールの詳細は、次の場所で入手できます。
mod_perl
mod_php5
mod_python
mod_security
Apacheモジュールの開発、またはApache Webサーバプロジェクトへの参加に関する情報については、次を参照してください。
SUSE Linux Enterprise ServerのApacheに固有な問題が発生した場合は、Technical Information Search (http://www.novell.com/support)を参照してください。Apacheの沿革は、http://httpd.apache.org/ABOUT_APACHE.htmlで参照できます。このページでは、Apacheというサーバ名の由来についても説明しています。