Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第18章 Web サーバー

HTTP (Hypertext Transfer Protocol)サーバーまたは Web サーバー は、Web 経由でクライアントにコンテンツを提供するネットワークサービスです。これは通常 Web ページを指しますが、他のドキュメントも当てはまります。
Red Hat Enterprise Linux 6 で利用可能な Web サーバーは以下のとおりです。
  • Apache HTTP サーバー
  • nginx
重要
nginx Web サーバーは、Red Hat Enterprise Linux 6 の Software Collection としてのみ利用できます。nginx へのアクセスや Software Collections の使用などの詳細は、『 Red Hat Software Collections リリースノート』を参照してください。

18.1. Apache HTTP サーバー

本セクションでは、Red Hat Enterprise Linux 6nbsp;Hat Enterprise Linux 6nbsp;Linux 6nbsp;6 に含まれる Apache HTTP Server 2.2Apache Software Foundation により開発された堅牢な完全機能のオープンソース Web サーバー)を説明します。ここでは、httpd サービスの基本設定について説明し、サーバーモジュールの追加、仮想ホストの設定、セキュアな HTTP サーバーの設定など、高度なトピックを説明します。
Apache HTTP Server 2.2 とバージョン 2.0 には重要な違いがあり、Red Hat Enterprise Linuxnbsp;Hat Enterprise Linuxnbsp;Linux の以前のリリースからアップグレードする場合は、適切に httpd サービス設定を更新する必要があります。本セクションでは、新たに追加された機能の一部、重要な変更の概要、古い設定ファイルの更新について説明します。

18.1.1. 新機能

Apache HTTP Server バージョン 2.2 では、以下の機能強化が追加されました。
  • mod_cache および mod_disk_cache のキャッシュモジュール(つまり mod_cache および mod_disk_cache )が改善されました。
  • プロキシー負荷分散、つまり mod_proxy_balancer モジュールのサポート。
  • 32 ビットアーキテクチャーにおける大規模なファイルのサポートにより、Web サーバーは 2GB を超えるファイルを処理できます。
  • 認証および承認サポートの新しい構造。以前のバージョンで提供される認証モジュールを置き換えます。

18.1.2. 主な変更点

バージョン 2.0 以降、デフォルトの httpd サービス設定にいくつかの変更が加えられました。
  • mod_cern_meta および mod_asis はデフォルトでロードされなくなりました。
  • 以下のモジュールは、デフォルトで mod_ext_filter によりロードされます。

18.1.3. 設定の更新

Apache HTTP Server バージョン 2.0 から設定ファイルを更新するには、以下の手順を行います。
  1. モジュールは変更されている可能性があるため、すべてのモジュール名が正しいことを確認してください。名前が変更された各モジュールの LoadModule ディレクティブを調整します。
  2. サードパーティーのモジュールは、読み込みを試みる前にすべて再コンパイルをします。これは一般的に認証と権限付与のモジュールに該当します。
  3. mod_userdir モジュールを使用する場合は、ディレクトリー名(通常は public_html)を示す UserDir ディレクティブが指定されていることを確認してください。
  4. Apache HTTP Secure Server を使用する場合は、Secure Sockets Layer (SSL) プロトコルの有効化に関する重要な情報について 「mod_ssl モジュールの有効化」 を参照してください。
以下のコマンドを使用すると、設定エラーを確認できます。
~]# service httpd configtest
Syntax OK
Apache HTTP Server 設定をバージョン 2.0 から 2.2 にアップグレードする方法は、を参照してください http://httpd.apache.org/docs/2.2/upgrading.html

18.1.4. httpd サービスの実行

本セクションでは、Apache HTTP Server の起動、停止、再起動、および現在のステータスの確認を行う方法を説明します。httpd サービスを使用するには、httpd がインストールされていることを確認してください。これを行うには、次のコマンドを使用します。
~]# yum install httpd
ランレベルの概念と Red Hat Enterprise Linuxnbsp;Hat Enterprise Linuxnbsp;Linux でシステムサービスを管理する方法は、12章サービスおよびデーモン を参照してください。

18.1.4.1. サービスの起動

httpd サービスを実行する場合は、root で次のコマンドを実行します。
~]# service httpd start
Starting httpd:                                            [  OK  ]
システムの起動時にサービスを自動的に起動するようにするには、以下のコマンドを使用します。
~]# chkconfig httpd on
これにより、ランレベル 2、3、4、および 5 に対してサービスが有効になります。または、「サービスの有効化および無効化」 の説明に従って Service Configuration ユーティリティーを使用できます。
セキュアなサーバーの使用
Apache HTTP サーバーをセキュアサーバーとして実行している場合は、暗号化したプライベートの SSL キーを使用すると、マシンが起動した後にパスワードが要求される可能性があります。

18.1.4.2. サービスの停止

実行中の httpd サービスを停止するには、root で次のコマンドを実行します。
~]# service httpd stop
Stopping httpd:                                            [  OK  ]
システムの起動時にサービスが自動的に起動しないようにするには、以下を入力します。
~]# chkconfig httpd off
これにより、すべてのランレベルでサービスが無効になります。または、「サービスの有効化および無効化」 の説明に従って Service Configuration ユーティリティーを使用できます。

18.1.4.3. サービスの再起動

実行中の httpd サービスを再起動する方法は、3 通りあります。
  1. サービスを完全に再起動するには、root で次のコマンドを実行します。
    ~]# service httpd restart
    Stopping httpd:                                            [  OK  ]
    Starting httpd:                                            [  OK  ]
    これにより、稼働中の httpd サービスが停止し、すぐに再起動します。このコマンドは、PHP など、動的に読み込んだモジュールをインストールまたは削除した後に使用します。
  2. 設定のリロードだけを行うには、root で以下を入力します。
    ~]# service httpd reload
    これにより、実行中の httpd サービスが設定ファイルを再読み込みします。現在処理中のリクエストはすべて割り込みされるため、クライアントのブラウザーはエラーメッセージを表示したり、ページの一部をレンダリングしたりする可能性があります。
  3. アクティブなリクエストに影響を与えずに設定を再読み込みするには、root で次のコマンドを実行します。
    ~]# service httpd graceful
    これにより、実行中の httpd サービスが設定ファイルを再読み込みします。現在処理されているリクエストでは、古い設定が使用されます。
または、「サービスの起動、再起動、停止」 の説明に従って Service Configuration ユーティリティーを使用できます。

18.1.4.4. サービスステータスの確認

httpd サービスが実行していることを確認するには、シェルプロンプトで以下を入力します。
~]# service httpd status
httpd (pid 19014) is running...
または、「Service 設定ユーティリティーの使用」 の説明に従って Service Configuration ユーティリティーを使用できます。

18.1.5. 設定ファイルの編集

httpd サービスが起動すると、デフォルトでは、表18.1「httpd サービスの設定ファイル」 に記載されている場所から設定が読み込まれます。

表18.1 httpd サービスの設定ファイル

パス 説明
/etc/httpd/conf/httpd.conf 主要設定ファイル。
/etc/httpd/conf.d/ 主要設定ファイル内に含まれている設定ファイル用の補助ディレクトリー。
デフォルト設定はほとんどの状況に適していますが、重要な設定オプションをいくつか知っておくと役に立ちます。変更を有効にするには、web サーバーを再起動する必要があることに注意してください。httpd サービスを再起動する方法は、「サービスの再起動」 を参照してください。
設定に誤りがないことを確認するには、シェルプロンプトで以下のコマンドを実行します。
~]# service httpd configtest
Syntax OK
ファイルの変更に失敗してもすぐにやり直せるように、ファイルを編集する前にコピーを作成しておくことをお勧めします。

18.1.5.1. 一般的な httpd.conf ディレクティブ

以下のディレクティブは、一般的に /etc/httpd/conf/httpd.conf 設定ファイルで使用されます。
<Directory>
&lt ;Directory&gt; ディレクティブを使用すると、特定のディレクティブを特定のディレクトリーにのみ適用できます。以下の形式を取ります。
<Directory directory>
  directive
  …
</Directory>
ディレクトリー は、ローカルファイルシステム内の既存のディレクトリーへの完全パスまたはワイルドカード式のいずれかになります。
このディレクティブは、ScriptAlias で指定されたディレクトリー外にあるサーバー側のスクリプトに追加の cgi-bin ディレクトリーを設定するために使用できます。この場合、ExecCGI ディレクティブおよび AddHandler ディレクティブを指定し、ターゲットディレクトリーのパーミッションを正しく設定する必要があります(つまり 0755)。

例18.1 <Directory> ディレクティブの使用

<Directory /var/www/html>
  Options Indexes FollowSymLinks
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>
<IfDefine>
IfDefine ディレクティブでは、特定のパラメーターがコマンドラインに提供されている場合に限り、特定のディレクティブを使用できます。以下の形式を取ります。
<IfDefine [!]parameter>
  directive
  …
</IfDefine>
パラメーター は、-Dパラメーター コマンドラインオプション(例: httpd -DEnableHome)を使用してシェルプロンプトに指定できます。オプションの感嘆符(つまり !)が存在する場合、囲まれたディレクティブはパラメーターが指定されて いない 場合にのみ使用されます。

例18.2 <IfDefine> ディレクティブの使用

<IfDefine EnableHome>
  UserDir public_html
</IfDefine>
<IfModule>
&lt ;IfModule> ディレクティブを使用すると、特定のモジュールがロードされる場合にのみ特定のディレクティブを使用できます。以下の形式を取ります。
<IfModule [!]module>
  directive
  …
</IfModule>
モジュール は名前またはファイル名で識別できます。オプションの感嘆符(つまり !)が存在する場合は、モジュールがロードされて いない 場合にのみ囲まれたディレクティブが使用されます。

例18.3 <IfModule> ディレクティブの使用

<IfModule mod_disk_cache.c>
  CacheEnable disk /
  CacheRoot /var/cache/mod_proxy
</IfModule>
<location>
&lt ;Location&gt; ディレクティブを使用すると、特定のディレクティブを特定の URL のみに適用できます。以下の形式を取ります。
<Location url>
  directive
  …
</Location>
url は、DocumentRoot ディレクティブ( /server-infoなど)で指定されたディレクトリーに対する相対パス、または http://example.com/server-info などの外部 URL のいずれかになります。

例18.4 <Location> ディレクティブの使用

<Location /server-info>
  SetHandler server-info
  Order deny,allow
  Deny from all
  Allow from .example.com
</Location>
<Proxy>
&lt ;Proxy&gt; ディレクティブを使用すると、特定のディレクティブをプロキシーサーバーにのみ適用できます。以下の形式を取ります。
<Proxy pattern>
  directive
  …
</Proxy>
パターン は外部 URL またはワイルドカード式( http://example.com/*など)にすることができます。

例18.5 <Proxy> ディレクティブの使用

<Proxy *>
  Order deny,allow
  Deny from all
  Allow from .example.com
</Proxy>
<VirtualHost>
&lt ;VirtualHost> ディレクティブを使用すると、特定のディレクティブを特定の仮想ホストにのみ適用できます。以下の形式を取ります。
<VirtualHost address[:port]…>
  directive
  …
</VirtualHost>
アドレス は、表18.2「利用可能な <VirtualHost> オプション」 に記載されているように、IP アドレス、完全修飾ドメイン名、または特別な形式になります。

表18.2 利用可能な <VirtualHost> オプション

オプション 説明
* すべての IP アドレスを表します。
_default_ 一致しない IP アドレスを表します。

例18.6 <VirtualHost> ディレクティブの使用

<VirtualHost *:80>
  ServerAdmin webmaster@penguin.example.com
  DocumentRoot /www/docs/penguin.example.com
  ServerName penguin.example.com
  ErrorLog logs/penguin.example.com-error_log
  CustomLog logs/penguin.example.com-access_log common
</VirtualHost>
AccessFileName
AccessFileName ディレクティブを使用すると、各ディレクトリーのアクセス制御情報をカスタマイズするために使用するファイルを指定できます。以下の形式を取ります。
AccessFileName filename
ファイル は、要求されたディレクトリーで検索するファイルの名前です。デフォルトでは、サーバーは .htaccess を検索します。
セキュリティー上の理由から、ディレクティブの後に Files タグを付け、.ht で始まるファイルが Web クライアントによってアクセスされないようにします。これには、.htaccess および .htpasswd ファイルが含まれます。

例18.7 AccessFileName ディレクティブの使用

AccessFileName .htaccess

<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
  Satisfy All
</Files>
アクション
Action ディレクティブにより、特定のメディアタイプが要求されるときに実行される CGI スクリプトを指定できます。以下の形式を取ります。
Action content-type path
content-type は、text/htmlimage/pngapplication/pdf などの有効な MIME タイプである必要があります。パス は既存の CGI スクリプトを参照し、DocumentRoot ディレクティブで指定されたディレクトリーに対して相対的である必要があります(例: /cgi-bin/process-image.cgi)。

例18.8 Action ディレクティブの使用

Action image/png /cgi-bin/process-image.cgi
AddDescription
AddDescription ディレクティブを使用すると、指定のファイルについてのサーバー生成ディレクトリー一覧に表示する簡単な説明を指定できます。以下の形式を取ります。
AddDescription "description" filename
この 説明 は、二重引用符(つまり ")で囲まれた短いテキストである必要があります。ファイル名 は、完全なファイル名、ファイル拡張子、またはワイルドカード式を使用できます。

例18.9 AddDescription ディレクティブの使用

AddDescription "GZIP compressed tar archive" .tgz
AddEncoding
AddEncoding ディレクティブを使用すると、特定のファイル拡張子のエンコーディングタイプを指定できます。以下の形式を取ります。
AddEncoding encoding extension
エンコーディング は、x-compressx-gzip などの有効な MIME エンコーディングである必要があります。拡張機能 は大文字と小文字を区別するファイル拡張子で、従来は先頭のドット( .gzなど)で記述されます。
このディレクティブは通常、ダウンロード時に特定のファイルタイプを圧縮解除するように Web ブラウザーに指示するために使用されます。

例18.10 AddEncoding ディレクティブの使用

AddEncoding x-gzip .gz .tgz
AddHandler
AddHandler ディレクティブを使用すると、特定のファイル拡張子を選択したハンドラーにマップできます。以下の形式を取ります。
AddHandler handler extension
ハンドラー は、以前に定義したハンドラーの名前である必要があります。拡張機能 は大文字と小文字を区別するファイル拡張子で、従来は先頭のドット( .cgiなど)で記述されます。
このディレクティブは通常、.cgi 拡張子を持つファイルを CGI スクリプトとして処理するために使用されます。さらに、これは一般的に、サーバー解析された HTML および image-map ファイルを処理するためにも使用されます。

例18.11 AddHandler オプションの使用

AddHandler cgi-script .cgi
AddIcon
AddIcon ディレクティブを使用すると、サーバー生成ディレクトリーの一覧の特定ファイルに表示されるアイコンを指定できます。以下の形式を取ります。
AddIcon path pattern
パス は既存のアイコンファイルを参照し、DocumentRoot ディレクティブで指定されたディレクトリーに対して相対的である必要があります(例: /icons/folder.png)。パターン は、ファイル名、ファイル拡張子、ワイルドカード式、または以下の表に記載されている特別な形式になります。

表18.3 利用可能な AddIcon オプション

オプション 説明
^^DIRECTORY^^ ディレクトリーを表します。
^^BLANKICON^^ 空の行を表します。

例18.12 AddIcon ディレクティブの使用

AddIcon /icons/text.png .txt README
AddIconByEncoding
AddIconByEncoding ディレクティブを使用すると、サーバー生成ディレクトリー一覧で特定のエンコーディングタイプに対して表示されるアイコンを指定できます。以下の形式を取ります。
AddIconByEncoding path encoding
パス は既存のアイコンファイルを参照し、DocumentRoot ディレクティブで指定されたディレクトリーに対して相対的である必要があります(例: /icons/compressed.png)。エンコーディング は、x-compressx-gzip などの有効な MIME エンコーディングである必要があります。

例18.13 AddIconByEncoding ディレクティブの使用

AddIconByEncoding /icons/compressed.png x-compress x-gzip
AddIconByType
AddIconByType ディレクティブを使用すると、サーバー生成ディレクトリー一覧の特定のメディアタイプについて表示されるアイコンを指定できます。以下の形式を取ります。
AddIconByType path content-type
パス は既存のアイコンファイルを参照し、DocumentRoot ディレクティブで指定されたディレクトリーに対して相対的である必要があります(例: /icons/text.png)。content-type は、有効な MIME タイプ(例: text/html または image/png)か、text/ *、image/* などのワイルドカード式のいずれかである必要があります。

例18.14 AddIconByType ディレクティブの使用

AddIconByType /icons/video.png video/*
AddLanguage
AddLanguage ディレクティブを使用すると、ファイル拡張子を特定の言語に関連付けることができます。以下の形式を取ります。
AddLanguage language extension
言語 は、csenfr などの有効な MIME 言語である必要があります。拡張機能 は大文字と小文字を区別するファイル拡張子で、従来は先頭のドット( .csなど)で記述されます。
このディレクティブは、クライアントの言語設定に基づいて複数の言語でコンテンツを提供する Web サーバーに特に便利です。

例18.15 AddLanguage ディレクティブの使用

AddLanguage cs .cs .cz
AddType
AddType ディレクティブを使用すると、特定のファイル拡張子のメディアタイプを定義または上書きできます。以下の形式を取ります。
AddType content-type extension
content-type は、text/htmlimage/png 等の有効な MIME タイプである必要があります。拡張機能 は大文字と小文字を区別するファイル拡張子で、従来は先頭のドット( .csなど)で記述されます。

例18.16 AddType ディレクティブの使用

AddType application/x-gzip .gz .tgz
Alias
Alias ディレクティブを使用すると、DocumentRoot ディレクティブで指定されたデフォルトディレクトリー外のファイルおよびディレクトリーを参照できます。以下の形式を取ります。
Alias url-path real-path
url-pathDocumentRoot ディレクティブで指定されたディレクトリーに対して相対的である必要があります(例: /images/)。リアルタイムパス は、ローカルファイルシステム内のファイルまたはディレクトリーへの完全パスです。
このディレクティブの後には、通常、ターゲットディレクトリーにアクセスするための追加のパーミッションを持つ Directory タグが続きます。デフォルトでは、/icons/ エイリアスが作成され、/var/www/icons/ からのアイコンがサーバー生成ディレクトリー一覧に表示されます。

例18.17 Alias ディレクティブの使用

Alias /icons/ /var/www/icons/

<Directory "/var/www/icons">
  Options Indexes MultiViews FollowSymLinks
  AllowOverride None
  Order allow,deny
  Allow from all
<Directory>
許可
Allow ディレクティブでは、指定のディレクトリーにアクセスするパーミッションがあるクライアントを指定できます。以下の形式を取ります。
Allow from client
クライアント は、ドメイン名、IP アドレス(フルおよびパーシャルの両方)、ネットワーク/ネットマスク のペア、またはすべてのクライアントの すべて になります。

例18.18 Allow ディレクティブの使用

Allow from 192.168.1.0/255.255.255.0
AllowOverride
AllowOverride ディレクティブを使用すると、.htaccess ファイルのディレクティブがデフォルト設定を上書きできます。以下の形式を取ります。
AllowOverride type
この タイプ は、表18.4「利用可能な AllowOverride オプション」 で説明されているように、利用可能なグルーピングオプションの 1 つである必要があります。

表18.4 利用可能な AllowOverride オプション

オプション 説明
すべて .htaccess のすべてのディレクティブは、以前の設定を上書きすることができます。
なし .htaccess のディレクティブは、以前の設定を上書きすることはできません。
AuthConfig AuthNameAuthType、または Require などの承認ディレクティブを使用できます。
FileInfo DefaultTypeRequestHeader、または RewriteEngine、および Action ディレクティブなどのファイルタイプ、メタデータ、および mod_rewrite ディレクティブを使用できます。
Indexes AddDescriptionAddIcon、または FancyIndexing などのディレクトリーインデックスディレクティブの使用を許可します。
制限 ホストアクセスディレクティブを許可します。つまり、AllowDeny、および Order を使用できます。
options [=オプション,…] Options ディレクティブを使用できます。さらに、このディレクティブを使用して設定できるオプションをカスタマイズするオプションのコンマ区切りリストを指定することもできます。

例18.19 AllowOverride ディレクティブの使用

AllowOverride FileInfo AuthConfig Limit
BrowserMatch
BrowserMatch ディレクティブを使用すると、クライアントの Web ブラウザータイプに基づいてサーバーの動作を変更できます。以下の形式を取ります。
BrowserMatch pattern variable
この パターン は、User-Agent HTTP header フィールドに一致する正規表現です。変数 は、header フィールドがパターンと一致する場合に設定される環境変数です。
デフォルトでは、このディレクティブは既知の問題のある特定のブラウザーへの接続を拒否するために使用され、これらのアクションで問題が発生することがわかっているブラウザーの keepalives および HTTP ヘッダーのフラッシュを無効にします。

例18.20 BrowserMatch ディレクティブの使用

BrowserMatch "Mozilla/2" nokeepalive
CacheDefaultExpire
CacheDefaultExpire オプションでは、有効期限のないドキュメント、または最後の変更日がないドキュメントをキャッシュする期間を設定できます。以下の形式を取ります。
CacheDefaultExpire time
時間 は秒単位で指定します。デフォルトのオプションは 3600 (1 時間)です。

例18.21 CacheDefaultExpire ディレクティブの使用

CacheDefaultExpire 3600
CacheDisable
CacheDisable ディレクティブを使用すると、特定の URL のキャッシュを無効にできます。以下の形式を取ります。
CacheDisable path
パスDocumentRoot ディレクティブで指定されたディレクトリーに対して相対的である必要があります(例: /files/)。

例18.22 CacheDisable ディレクティブの使用

CacheDisable /temporary
CacheEnable
CacheEnable ディレクティブを使用すると、特定の URL に使用するキャッシュタイプを指定できます。以下の形式を取ります。
CacheEnable type url
表18.5「利用可能なキャッシュタイプ」 の説明に従って、タイプ は有効なキャッシュタイプである必要があります。url には、DocumentRoot ディレクティブ(例: /images/)で指定されたディレクトリーに対する相対パス、プロトコル( ftp:// など)、または http://example.com/ などの外部 URL を使用できます。

表18.5 利用可能なキャッシュタイプ

タイプ 説明
mem メモリーベースのストレージマネージャー。
disk ディスクベースのストレージマネージャー。
fd ファイル記述子キャッシュ。

例18.23 CacheEnable ディレクティブの使用

CacheEnable disk /
CacheLastModifiedFactor
CacheLastModifiedFactor ディレクティブでは、有効期限が指定されていないドキュメントをキャッシュする時間をカスタマイズできますが、最終変更日に関する情報が提供されます。以下の形式を取ります。
CacheLastModifiedFactor number
この は、ドキュメントの最終更新以降に渡された時間を掛けて乗算するために使用されます。デフォルトのオプションは 0.1 (10 分の 1)です。

例18.24 CacheLastModifiedFactor ディレクティブの使用

CacheLastModifiedFactor 0.1
CacheMaxExpire
CacheMaxExpire ディレクティブを使用すると、ドキュメントをキャッシュする最大時間を指定できます。以下の形式を取ります。
CacheMaxExpire time
時間 は秒単位で指定します。デフォルトのオプションは 86400 (1 日)です。

例18.25 CacheMaxExpire ディレクティブの使用

CacheMaxExpire 86400
CacheNegotiatedDocs
CacheNegotiatedDocs ディレクティブを使用すると、コンテンツに基づいてネゴシエートされたドキュメントのキャッシュを有効にできます。以下の形式を取ります。
CacheNegotiatedDocs option
この オプション は、表18.6「利用可能な CacheNegotiatedDocs オプション」 の説明に従って、有効なキーワードである必要があります。コンテンツネゴシエートされたドキュメントは時間の経過と共に変化するか、または要求側の入力により変更される可能性があるため、デフォルトのオプションは Off です。

表18.6 利用可能な CacheNegotiatedDocs オプション

オプション 説明
オン コンテンツネゴシエートされたドキュメントのキャッシュを有効にします。
オフ コンテンツネゴシエートされたドキュメントのキャッシュを無効にします。

例18.26 CacheNegotiatedDocs ディレクティブの使用

CacheNegotiatedDocs On
CacheRoot
CacheRoot ディレクティブを使用すると、キャッシュファイルを保存するディレクトリーを指定できます。以下の形式を取ります。
CacheRoot directory
ディレクトリー は、ローカルファイルシステム内の既存のディレクトリーへの完全パスである必要があります。デフォルトのオプションは /var/cache/mod_proxy/ です。

例18.27 CacheRoot ディレクティブの使用

CacheRoot /var/cache/mod_proxy
CustomLog
CustomLog ディレクティブを使用すると、ログファイル名とログファイルの形式を指定できます。以下の形式を取ります。
CustomLog path format
パス はログファイルを参照し、ServerRoot ディレクティブ(デフォルトでは /etc/httpd/ )で指定されたディレクトリーに対して相対的である必要があります。形式 は、明示的な形式の文字列、または LogFormat ディレクティブを使用して以前に定義したフォーマット名のいずれかである必要があります。

例18.28 CustomLog ディレクティブの使用

CustomLog logs/access_log combined
DefaultIcon
DefaultIcon ディレクティブでは、他のアイコンが関連付けられていない場合に、サーバー生成ディレクトリー一覧のファイルに表示されるアイコンを指定できます。以下の形式を取ります。
DefaultIcon path
パス は既存のアイコンファイルを参照し、DocumentRoot ディレクティブで指定されたディレクトリーに対して相対的である必要があります(例: /icons/unknown.png)。

例18.29 DefaultIcon ディレクティブの使用

DefaultIcon /icons/unknown.png
DefaultType
DefaultType ディレクティブでは、適切な MIME タイプをサーバーで判断できない場合に使用するメディアタイプを指定できます。以下の形式を取ります。
DefaultType content-type
content-type は、text/htmlimage/pngapplication/pdf など、有効な MIME タイプである必要があります。

例18.30 DefaultType ディレクティブの使用

DefaultType text/plain
拒否
Deny ディレクティブを使用すると、指定のディレクトリーへのアクセスを拒否しているクライアントを指定できます。以下の形式を取ります。
Deny from client
クライアント は、ドメイン名、IP アドレス(フルおよびパーシャルの両方)、ネットワーク/ネットマスク のペア、またはすべてのクライアントの すべて になります。

例18.31 Deny ディレクティブの使用

Deny from 192.168.1.1
DirectoryIndex
DirectoryIndex ディレクティブでは、ディレクトリーが要求される際にクライアントに提供されるドキュメントを指定できます(つまり、URL が / 文字で終了する場合)。以下の形式を取ります。
DirectoryIndex filename
ファイル は、要求されたディレクトリーで検索するファイルの名前です。デフォルトでは、サーバーは index.htmlindex.html.var を検索します。

例18.32 DirectoryIndex ディレクティブの使用

DirectoryIndex index.html index.html.var
DocumentRoot
DocumentRoot ディレクティブを使用すると、コンテンツを提供するメインディレクトリーを指定できます。以下の形式を取ります。
DocumentRoot directory
ディレクトリー は、ローカルファイルシステム内の既存のディレクトリーへの完全パスである必要があります。デフォルトのオプションは /var/www/html/ です。

例18.33 DocumentRoot ディレクティブの使用

DocumentRoot /var/www/html
ErrorDocument
ErrorDocument ディレクティブを使用すると、特定のエラーへの応答として表示するドキュメントまたはメッセージを指定できます。以下の形式を取ります。
ErrorDocument error-code action
error-code403 (Forbidden)、404 (Not Found)、または 500 (Internal Server Error)などの有効なコードである必要があります。アクション は、URL(ローカルおよび外部の両方)または二重引用符(つまり ")で囲まれたメッセージ文字列のいずれかになります。

例18.34 ErrorDocument ディレクティブの使用

ErrorDocument 403 "Access Denied"
ErrorDocument 404 /404-not_found.html
ErrorLog
ErrorLog ディレクティブを使用すると、サーバーエラーがログに記録されるファイルを指定できます。以下の形式を取ります。
ErrorLog path
パス はログファイルを参照し、ServerRoot ディレクティブ(デフォルトは /etc/httpd/ )で指定されたディレクトリーへの相対パスのいずれかです。デフォルトのオプションは logs/error_logです。

例18.35 ErrorLog ディレクティブの使用

ErrorLog logs/error_log
ExtendedStatus
ExtendedStatus ディレクティブを使用すると、詳細なサーバーステータス情報を有効にできます。以下の形式を取ります。
ExtendedStatus option
この オプション は、表18.7「利用可能な ExtendedStatus オプション」 の説明に従って、有効なキーワードである必要があります。デフォルトのオプションは Off です。

表18.7 利用可能な ExtendedStatus オプション

オプション 説明
オン 詳細なサーバーステータスの生成を有効にします。
オフ 詳細なサーバーステータスの生成を無効にします。

例18.36 ExtendedStatus ディレクティブの使用

ExtendedStatus On
グループ
Group ディレクティブを使用すると、httpd サービスを実行するグループを指定できます。以下の形式を取ります。
Group group
この グループ は既存の UNIX グループである必要があります。デフォルトのオプションは apache です。
Group は < VirtualHost> 内で はサポートされなくなり、SuexecUserGroup ディレクティブに置き換えられました。

例18.37 Group ディレクティブの使用

Group apache
HeaderName
HeaderName ディレクティブを使用すると、サーバー生成ディレクトリーリストの最初に付加されるファイルを指定できます。以下の形式を取ります。
HeaderName filename
ファイル は、要求されたディレクトリーで検索するファイルの名前です。デフォルトでは、サーバーは HEADER.html を検索します。

例18.38 HeaderName ディレクティブの使用

HeaderName HEADER.html
HostnameLookups
HostnameLookups ディレクティブを使用すると、IP アドレスの自動解決を有効にできます。以下の形式を取ります。
HostnameLookups option
この オプション は、表18.8「利用可能な HostnameLookups オプション」 の説明に従って、有効なキーワードである必要があります。サーバーのリソースを確保するため、デフォルトのオプションは Off です。

表18.8 利用可能な HostnameLookups オプション

オプション 説明
オン 各接続の IP アドレスの解決を有効にして、ホスト名をログに記録できるようにします。ただし、これにより処理のオーバーヘッドが大きくなります。
double 二重の逆引き DNS ルックアップの実行を有効にします。上記のオプションと比較すると、処理のオーバーヘッドがさらに追加されます。
オフ 各接続の IP アドレスの解決を無効にします。
サーバーログファイルにホスト名が必要な場合は、DNS ルックアップを実行する多くのログアナライザーツールのいずれかを効率的に使用できます。

例18.39 HostnameLookups ディレクティブの使用

HostnameLookups Off
包含
Include ディレクティブを使用すると、他の設定ファイルを追加できます。以下の形式を取ります。
Include filename
ファイル には、絶対パス、ServerRoot ディレクティブで指定されたディレクトリーに対する相対パス、またはワイルドカード式を使用できます。/etc/httpd/conf.d/ ディレクトリーのすべての設定ファイルは、デフォルトでロードされます。

例18.40 Include ディレクティブの使用

Include conf.d/*.conf
IndexIgnore
IndexIgnore ディレクティブを使用すると、サーバー生成ディレクトリーの一覧から省略されるファイル名の一覧を指定できます。以下の形式を取ります。
IndexIgnore filename
filename オプションは、完全なファイル名またはワイルドカード式のいずれかです。

例18.41 IndexIgnore ディレクティブの使用

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
IndexOptions
IndexOptions ディレクティブを使用すると、サーバー生成ディレクトリー一覧の動作をカスタマイズできます。以下の形式を取ります。
IndexOptions option
この オプション は、表18.9「利用可能なディレクトリー一覧オプション」 の説明に従って、有効なキーワードである必要があります。デフォルトのオプションは Charset=UTF-8FancyIndexingHTMLTableNameWidth=*、および VersionSort です。

表18.9 利用可能なディレクトリー一覧オプション

オプション 説明
charset=encoding 生成された Web ページの文字セットを指定します。エンコーディング は、UTF-8ISO-8859-2 などの有効な文字セットである必要があります。
Type=content-type 生成された Web ページのメディアタイプを指定します。content-type は、text/htmltext/plain などの有効な MIME タイプである必要があります。
DescriptionWidth=value description 列の幅を指定します。 は、幅を自動的に調整する多数の文字またはアスタリスク( *)のいずれかになります。
FancyIndexing 特定のファイルのさまざまなアイコンや、列ヘッダーをクリックしてディレクトリー一覧を再分類できる高度な機能を有効にします。
FolderFirst 最初にディレクトリーの一覧表示を有効にします。常にディレクトリーにファイルを配置してください。
HTMLTable ディレクトリーの一覧への HTML テーブルの使用を有効にします。
IconsAreLinks アイコンをリンクとしての使用を有効にします。
IconHeight=value アイコンの高さを指定します。 は複数のピクセルです。
IconWidth=value アイコンの幅を指定します。 は複数のピクセルです。
IgnoreCase 大文字と小文字を区別する方法でファイルとディレクトリーのソートを有効にします。
IgnoreClient クライアントからのクエリー変数の受け入れを無効にします。
NameWidth=value ファイル名列の幅を指定します。 は、幅を自動的に調整する多数の文字またはアスタリスク( *)のいずれかになります。
ScanHTMLTitles AddDescription ディレクティブでファイルが指定されていない場合に、説明(つまり title 要素)のファイルの解析を有効にします。
ShowForbidden 他のアクセスが制限されているファイルの一覧表示を有効にします。
SuppressColumnSorting 列ヘッダーをクリックして、ディレクトリー一覧の並べ替えを無効にします。
SuppressDescription ファイルの説明のために領域の確保を無効にします。
SuppressHTMLPreamble HeaderName ディレクティブで指定されたファイルが存在する場合に、標準の HTML プリアンブルの使用を無効にします。
SuppressIcon ディレクトリー一覧でアイコンの使用を無効にします。
SuppressLastModified ディレクトリー一覧の最後の変更フィールドの日付の表示を無効にします。
SuppressRules ディレクトリー一覧での水平行の使用を無効にします。
SuppressSize ディレクトリー一覧のファイルサイズフィールドの表示を無効にします。
TrackModified HTTP ヘッダーの Last-Modified および ETag の値の返信を有効にします。
VersionSort 期待した方法でバージョン番号が含まれるファイルのソートを有効にします。
XHTML デフォルトの HTML 3.2 の代わりに XHTML 1.0 の使用を有効にします。

例18.42 IndexOptions ディレクティブの使用

IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
KeepAlive
KeepAlive ディレクティブを使用すると、永続的な接続を有効にできます。以下の形式を取ります。
KeepAlive option
この オプション は、表18.10「利用可能な KeepAlive オプション」 の説明に従って、有効なキーワードである必要があります。デフォルトのオプションは Off です。

表18.10 利用可能な KeepAlive オプション

オプション 説明
オン 永続的な接続を有効にします。この場合、サーバーは接続ごとに複数のリクエストを受け入れます。
オフ キープアライブ接続を無効にします。
永続的な接続が有効になっていると、ビジーなサーバーで子プロセスの数がすぐに増大し、最終的に最大限度に達するため、サーバーが大幅に低下することに注意してください。リスクを軽減するには、KeepAliveTimeout をより小さい値に設定し、/var/log/httpd/logs/error_log ログファイルを注意して監視することを推奨します。

例18.43 KeepAlive ディレクティブの使用

KeepAlive Off
KeepAliveTimeout
KeepAliveTimeout ディレクティブでは、接続を閉じる前に別の要求を待つ時間を指定できます。以下の形式を取ります。
KeepAliveTimeout time
時間 は秒単位で指定します。デフォルトのオプションは 15 です。

例18.44 KeepAliveTimeout ディレクティブの使用

KeepAliveTimeout 15
LanguagePriority
LanguagePriority ディレクティブでは、言語の優先順位をカスタマイズできます。以下の形式を取ります。
LanguagePriority language
言語 は、csenfr などの有効な MIME 言語である必要があります。
このディレクティブは、クライアントの言語設定に基づいて複数の言語でコンテンツを提供する Web サーバーに特に便利です。

例18.45 LanguagePriority ディレクティブの使用

LanguagePriority sk cs en
listen
Listen ディレクティブでは、リッスンする IP アドレスまたはポートを指定できます。以下の形式を取ります。
Listen [ip-address:]port [protocol]
ip-address はオプションで、指定しない限り、サーバーはすべての IP アドレスからの指定の ポート で着信要求を受け入れます。プロトコル はポート番号から自動的に決定されるため、通常は省略可能です。デフォルトオプションでは、ポート 80 をリッスンします。
サーバーが 1024 未満のポートをリッスンするように設定されている場合は、スーパーユーザーだけが httpd サービスを起動することができることに注意してください。

例18.46 Listen ディレクティブの使用

Listen 80
LoadModule
LoadModule ディレクティブを使用すると、DSO( Dynamic Shared Object )モジュールを読み込むことができます。以下の形式を取ります。
LoadModule name path
名前 は、必要なモジュールの有効な識別子である必要があります。パス は既存のモジュールファイルを参照し、ライブラリーを配置するディレクトリーに対して相対的である必要があります(32 ビットの場合は /usr/lib/httpd/、デフォルトでは 64 ビットシステムの場合は /usr/lib/httpd/ )。
Apache HTTP Server の DSO サポートの詳細は、「モジュールの使用」 を参照してください。

例18.47 LoadModule ディレクティブの使用

LoadModule php5_module modules/libphp5.so
LogFormat
LogFormat ディレクティブでは、ログファイルの形式を指定できます。以下の形式を取ります。
LogFormat format name
形式 は、表18.11「一般的な LogFormat オプション」 で説明されているオプションで構成される文字列です。名前CustomLog ディレクティブの形式文字列の代わりに使用できます。

表18.11 一般的な LogFormat オプション

オプション 説明
%b 応答のサイズ(バイト単位)を表します。
%h リモートクライアントの IP アドレスまたはホスト名を表します。
%l 指定されている場合はリモートログ名を表します。そうでない場合は、代わりにハイフン(つまり -)が使用されます。
%r ブラウザーまたはクライアントから送信される要求文字列の最初の行を表します。
%s ステータスコードを表します。
%t リクエストの日付と時間を表します。
%u 認証が必要な場合は、リモートユーザーを表します。そうでない場合は、代わりにハイフン(つまり -)が使用されます。
%{field} HTTP ヘッダー フィールド の内容を表します。一般的なオプションには、%{Referer} (クライアントをサーバーに接続する Web ページの URL)および %{User-Agent} (リクエストを行う Web ブラウザーのタイプ)が含まれます。

例18.48 LogFormat ディレクティブの使用

LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogLevel
LogLevel ディレクティブを使用すると、エラーログの詳細レベルをカスタマイズできます。以下の形式を取ります。
LogLevel option
この オプション は、表18.12「利用可能な logLevel オプション」 の説明に従って、有効なキーワードである必要があります。デフォルトのオプションは warn です。

表18.12 利用可能な logLevel オプション

オプション 説明
emerg サーバーが作業を実行できない場合、緊急の状況のみがログに記録されます。
alert 即時アクションが必要なときのすべての状況がログに記録される。
crit 重大な状態はすべてログに記録されます。
error すべてのエラーメッセージがログに記録されます。
warn すべての警告メッセージがログに記録されます。
notice 正常であっても、重要な状況はログに記録されます。
info さまざまな情報メッセージがログに記録されます。
debug さまざまなデバッグメッセージがログに記録されます。

例18.49 LogLevel ディレクティブの使用

LogLevel warn
MaxKeepAliveRequests
MaxKeepAliveRequests ディレクティブでは、永続的な接続の要求の最大数を指定できます。以下の形式を取ります。
MaxKeepAliveRequests number
値が大きいと、サーバーのパフォーマンスが向上することがあります。0 を使用すると、要求数が無制限になることに注意してください。デフォルトオプションは 100 です。

例18.50 MaxKeepAliveRequests オプションの使用

MaxKeepAliveRequests 100
NameVirtualHost
NameVirtualHost ディレクティブを使用すると、名前ベースの仮想ホストの IP アドレスとポート番号を指定できます。以下の形式を取ります。
NameVirtualHost ip-address[:port]
ip-address は、すべてのインターフェースを表す完全な IP アドレス、またはアスタリスク( *)のいずれかになります。IPv6 アドレスは角括弧( [ および ])で囲む必要があることに注意してください。ポート はオプションです。
名前ベースの仮想ホストを使用すると、1 つの Apache HTTP Server が複数の IP アドレスを使用せずに異なるドメインに対応できます。
セキュアな HTTP 接続の使用
名前ベースの仮想ホストは、セキュアでない HTTP 接続で のみ 機能します。セキュアなサーバーで仮想ホストを使用する場合は、代わりに IP アドレスベースの仮想ホストを使用してください。

例18.51 NameVirtualHost ディレクティブの使用

NameVirtualHost *:80
オプション
Options ディレクティブでは、特定のディレクトリーで利用可能なサーバー機能を指定できます。以下の形式を取ります。
Options option
この オプション は、表18.13「利用可能なサーバー機能」 の説明に従って、有効なキーワードである必要があります。

表18.13 利用可能なサーバー機能

オプション 説明
ExecCGI CGI スクリプトの実行を有効にします。
FollowSymLinks ディレクトリーの以下のシンボリックリンクを有効にします。
インクルード (Include) サーバー側のインクルードを有効にします。
IncludesNOEXEC サーバー側のインクルードを有効にしますが、コマンドの実行はできません。
Indexes サーバー生成ディレクトリーの一覧を有効にします。
MultiViews コンテンツネゴシエートされた 複数ビュー を有効にします。
SymLinksIfOwnerMatch リンクとターゲットファイルの両方に同じ所有者がある場合は、ディレクトリー内の以下のシンボリックリンクを有効にします。
すべて 複数のビュー 以外の上記のすべての機能を有効にします。
なし 上記のすべての機能を無効にします。
重要
SymLinksIfOwnerMatch オプションは、攻撃者が迂回できるためセキュリティー機能ではありません。

例18.52 Options ディレクティブの使用

Options Indexes FollowSymLinks
順序
Order ディレクティブでは、Allow ディレクティブおよび Deny ディレクティブを評価する順番を指定できます。以下の形式を取ります。
Order option
この オプション は、表18.14「利用可能な順序オプション」 の説明に従って、有効なキーワードである必要があります。デフォルトのオプションは allow,deny です。

表18.14 利用可能な順序オプション

オプション 説明
allow,deny 使用 できる ディレクティブは最初に評価されます。
deny,allow deny ディレクティブが最初に評価されます。

例18.53 Order ディレクティブの使用

Order allow,deny
PidFile
PidFile ディレクティブでは、サーバーの プロセス ID (PID)を保存するファイルを指定できます。以下の形式を取ります。
PidFile path
パス は pid ファイルを参照します。これは、ServerRoot ディレクティブ(デフォルトでは /etc/httpd/ )で指定されたディレクトリーへの相対または相対パスになります。デフォルトのオプションは run/httpd.pid です。

例18.54 PidFile ディレクティブの使用

PidFile run/httpd.pid
ProxyRequests
ProxyRequests ディレクティブを使用すると、転送プロキシー要求を有効にすることができます。以下の形式を取ります。
ProxyRequests option
この オプション は、表18.15「利用可能な ProxyRequests オプション」 の説明に従って、有効なキーワードである必要があります。デフォルトのオプションは Off です。

表18.15 利用可能な ProxyRequests オプション

オプション 説明
オン 転送プロキシー要求を有効にします。
オフ 転送プロキシー要求を無効にします。

例18.55 ProxyRequests ディレクティブの使用

ProxyRequests On
ReadmeName
ReadmeName ディレクティブを使用すると、サーバー生成ディレクトリー一覧の最後に追加するファイルを指定できます。以下の形式を取ります。
ReadmeName filename
ファイル は、要求されたディレクトリーで検索するファイルの名前です。デフォルトでは、サーバーは README.html を検索します。

例18.56 ReadmeName ディレクティブの使用

ReadmeName README.html
リダイレクト
Redirect ディレクティブを使用すると、クライアントを別の URL にリダイレクトできます。以下の形式を取ります。
Redirect [status] path url
ステータス は任意で、表18.16「利用可能なステータスオプション」 で説明されているように有効なキーワードである必要があります。パス は古い場所を参照し、DocumentRoot ディレクティブで指定されたディレクトリーに対して相対的である必要があります(例: /docs)。URL コンテンツの現在の場所を参照します(例: http://docs.example.com)。

表18.16 利用可能なステータスオプション

ステータス 説明
permanent 要求されたリソースが永続的に移動されたことを示します。301 (Moved Permanently)ステータスコードがクライアントに返されます。
temp 要求されたリソースが一時的に移動したことを示します。302 (Found)ステータスコードがクライアントに返されます。
seeother 要求されたリソースが置き換えられたことを示します。303 (その他 を参照)のステータスコードがクライアントに返されます。
gone 要求されたリソースが永続的に削除されたことを示します。410 (Gone)ステータスはクライアントに返されます。
より高度なリダイレクト技術の場合は、Apache HTTP Server インストールに含まれる mod_rewrite モジュールを使用できます。

例18.57 Redirect ディレクティブの使用

Redirect permanent /docs http://docs.example.com
ScriptAlias
ScriptAlias ディレクティブを使用すると、CGI スクリプトの場所を指定できます。以下の形式を取ります。
ScriptAlias url-path real-path
url-pathDocumentRoot ディレクティブで指定されたディレクトリーに対して相対的である必要があります(例: /cgi-bin/)。リアルタイムパス は、ローカルファイルシステム内のファイルまたはディレクトリーへの完全パスです。
このディレクティブの後には、通常、ターゲットディレクトリーにアクセスするための追加のパーミッションを持つ Directory タグが続きます。デフォルトでは、/ var/www /cgi-bin/ にあるスクリプトにアクセスできるように、/cgi-bin/ alias が作成されます。
ScriptAlias ディレクティブは、CGI スクリプトが通常のテキストドキュメントとして表示されないようにするために使用されます。

例18.58 ScriptAlias ディレクティブの使用

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

<Directory "/var/www/cgi-bin">
  AllowOverride None
  Options None
  Order allow,deny
  Allow from all
</Directory>
ServerAdmin
ServerAdmin ディレクティブでは、サーバー生成の Web ページに表示されるサーバー管理者のメールアドレスを指定できます。以下の形式を取ります。
ServerAdmin email
デフォルトのオプションは root@localhost です。
このディレクティブは、通常 webmaster@hostname に設定されます。hostname はサーバーのアドレスです。設定が完了すると、エイリアス webmaster/etc/aliases の Web サーバーを担当するユーザー、および superuser として newaliases コマンドを実行します。

例18.59 ServerAdmin ディレクティブの使用

ServerAdmin webmaster@penguin.example.com
ServerName
ServerName ディレクティブを使用すると、Web サーバーのホスト名およびポート番号を指定できます。以下の形式を取ります。
ServerName hostname[:port]
ホスト名 は、サーバーの 完全修飾ドメイン名 (FQDN)である必要があります。ポート はオプションですが、指定する場合は Listen ディレクティブで指定された番号と一致する必要があります。
このディレクティブを使用する場合は、IP アドレスとサーバー名のペアが /etc/hosts ファイルに含まれていることを確認してください。

例18.60 ServerName ディレクティブの使用

ServerName penguin.example.com:80
ServerRoot
ServerRoot ディレクティブを使用すると、サーバーが機能するディレクトリーを指定できます。以下の形式を取ります。
ServerRoot directory
ディレクトリー は、ローカルファイルシステム内の既存のディレクトリーへの完全パスである必要があります。デフォルトのオプションは /etc/httpd/ です。

例18.61 ServerRoot ディレクティブの使用

ServerRoot /etc/httpd
ServerSignature
ServerSignature ディレクティブを使用すると、サーバー生成ドキュメントのサーバーに関する情報を表示できます。以下の形式を取ります。
ServerSignature option
この オプション は、表18.17「利用可能な ServerSignature オプション」 の説明に従って、有効なキーワードである必要があります。デフォルトのオプションは On です。

表18.17 利用可能な ServerSignature オプション

オプション 説明
オン サーバー名とバージョンをサーバー生成ページに追加できるようにします。
オフ サーバー名とバージョンをサーバー生成ページに追加するを無効にします。
Email ServerAdmin ディレクティブで指定されたサーバー名、バージョン、およびメールアドレスをサーバー生成ページへ追加できるようにします。

例18.62 ServerSignature ディレクティブの使用

ServerSignature On
ServerTokens
ServerTokens ディレクティブを使用すると、Server 応答ヘッダーに含まれる情報をカスタマイズできます。以下の形式を取ります。
ServerTokens option
この オプション は、表18.18「利用可能な ServerTokens オプション」 の説明に従って、有効なキーワードである必要があります。デフォルトのオプションは OS です。

表18.18 利用可能な ServerTokens オプション

オプション 説明
Prod 製品名( Apache)のみが含まれます。
メジャー 製品名とサーバーのメジャーバージョンが含まれます(例: 2)。
マイナー 製品名とサーバーのマイナーバージョンが含まれます(例: 2.2)。
Min 製品名と最小バージョンのサーバー(例: 2.2.15)が含まれます。
OS 製品名、サーバーの最小バージョン、および実行中のオペレーティングシステムのタイプ( Red Hatなど)が含まれます。
Full 上記のすべての情報を、読み込んだモジュールのリストとともに追加します。
セキュリティー上の理由から、できるだけ少ないサーバーに関する情報を表示することが推奨されます。

例18.63 ServerTokens ディレクティブの使用

ServerTokens Prod
SuexecUserGroup
SuexecUserGroup ディレクティブを使用すると、CGI スクリプトが実行されるユーザーおよびグループを指定できます。以下の形式を取ります。
SuexecUserGroup user group
ユーザー は既存のユーザーで、グループは有効な UNIX グループ である必要があります。
セキュリティー上の理由から、CGI スクリプトは root 権限で実行する必要があります。< VirtualHost& gt; では、SuexecUserGroupUser ディレクティブおよび Group ディレクティブを置き換えます。

例18.64 SuexecUserGroup ディレクティブの使用

SuexecUserGroup apache apache
タイムアウト
Timeout ディレクティブでは、接続を閉じる前のイベントを待機する時間を指定できます。以下の形式を取ります。
Timeout time
時間 は秒単位で指定します。デフォルトのオプションは 60 です。

例18.65 Timeout ディレクティブの使用

Timeout 60
TypesConfig
TypesConfig を使用すると、MIME タイプ設定ファイルの場所を指定できます。以下の形式を取ります。
TypesConfig path
パス は既存の MIME タイプの設定ファイルを参照し、絶対または ServerRoot ディレクティブ(デフォルトでは /etc/httpd/ )で指定されたディレクトリーへの相対のいずれかになります。デフォルトのオプションは /etc/mime.types です。
/etc/mime.types を編集する代わりに、Apache HTTP Server に MIME タイプマッピングを追加する方法として AddType ディレクティブを使用することが推奨されます。

例18.66 TypesConfig ディレクティブの使用

TypesConfig /etc/mime.types
UseCanonicalName
UseCanonicalName を使用すると、サーバー自体の参照方法を指定できます。以下の形式を取ります。
UseCanonicalName option
この オプション は、表18.19「利用可能な UseCanonicalName オプション」 の説明に従って、有効なキーワードである必要があります。デフォルトのオプションは Off です。

表18.19 利用可能な UseCanonicalName オプション

オプション 説明
オン ServerName ディレクティブで指定された名前の使用を有効にします。
オフ ServerName ディレクティブで指定された名前の使用を無効にします。代わりに、要求側のクライアントが提供するホスト名とポート番号が使用されます。
DNS ServerName ディレクティブで指定された名前の使用を無効にします。代わりに逆引き DNS ルックアップによって決定されるホスト名が使用されます。

例18.67 UseCanonicalName ディレクティブの使用

UseCanonicalName Off
ユーザー
User ディレクティブでは、httpd サービスを実行するユーザーを指定できます。以下の形式を取ります。
User user
既存の UNIX ユーザー である必要があります。デフォルトのオプションは apache です。
セキュリティー上の理由から、httpd サービスは root 権限で実行しないでください。User は < VirtualHost> 内で はサポートされなくなり、SuexecUserGroup ディレクティブに置き換えられました。

例18.68 User ディレクティブの使用

User apache
UserDir
UserDir ディレクティブでは、ユーザーのホームディレクトリーからのコンテンツの提供を有効にできます。以下の形式を取ります。
UserDir option
この オプション は、ユーザーのホームディレクトリー(通常は public_html)を検索するディレクトリーの名前、または 表18.20「利用可能な UserDir オプション」 で説明されているように有効なキーワードになります。デフォルトのオプションは 無効になっ ています。

表18.20 利用可能な UserDir オプション

オプション 説明
enabled user 指定の ユーザーのホームディレクトリーからコンテンツを提供できます。
disabled [user] ホームディレクトリーのコンテンツの提供を無効にします(すべてのユーザー、またはユーザースペースで区切られた一覧が指定された場合)は、指定の ユーザーにのみコンテンツを提供します。
適切なパーミッションの設定
Web サーバーがコンテンツにアクセスできるようにするには、関連するディレクトリーおよびファイルのパーミッションを正しく設定する必要があります。すべてのユーザーがホームディレクトリーにアクセスでき、UserDir ディレクティブで指定されたディレクトリーの内容にアクセスできることを確認します。以下に例を示します。
~]# chmod a+x /home/username/
~]# chmod a+rx /home/username/public_html/
このディレクトリーのすべてのファイルは適宜設定する必要があります。

例18.69 UserDir ディレクティブの使用

UserDir public_html

18.1.5.2. 一般的な ssl.conf ディレクティブ

Secure Sockets Layer (SSL)ディレクティブを使用すると、Apache HTTP Secure Server の動作をカスタマイズできます。多くの場合は、インストール時に適切に設定されます。設定が間違っているとセキュリティーの脆弱性につながる可能性があるため、これらの設定を変更する場合には注意が必要です。
以下のディレクティブは、/etc/httpd/conf.d/ssl.conf で一般的に使用されます。
SetEnvIf
SetEnvIf ディレクティブでは、受信接続のヘッダーに基づいて環境変数を設定できます。以下の形式を取ります。
SetEnvIf option pattern [!]variable[=value]…
この オプション は、表18.21「利用可能な SetEnvIf オプション」 で説明されているように、HTTP ヘッダーフィールド、以前に定義した環境変数名、または有効なキーワードのいずれかです。この パターン は正規表現です。変数 は、オプションがパターンと一致する際に設定される環境変数です。オプションの感嘆符(つまり !)が存在する場合、変数は設定されずに削除されます。

表18.21 利用可能な SetEnvIf オプション

オプション 説明
Remote_Host クライアントのホスト名を参照します。
Remote_Addr クライアントの IP アドレスを参照します。
Server_Addr サーバーの IP アドレスを参照します。
Request_Method リクエストメソッドを参照します(例: GET)。
Request_Protocol プロトコル名とバージョン( HTTP/1.1 など)を参照します
Request_URI 要求されたリソースを参照します。
SetEnvIf ディレクティブは、HTTP keepalives を無効にし、クライアントのブラウザーからクローズ通知なしに SSL が接続を閉じるのを許可するために使用されます。これは、SSL 接続を確実にシャットダウンしていない特定の Web ブラウザーに必要です。

例18.70 SetEnvIf ディレクティブの使用

SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
/etc/httpd/conf.d/ssl.conf ファイルが存在する場合は、mod_ssl をインストールする必要があります。SSL サーバーのインストールおよび設定方法の詳細は、「SSL サーバーの設定」 を参照してください。

18.1.5.3. 一般的な複数プロセスモジュールのディレクティブ

Multi-Processing Module (MPM)ディレクティブを使用すると、特定の MPM 固有の server-pool の動作をカスタマイズできます。その特性はどの MPM が使用されるかによって異なるため、ディレクティブは IfModule に組み込まれています。デフォルトでは、server-pool は preforkworker MPM の両方に対して定義されます。
以下の MPM ディレクティブは、/etc/httpd/conf/httpd.conf で一般的に使用されます。
MaxClients
MaxClients ディレクティブを使用すると、一度に処理する同時接続クライアントの最大数を指定できます。以下の形式を取ります。
MaxClients number
prefork MPM を使用する場合は、高い 数値 を指定するとサーバーのパフォーマンスが向上しますが、prefork MPM を使用する場合は 256 を超えることは推奨されません。

例18.71 MaxClients ディレクティブの使用

MaxClients 256
MaxRequestsPerChild
MaxRequestsPerChild ディレクティブでは、終了前に子プロセスが処理できるリクエストの最大数を指定できます。以下の形式を取ります。
MaxRequestsPerChild number
数値を 0 に設定すると、要求数が無制限になります。
MaxRequestsPerChild ディレクティブは、有効期限の長いプロセスがメモリーリークを引き起こさないようにするために使用されます。

例18.72 MaxRequestsPerChild ディレクティブの使用

MaxRequestsPerChild 4000
MaxSpareServers
MaxSpareServers ディレクティブでは、スペア子プロセスの最大数を指定できます。以下の形式を取ります。
MaxSpareServers number
このディレクティブは、prefork MPM のみによって使用されます。

例18.73 MaxSpareServers ディレクティブの使用

MaxSpareServers 20
MaxSpareThreads
MaxSpareThreads ディレクティブを使用すると、スペアサーバースレッドの最大数を指定できます。以下の形式を取ります。
MaxSpareThreads number
数値MinSpareThreads および ThreadsPerChild の合計値以上である必要があります。このディレクティブは、worker MPM だけによって使用されます。

例18.74 MaxSpareThreads ディレクティブの使用

MaxSpareThreads 75
MinSpareServers
MinSpareServers ディレクティブでは、予備の子プロセスの最小数を指定できます。以下の形式を取ります。
MinSpareServers number
値が大きいと、サーバーに大量の処理負荷が発生する可能性があることに注意してください。このディレクティブは、prefork MPM のみによって使用されます。

例18.75 MinSpareServers ディレクティブの使用

MinSpareServers 5
MinSpareThreads
MinSpareThreads ディレクティブを使用すると、スペアサーバースレッドの最小数を指定できます。以下の形式を取ります。
MinSpareThreads number
このディレクティブは、worker MPM だけによって使用されます。

例18.76 MinSpareThreads ディレクティブの使用

MinSpareThreads 75
StartServers
StartServers ディレクティブでは、サービスの起動時に作成する子プロセスの数を指定できます。以下の形式を取ります。
StartServers number
子プロセスは現在のトラフィックの負荷に応じて動的に作成され、終了されるため、通常はこの値を変更する必要はありません。

例18.77 StartServers ディレクティブの使用

StartServers 8
ThreadsPerChild
ThreadsPerChild ディレクティブを使用すると、子プロセスが作成できるスレッド数を指定できます。以下の形式を取ります。
ThreadsPerChild number
このディレクティブは、worker MPM だけによって使用されます。

例18.78 ThreadsPerChild ディレクティブの使用

ThreadsPerChild 25

18.1.6. モジュールの使用

httpd サービスは、モジュールアプリケーションであるため、多数の Dynamic Shared Objects (DSOs)とともに配布されます。これは、必要に応じてランタイム時に、動的に読み込まれたり、アンロードしたりできます。デフォルトでは、これらのモジュールは 32 ビットおよび 64 ビットシステムの /usr/lib64/httpd/modules / の /usr/lib/httpd/modules/ にあります。

18.1.6.1. モジュールの読み込み

特定の DSO モジュールを読み込むには、「一般的な httpd.conf ディレクティブ」 の説明に従って LoadModule ディレクティブを使用します。別のパッケージが提供するモジュールでは、多くの場合、/etc/httpd/conf.d/ ディレクトリーに独自の設定ファイルがあることに注意してください。

例18.79 mod_ssl DSO の読み込み

LoadModule ssl_module modules/mod_ssl.so
操作が終了したら、Web サーバーを再起動して設定を再読み込みします。httpd サービスを再起動する方法は、「サービスの再起動」 を参照してください。

18.1.6.2. モジュールの作成

新しい DSO モジュールを作成する場合は、httpd-devel パッケージがインストールされていることを確認してください。これを行うには、root で次のコマンドを実行します。
~]# yum install httpd-devel
このパッケージには、モジュールをコンパイルするために必要なインクルードファイル、ヘッダーファイル、および APache eXtenSion (apxs)ユーティリティーが含まれます。
作成したら、以下のコマンドでモジュールを構築できます。
~]# apxs -i -a -c module_name.c
ビルドが成功すると、Apache HTTP Server で配布されるその他のモジュールと同じ方法でモジュールを読み込むことができます。

18.1.7. 仮想ホストの設定

Apache HTTP Server に組み込まれている仮想ホストを使用すると、どの IP アドレス、ホスト名、またはポートが要求されているかに基づいて、サーバーが異なる情報を提供できます。
名前ベースの仮想ホストを作成するには、例として /etc/httpd/conf/httpd.conf で提供される仮想ホストコンテナーを見つけ、各行の先頭にあるハッシュ記号(つまり #)を削除し、例18.80「仮想ホストの設定例」 に記載の要件に応じてオプションをカスタマイズします。

例18.80 仮想ホストの設定例

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin webmaster@penguin.example.com
    DocumentRoot /www/docs/penguin.example.com
    ServerName penguin.example.com
    ServerAlias www.penguin.example.com
    ErrorLog logs/penguin.example.com-error_log
    CustomLog logs/penguin.example.com-access_log common
</VirtualHost>
ServerName は、マシンに割り当てられた有効な DNS 名を指定する必要があることに注意してください。&lt ;VirtualHost&gt; コンテナーは高度なカスタマイズが可能で、メインサーバー設定で利用可能なディレクティブのほとんどを使用できます。このコンテナーで対応してい ない ディレクティブには、SuexecUserGroup に置き換えられた User および Group が含まれます。
ポート番号の変更
仮想ホストがデフォルト以外のポートをリッスンするように設定する場合は、それに応じて /etc/httpd/conf/httpd.conf ファイルのグローバル設定セクションの Listen ディレクティブを必ず更新してください。
新規に作成された仮想ホストをアクティブ化するには、Web サーバーを再起動する必要があります。httpd サービスを再起動する方法は、「サービスの再起動」 を参照してください。

18.1.8. SSL サーバーの設定

Secure Sockets Layer (SSL)は、サーバーとクライアントがセキュアに通信できるようにする暗号化プロトコルです。Transport Layer Security (TLS)と呼ばれる拡張および改善されたバージョンとともに、プライバシーとデータの整合性の両方が確保されます。Apache HTTP Server を mod_ssl と組み合わせて、OpenSSL ツールキットを使用して SSL/TLS サポートを提供するモジュールは、SSL サーバー と呼ばれます。Red Hat Enterprise Linuxnbsp;Hat Enterprise Linuxnbsp;Linux は、TLS 実装としての Mozilla NSS の使用もサポートします。Mozilla NSS のサポートは mod_nss モジュールにより提供されます。
傍受できる人であればだれでも読み取りや修正が可能な HTTP 接続とは異なり、HTTPS と呼ばれる SSL/TLS over HTTP の使用により、送信したコンテンツの検査や修正が阻止されます。本セクションでは、Apache HTTP Server 設定内でこのモジュールを有効にする基本的な方法と、秘密鍵と自己署名の証明書の生成プロセスを説明します。

18.1.8.1. 証明書およびセキュリティーの概要

通信の安全性は、鍵の使用により確保されます。従来の暗号または 対称暗号 では、トランザクションの両端に、相互に送信をデコードするのに使用する鍵と同じキーがあります。一方、公開暗号または 非対称暗号 では、秘密鍵( 秘密 を保持する)と公開鍵(通常は 公開鍵 )が共存します。公開鍵でエンコードされたデータは秘密鍵でしかデコードできませんが、秘密鍵でエンコードされたデータは公開鍵でしかデコードできません。
SSL を使用してセキュアな通信を提供するには、SSL サーバーは 認証局 (CA)が署名したデジタル証明書を使用する必要があります。証明書は、サーバーのホスト名、会社名、会社の場所など、サーバーのさまざまな属性と、CA の秘密鍵を使用して生成した署名を一覧表示します。この署名は、特定の認証局が証明書を署名し、証明書がいかなる方法でも変更されていないことを確認するものです。
Web ブラウザーが新しい SSL 接続を確立すると、Web サーバーが提供する証明書が確認されます。証明書に、信頼できる CA からの署名がない場合や、証明書に一覧表示されているホスト名が、接続の確立に使用されたホスト名と一致しない場合は、サーバーとの通信が拒否され、通常は、ユーザーに適切なエラーメッセージが表示されます。
デフォルトでは、ほとんどの Web ブラウザーは、幅広く使用されている一連の証明書局を信頼するように設定されています。このため、安全なサーバーを設定する際には、適切な CA を選択して、ターゲットユーザーが接続を信頼できる状態にする必要があります。適切な CA を選択しないとエラーメッセージが表示され、証明書を手動で指定することが必要になります。ユーザーが証明書エラーを上書きするようにすると、攻撃者が接続を傍受できるため、可能な場合は信頼できる CA を使用する必要があります。詳細は、表18.22「一般的な Web ブラウザーが使用する CA リストに関する情報」 を参照してください。

表18.22 一般的な Web ブラウザーが使用する CA リストに関する情報

SSL サーバーを設定する場合は、証明書要求と秘密鍵を生成し、証明書要求、会社の ID の証明、および支払いを認証局に送信する必要があります。CA が証明書の要求および ID を確認すると、サーバーで使用できる署名付きの証明書が送信されます。また、CA 署名を含まない自己署名証明書を作成することもできるため、テスト目的でのみ使用してください。

18.1.9. mod_ssl モジュールの有効化

mod_ssl を使用して SSL または HTTPS サーバーをセットアップする場合は、別のアプリケーションまたはモジュール( mod_nss など)で同じポートを使用するよう設定することは できません。ポート 443 は、HTTPS のデフォルトポートです。
mod_ssl モジュールおよび OpenSSL ツールキットを使用して SSL サーバーを設定するには、mod_ssl および openssl パッケージをインストールします。root で以下のコマンドを入力します。
~]# yum install mod_ssl openssl
これにより、/etc/httpd/conf.d/ssl.confmod_ssl 設定ファイルが作成されます。このファイルは、デフォルトでメインの Apache HTTP Server 設定ファイルに含まれています。モジュールを読み込むには、「サービスの再起動」 の説明に従って httpd サービスを再起動します。
重要
POODLE: SSLv3 脆弱性(CVE-2014-3566)で説明されている脆弱性』 のため、Red Hat は、SSL を無効にし、有効にしている場合は TLSv1 . 1 または TLSv1.2 のみを使用することを推奨します。後方互換性は、TLSv1.0 を使用して実現できます。Red Hat がサポートする多くの製品は SSLv2 プロトコルまたは SSLv3 プロトコルを使用できます。ただし、SSLv2 または SSLv3 の使用が強く推奨されます。

18.1.9.1. mod_ssl での SSL および TLS の有効化および無効化

SSL および TLS プロトコルの特定のバージョンを有効および無効にするには、設定ファイルの ## SSL Global Context セクションに SSLProtocol ディレクティブを追加し、他のすべての部分でそのディレクティブを削除するか、すべての VirtualHost セクションの # SSL Protocol support の下にあるデフォルトエントリーを編集することによりグローバルで設定します。ドメインごとの VirtualHost セクションで指定しない場合、設定はグローバルセクションから継承されます。プロトコルバージョンが確実に無効になるように、管理者は SSLProtocolSSL Global Context セクションに のみ 指定するか、ドメインごとの すべて の VirtualHost セクションで指定する必要があります。
Red Hat Enterprise Linux 6.8 SSLv2 では、デフォルトで無効になっていることに注意してください。

手順18.1 SSLv2 および SSLv3 の無効化

すべての VirtualHost セクションで SSL バージョン 2 および SSL バージョン 3 を無効にするには (SSL バージョン 2 および SSL バージョン 3 以外をすべて有効にすることを意味します)、以下の手順を実行します。
  1. root/etc/httpd/conf.d/ssl.conf ファイルを開き、SSLProtocol ディレクティブの すべて のインスタンスを検索します。デフォルトでは、設定ファイルに以下のような 1 つのセクションが含まれます。
    ~]# vi /etc/httpd/conf.d/ssl.conf
    #   SSL Protocol support:
    # List the enable protocol levels with which clients will be able to
    # connect.  Disable SSLv2 access by default:
    SSLProtocol all -SSLv2
    このセクションは、VirtualHost セクション内にあります。
  2. SSLProtocol 行を以下のように編集します。
    #   SSL Protocol support:
    # List the enable protocol levels with which clients will be able to
    # connect.  Disable SSLv2 access by default:
    SSLProtocol all -SSLv2 -SSLv3
    すべての VirtualHost セクションに対してこのアクションを繰り返します。ファイルを保存してから閉じます。
  3. すべての SSLProtocol ディレクティブが以下のように変更したことを確認します。
    ~]# grep SSLProtocol /etc/httpd/conf.d/ssl.conf
    SSLProtocol all -SSLv2 -SSLv3
    この手順は、デフォルトの VirtualHost セクションが複数の場合に特に重要になります。
  4. 以下のように Apache デーモンを再起動します。
    ~]# service httpd restart
    セッションが中断されることに注意してください。

手順18.2 TLS 1 以上を除くすべての SSL および TLS プロトコルの無効化

TLS バージョン 1 以上を除く SSL および TLS プロトコルバージョンをすべて無効にするには、以下の手順を実行します。
  1. root/etc/httpd/conf.d/ssl.conf ファイルを開き、SSLProtocol ディレクティブの すべて のインスタンスを検索します。デフォルトでは、このファイルには以下のようなセクションが含まれます。
    ~]# vi /etc/httpd/conf.d/ssl.conf
    #   SSL Protocol support:
    # List the enable protocol levels with which clients will be able to
    # connect.  Disable SSLv2 access by default:
    SSLProtocol all -SSLv2
  2. SSLProtocol 行を以下のように編集します。
    #   SSL Protocol support:
    # List the enable protocol levels with which clients will be able to
    # connect.  Disable SSLv2 access by default:
    SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2
    ファイルを保存してから閉じます。
  3. 以下のように変更を確認します。
    ~]# grep SSLProtocol /etc/httpd/conf.d/ssl.conf 
    SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2
  4. 以下のように Apache デーモンを再起動します。
    ~]# service httpd restart
    セッションが中断されることに注意してください。

手順18.3 SSL および TLS プロトコルのステータスのテスト

有効または無効な SSL および TLS のバージョンを確認するには、openssl s_client -connect コマンドを使用します。このコマンドの形式は
openssl s_client -connect hostname:port -protocol
です。port は、テストするポートで、protocol はテストするプロトコルバージョンです。ローカルで稼働している SSL サーバーをテストするには、localhost をホスト名として使用します。たとえば、SSLv3 が有効であるかどうかを確認するためにセキュアな HTTPS 接続のデフォルトポートであるポート 443 をテストするには、以下のようにコマンドを発行します。
  1. ~]# openssl s_client -connect localhost:443 -ssl3
    CONNECTED(00000003)
    139809943877536:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1257:SSL alert number 40
    139809943877536:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596:
    output omitted
    New, (NONE), Cipher is (NONE)
    Secure Renegotiation IS NOT supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
        Protocol  : SSLv3
    output truncated
    上記の出力はハンドシェイクが失敗し、暗号化がネゴシエートされなかったことを示しています。
  2. ~]$ openssl s_client -connect localhost:443 -tls1_2
    CONNECTED(00000003)
    depth=0 C = --, ST = SomeState, L = SomeCity, O = SomeOrganization, OU = SomeOrganizationalUnit, CN = localhost.localdomain, emailAddress = root@localhost.localdomain
    output omitted
    New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
        Protocol  : TLSv1.2
    output truncated
    上記の出力は、ハンドシェイクが失敗しておらず、暗号化セットがネゴシエートされたことを示しています。
openssl s_client コマンドのオプションは、s_client(1) man ページに記載されています。
SSLv3 の脆弱性とそのテスト方法の詳細は、Red Hat ナレッジベースの記事 『POODLE: SSLv3 vulnerability(CVE-2014-3566』 )を参照してください。

18.1.10. mod_nss Module の有効化

mod_nss を使用して HTTPS サーバーをセットアップする場合、mod_ssl はデフォルトでポート 443 を使用するため、HTTPS サーバーでは mod_ssl を同時に使用することが できません が、これはデフォルトの HTTPS ポートになります。パッケージが必要ない場合は削除することが推奨されます。
mod_ssl を削除するには、root で次のコマンドを実行します。
~]# yum remove mod_ssl
注記
他の目的で mod_ssl が必要な場合は、443 以外のポートを使用するように /etc/httpd/conf.d/ssl.conf ファイルを変更し、リッスンするポートが 443 に変更されたときに mod_sslmod_nss と競合しないようにします。
HTTPS が必要な特定の VirtualHost の場合、mod_nssmod_ssl は一意のポートを使用している場合のみ同時に共存できます。このため、mod_nss はデフォルトで 8443 を使用しますが、HTTPS のデフォルトポートはポート 443 です。ポートは Listen ディレクティブと VirtualHost 名またはアドレスで指定されます。
NSS のすべては トークン に関連付けられます。ソフトウェアトークンは NSS データベースに存在しますが、証明書を含む物理トークンを使用することもできます。OpenSSL では、個別証明書と秘密鍵は PEM ファイルに保持されます。NSS では、これらはデータベースに格納されます。各証明書およびキーはトークンと関連付けられ、各トークンにはパスワードを設定して保護することもできます。このパスワードはオプションですが、パスワードが使用される場合、Apache HTTP サーバーはシステムの起動時にユーザーの介入なしでデータベースを開くためにパスワードのコピーを必要とします。

手順18.4 mod_nss の設定

  1. rootmod_nss をインストールします。
    ~]# yum install mod_nss
    これにより、/etc/httpd/conf.d/nss.confmod_nss 設定ファイルが作成されます。/etc/httpd/conf.d/ ディレクトリーは、デフォルトでメインの Apache HTTP Server 設定ファイルに含まれます。モジュールを読み込むには、「サービスの再起動」 の説明に従って httpd サービスを再起動します。
  2. root/etc/httpd/conf.d/nss.conf ファイルを開き、Listen ディレクティブの すべて のインスタンスを検索します。
    Listen 8443 行を以下のように編集します。
    Listen 443
    ポート 443 は、HTTPS のデフォルトポートです。
  3. デフォルトの VirtualHost _default_:8443 行を以下のように編集します。
    VirtualHost _default_:443
    デフォルト以外の他のすべての仮想ホストセクション (存在する場合) を編集します。ファイルを保存してから閉じます。
  4. Mozilla NSS は、証明書を /etc/httpd/conf.d/nss.conf ファイルの NSSCertificateDatabase ディレクティブで示唆される サーバー証明書データベース に保存します。デフォルトでは、パスはインストール時に作成された NSS データベースである /etc/httpd/alias に設定されます。
    デフォルトの NSS データベースを表示するには、以下のコマンドを実行します。
    ~]# certutil -L -d /etc/httpd/alias
    
    Certificate Nickname                                         Trust Attributes
                                                                 SSL,S/MIME,JAR/XPI
    
    cacert                                                       CTu,Cu,Cu
    Server-Cert                                                  u,u,u
    alpha                                                        u,pu,u
    上記のコマンド出力では、Server-Cert がデフォルトの NSSNickname です。-L オプションは、証明書データベースにすべての証明書を一覧表示したり、名前付き証明書に関する情報を表示します。-d オプションは、証明書およびキーデータベースファイルを含むデータベースディレクトリーを指定します。その他のコマンドラインオプションは、certutil(1) の man ページを参照してください。
  5. 別のデータベースを使用するように mod_nss を設定するには、/etc/httpd/conf.d/nss.conf ファイルの NSSCertificateDatabase 行を編集します。デフォルトファイルの VirtualHost セクション内には以下の行が含まれます。
    #   Server Certificate Database:
    #   The NSS security database directory that holds the certificates and
    #   keys. The database consists of 3 files: cert8.db, key3.db and secmod.db.
    #   Provide the directory that these files exist.
    NSSCertificateDatabase /etc/httpd/alias
    上記のコマンド出力では、alias がデフォルトの NSS データベースディレクトリー /etc/httpd/alias/ です。
  6. デフォルトの NSS 証明書データベースにパスワードを適用するには、root で以下のコマンドを使用します。
    ~]# certutil -W -d /etc/httpd/alias
    Enter Password or Pin for "NSS Certificate DB":
    Enter a password which will be used to encrypt your keys.
    The password should be at least 8 characters long,
    and should contain at least one non-alphabetic character.
    
    Enter new password:
    Re-enter password:
    Password changed successfully.
  7. HTTPS サーバーをデプロイする前に、認証局 (CA) により署名された証明書を使用して新しい証明書データベースを作成します。

    例18.81 Mozilla NSS データベースへの証明書の追加

    certutil コマンドは、CA 証明書を NSS データベースファイルに追加するために使用されます。
    certutil -d /etc/httpd/nss-db-directory/ -A -n "CA_certificate" -t CT,, -a -i certificate.pem
    上記のコマンドは、certificate.pem という名前の PEM 形式のファイルに保存されている CA 証明書を追加します。-d オプションは、証明書およびキーデータベースファイルを含む NSS データベースディレクトリーを指定します。-n オプションは、証明書の名前( -t CT,, )を設定します。これは、証明書が TLS クライアントおよびサーバーで使用されるように信頼されることを意味します。-A オプションは、既存の証明書を証明書データベースに追加します。データベースが存在しない場合は、作成されます。-a オプションを使用すると、入力または出力に ASCII 形式を使用でき、-i オプションは certificate.pem 入力ファイルをコマンドに渡します。
    その他のコマンドラインオプションは、certutil(1) の man ページを参照してください。
  8. 秘密鍵を保護するために、NSS データベースはパスワードで保護する必要があります。

    例18.82 Setting_a_Password_for_a_Mozilla_NSS_database

    NSS データベースのパスワードを設定するには、以下のように certutil ツールを使用できます。
    certutil -W -d /etc/httpd/nss-db-directory/
    たとえば、デフォルトのデータベースの場合は、root で以下のコマンドを実行します。
    ~]# certutil -W -d /etc/httpd/alias
    Enter Password or Pin for "NSS Certificate DB":
    Enter a password which will be used to encrypt your keys.
    The password should be at least 8 characters long,
    and should contain at least one non-alphabetic character.
    
    Enter new password: 
    Re-enter password: 
    Password changed successfully.
  9. 以下のように NSSPassPhraseDialog ディレクティブで行を変更して、NSS 内部ソフトウェアトークンを使用するように mod_nss を設定します。
    ~]# vi /etc/httpd/conf.d/nss.conf
    NSSPassPhraseDialog file:/etc/httpd/password.conf
    これにより、システムの起動時にパスワードを手動で入力する必要がなくなります。ソフトウェアトークンは NSS データベースに存在しますが、証明書を含む物理トークンを使用することもできます。
  10. NSS データベースに含まれる SSL サーバー証明書が RSA 証明書である場合は、NSSNickname パラメーターのコメントを解除し、上記の手順 4 で示されたニックネームに一致するようにします。
    ~]# vi /etc/httpd/conf.d/nss.conf
    NSSNickname Server-Cert
    NSS データベースに含まれる SSL サーバー証明書が ECC 証明書である場合は、NSSECCNickname パラメーターのコメントを解除し、上記の手順 4 で示されたニックネームに一致するようにします。
    ~]# vi /etc/httpd/conf.d/nss.conf
    NSSECCNickname Server-Cert
    NSSCertificateDatabase パラメーターがコメント解除され、上記の手順 4 で示された、または手順 5 で設定された NSS データベースディレクトリーを参照するようにします。
    ~]# vi /etc/httpd/conf.d/nss.conf
    NSSCertificateDatabase /etc/httpd/alias
    /etc/httpd/alias を、使用する証明書データベースへのパスに置き換えます。
  11. root/etc/httpd/password.conf ファイルを作成します。
    ~]# vi /etc/httpd/password.conf
    internal:password
    の形式の行を追加します。上記の手順 6 で NSS セキュリティーデータベースに適用したパスワードでパスワードを置き換えます。
  12. 適切な所有権とパーミッションを /etc/httpd/password.conf ファイルに適用します。
    ~]# chgrp apache /etc/httpd/password.conf
    ~]# chmod 640 /etc/httpd/password.conf
    ~]# ls -l /etc/httpd/password.conf
    -rw-r-----. 1 root apache 10 Dec  4 17:13 /etc/httpd/password.conf
  13. NSS のソフトウェアトークンを使用するように mod_nss を設定するには、/etc/httpd/password.conf/etc/httpd/conf.d/nss.conf を以下のように編集します。
    ~]# vi /etc/httpd/conf.d/nss.conf
  14. 変更を反映するために、「サービスの再起動」 の説明通りに Apache サーバーを再起動します。
重要
POODLE: SSLv3 脆弱性(CVE-2014-3566)で説明されている脆弱性』 のため、Red Hat は、SSL を無効にし、有効にしている場合は TLSv1 . 1 または TLSv1.2 のみを使用することを推奨します。後方互換性は、TLSv1.0 を使用して実現できます。Red Hat がサポートする多くの製品は SSLv2 プロトコルまたは SSLv3 プロトコルを使用できます。ただし、SSLv2 または SSLv3 の使用が強く推奨されます。

18.1.10.1. mod_nss での SSL および TLS の有効化および無効化

SSL および TLS プロトコルの特定のバージョンを有効および無効にするには、設定ファイルの ## SSL Global Context セクションに NSSProtocol ディレクティブを追加し、他のすべての部分でそのディレクティブを削除するか、すべての VirtualHost セクションの # SSL Protocol の下にあるデフォルトエントリーを編集することによりグローバルで設定します。ドメインごとの VirtualHost セクションで指定しない場合、設定はグローバルセクションから継承されます。プロトコルバージョンが確実に無効になるように、管理者は SSL Global Context セクションに NSSProtocol のみ を指定するか、ドメインごとの すべて の VirtualHost セクションで指定する必要があります。
Red Hat Enterprise Linux 6.8 SSLv2 では、デフォルトで無効になっていることに注意してください。

手順18.5 mod_nss での TLS 1 以上を除くすべての SSL および TLS プロトコルの無効化

TLS バージョン 1 以上を除く SSL および TLS プロトコルバージョンをすべて無効にするには、以下の手順を実行します。
  1. root/etc/httpd/conf.d/nss.conf ファイルを開き、NSSProtocol ディレクティブの すべて のインスタンスを検索します。デフォルトでは、設定ファイルに以下のような 1 つのセクションが含まれます。
    ~]# vi /etc/httpd/conf.d/nss.conf
    #   SSL Protocol:
    output omitted
    #   Since all protocol ranges are completely inclusive, and no protocol in the
    #   middle of a range may be excluded, the entry "NSSProtocol SSLv3,TLSv1.1"
    #   is identical to the entry "NSSProtocol SSLv3,TLSv1.0,TLSv1.1".
    NSSProtocol TLSv1.0,TLSv1.1,TLSv1.2
    このセクションは、VirtualHost セクション内にあります。
  2. NSSProtocol 行を以下のように編集します。
    #   SSL Protocol:
    NSSProtocol TLSv1.0,TLSv1.1,TLSv1.2
    すべての VirtualHost セクションに対してこのアクションを繰り返します。
  3. Listen 8443 行を以下のように編集します。
    Listen 443
  4. デフォルトの VirtualHost _default_:8443 行を以下のように編集します。
    VirtualHost _default_:443
    デフォルト以外の他のすべての仮想ホストセクション (存在する場合) を編集します。ファイルを保存してから閉じます。
  5. すべての NSSProtocol ディレクティブが以下のように変更したことを確認します。
    ~]# grep NSSProtocol /etc/httpd/conf.d/nss.conf
    #   middle of a range may be excluded, the entry "NSSProtocol SSLv3,TLSv1.1"
    #   is identical to the entry "NSSProtocol SSLv3,TLSv1.0,TLSv1.1".
    NSSProtocol TLSv1.0,TLSv1.1,TLSv1.2
    この手順は、VirtualHost セクションが複数の場合に特に重要になります。
  6. 以下のように Apache デーモンを再起動します。
    ~]# service httpd restart
    セッションが中断されることに注意してください。

手順18.6 mod_nss での SSL および TLS プロトコルのステータスのテスト

mod_nss で有効または無効な SSL および TLS のバージョンを確認するには、openssl s_client -connect コマンドを使用します。rootopenssl パッケージをインストールします。
~]# yum install openssl
openssl s_client -connect コマンドの形式は
openssl s_client -connect hostname:port -protocol
になります。port は、テストするポートで、protocol はテストするプロトコルバージョンです。ローカルで稼働している SSL サーバーをテストするには、localhost をホスト名として使用します。たとえば、SSLv3 が有効であるかどうかを確認するためにセキュアな HTTPS 接続のデフォルトポートであるポート 443 をテストするには、以下のようにコマンドを発行します。
  1. ~]# openssl s_client -connect localhost:443 -ssl3
    CONNECTED(00000003)
    3077773036:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:337:
    output omitted
    New, (NONE), Cipher is (NONE)
    Secure Renegotiation IS NOT supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
        Protocol  : SSLv3
    output truncated
    上記の出力はハンドシェイクが失敗し、暗号化がネゴシエートされなかったことを示しています。
  2. ~]$ openssl s_client -connect localhost:443 -tls1_2
    CONNECTED(00000003)
    depth=1 C = US, O = example.com, CN = Certificate Shack
    output omitted
    New, TLSv1/SSLv3, Cipher is AES256-SHA
    Server public key is 1024 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
        Protocol  : TLSv1.2
        Cipher    : AES256-SHA
    output truncated
    上記の出力は、ハンドシェイクが失敗しておらず、暗号化セットがネゴシエートされたことを示しています。
openssl s_client コマンドのオプションは、s_client(1) man ページに記載されています。
SSLv3 の脆弱性とそのテスト方法の詳細は、Red Hat ナレッジベースの記事 『POODLE: SSLv3 vulnerability(CVE-2014-3566』 )を参照してください。

18.1.11. 既存の鍵および証明書の使用

以前に作成した鍵と証明書がある場合は、新しいファイルを生成する代わりに、SSL サーバーを設定してこのファイルを使用できます。これが可能ではない状況は 2 つしかありません。
  1. IP アドレスまたはドメイン名を変更している。
    証明書が、特定の IP アドレスとドメイン名のペアに対して発行されます。この値のいずれかが変更すると、証明書が無効になります。
  2. VeriSign からの証明書があり、サーバーソフトウェアを変更している。
    Verivsftpd は、幅広く使用されている認証局で、特定のソフトウェア製品、IP アドレス、およびドメイン名の証明書を発行します。ソフトウェア製品を変更すると、証明書が無効になります。
上記のいずれの場合も、新しい証明書を入手する必要があります。このトピックの詳細については、「新しい鍵と証明書の生成」 を参照してください。
既存の鍵と証明書を使用する場合は、関連するファイルを /etc/pki/tls/private/ ディレクトリーと /etc/pki/tls/certs/ ディレクトリーに移動します。root で以下のコマンドを実行してこれを実行できます。
~]# mv key_file.key /etc/pki/tls/private/hostname.key
~]# mv certificate.crt /etc/pki/tls/certs/hostname.crt
次に、以下の行を /etc/httpd/conf.d/ssl.conf 設定ファイルに追加します。
SSLCertificateFile /etc/pki/tls/certs/hostname.crt
SSLCertificateKeyFile /etc/pki/tls/private/hostname.key
更新された設定を読み込むには、「サービスの再起動」 の説明に従って httpd サービスを再起動します。

例18.83 Red Hat Secure Web Server からの鍵と証明書の使用

~]# mv /etc/httpd/conf/httpsd.key /etc/pki/tls/private/penguin.example.com.key
~]# mv /etc/httpd/conf/httpsd.crt /etc/pki/tls/certs/penguin.example.com.crt

18.1.12. 新しい鍵と証明書の生成

新しい鍵と証明書のペアを生成するには、crypto-utils パッケージをシステムにインストールする必要があります。Red Hat Enterprise Linux 6nbsp;Hat Enterprise Linux 6nbsp;LinuxRed Hat Enterprise Linux 6nbsp;6 では、genkey ユーティリティーで mod_ssl パッケージが必要になります。これらをインストールするには、root で次のコマンドを実行します。
~]# yum install crypto-utils mod_ssl
このパッケージは、SSL 証明書と秘密鍵を生成して管理するツールセットを提供し、鍵の生成プロセスをガイドする Red Hat Keypair Generation ユーティリティーである genkey が含まれます。
既存証明書の置き換え
有効な証明書を所有していて、それを新規のものに置き換える予定の場合は、異なるシリアル番号を指定します。これにより、クライアントのブラウザーがこの変更の通知を受けて予定どおりに新規の証明書に更新して、このページへのアクセスに失敗しないようにします。カスタムのシリアル番号で新しい証明書を作成するには、genkey の代わりに、以下のコマンドを使用します。
~]# openssl req -x509 -new -set_serial number -key hostname.key -out hostname.crt
以前に作成したキーを削除します。
システムに特定のホスト名用のキーファイルがすでにある場合は、genkey は起動を拒否します。このような場合には、root で以下のコマンドを使用して既存のファイルを削除します。
~]# rm /etc/pki/tls/private/hostname.key
ユーティリティーを実行するには、rootgenkey コマンドの後に、適切なホスト名(例: penguin.example.com)を付けて実行します。
~]# genkey hostname
鍵と証明書の生成を完了するには、以下の手順を行います。
  1. 鍵と証明書を保存する場所を確認します。

    図18.1 genkey ユーティリティーの実行

    genkey ユーティリティーの実行
    Tab キーを使用して Next (次へ) ボタンを選択してから、Enter キーを押すと次の画面を進みます。
  2. updown の矢印キーを使用して、適切な鍵のサイズを選択します。鍵が大きくなればセキュリティーは向上しますが、サーバーの応答時間も長くなることに注意してください。NIST では、2048 bits の使用が推奨されています。NIST Special Publication 800-131A を参照してください。

    図18.2 鍵のサイズ選択

    鍵のサイズ選択
    終了したら、タブ キーを使用して 次へ ボタンを選択し、Enter キーを押すと、ランダムなビットの生成プロセスが開始します。選択した鍵のサイズによっては、時間がかかることもあります。
  3. 証明書要求を認証局に送信するかどうかを決定します。

    図18.3 証明書要求の生成

    証明書要求の生成
    タブ キーを使用して Yes (はい) を選択し、証明書要求を組み立てるか、または No (いいえ) を選択して、自己署名の証明書を生成します。その後、Enter キーを押して、選択を確認します。
  4. Spacebar (スペースバー) キーを使用すると、秘密鍵の暗号化を有効にする ([*]) か、無効にする ([ ]) 選択ができます。

    図18.4 秘密鍵の暗号化

    秘密鍵の暗号化
    Tab キーを使用して Next (次へ) ボタンを選択してから、Enter キーを押すと次の画面を進みます。
  5. 秘密鍵の暗号化を有効にしている場合は、適切なパスフレーズを入力します。セキュリティーの理由により入力時には文字が表示されませんが、最低でも 5 文字の長さが必要です。

    図18.5 パスフレーズの入力

    パスフレーズの入力
    Tab キーを使用して Next (次へ) ボタンを選択してから、Enter キーを押すと次の画面を進みます。
    パスフレーズを忘れないようにしてください
    サーバーを起動するには正しいパスフレーズの入力が必要です。それを紛失したり忘れたりした場合は、新しい鍵と証明書を生成する必要があります。
  6. 証明書詳細のカスタマイズ

    図18.6 証明書情報の指定

    証明書情報の指定
    タブ キーを使用して Next ボタンを選択し、Enter を押すと鍵の生成が完了します。
  7. 証明書要求の生成を有効にしていた場合は、それを認証局に送信するように求められます。

    図18.7 証明書要求を送信する方法の指示

    証明書要求を送信する方法の指示
    Enter を押してシェルプロンプトに戻ります。
生成したら、鍵と証明書の場所を /etc/httpd/conf.d/ssl.conf 設定ファイルに追加します。
SSLCertificateFile /etc/pki/tls/certs/hostname.crt
SSLCertificateKeyFile /etc/pki/tls/private/hostname.key
最後に、「サービスの再起動」 の説明に従って httpd サービスを再起動して、更新された設定が読み込まれます。

18.1.13. コマンドラインを使用して HTTP 用および HTTPS 用にファイアウォールを設定

Red Hat Enterprise Linuxnbsp;Hat Enterprise Linuxnbsp;Linux は、デフォルトで HTTP および HTTPS トラフィックを許可しません。システムが Web サーバーとして機能するようにするには、必要に応じてポートとプロトコルを有効にします。HTTP のデフォルトポートは 80 で、HTTPS のデフォルトポートは 443 です。いずれの場合も、TCP がファイアウォールを通過することを許可されている必要があります。
コマンドラインで HTTP のポート 80 を有効にするには、root で以下のコマンドを発行します。
~]# lokkit --port=80:tcp --update
これにより、--disabled オプションで無効にされていない限り、ファイアウォールが再起動されることに注意してください。アクティブな接続は終了し、開始マシンでタイムアウトします。lokkit --help コマンドを使用して、組み込みのヘルプを表示します。
コマンドラインを使用して HTTPS のポート 443 を有効にするには、root で以下のコマンドを発行します。
~]# lokkit --port=443:tcp --update
これにより、--disabled オプションで無効にされていない限り、ファイアウォールが再起動されることに注意してください。アクティブな接続は終了し、開始マシンでタイムアウトします。サービスおよびそれらの関連付けられたポートの一覧は、/etc/services ファイルを参照してください。
管理ツールを使用して複数のインストールのために設定ファイルを準備する際には、ファイアウォール設定ファイルを直接編集すると便利です。設定ファイルの間違いがある場合は、予期せぬ結果が発生し、エラーが発生する可能性があり、ファイアウォール設定が適用されないことに注意してください。したがって、編集後に /etc/sysconfig/system-config-firewall ファイルの詳細を確認します。/etc/sysconfig/system-config-firewall の設定を適用するには、root で以下のコマンドを実行します。
~]# lokkit --update
たとえば、設定ファイルを編集して HTTPS がファイアウォールを通過できるようにするには、root ユーザーになり、以下の行を /etc/sysconfig/system-config-firewall に追加します。
 --port=443:tcp
ファイアウォールが再読み込みされたり、システムが再起動されても、これらの変更は反映されないことに注意してください。/etc/sysconfig/system-config-firewall で変更を適用するには、root で以下のコマンドを実行します。
~]# lokkit --update

18.1.13.1. コマンドラインで着信 HTTPS および HTTPS のネットワークアクセスの確認

ファイアウォールが許可するものを確認するには、root で以下のコマンドを実行します。
~]# less /etc/sysconfig/system-config-firewall
# Configuration file for system-config-firewall

--enabled
--service=ssh
この例では、デフォルトのインストールでファイアウォールは有効になっていますが、HTTPHTTPS は通過できません。
HTTP のデフォルトポートを有効にすると、以下の行が上記の行に加えて出力として表示されます。
--port=80:tcp
ファイアウォールが現在クライアントの受信 HTTP トラフィックを許可しているかどうかを確認するには、root で以下のコマンドを実行します。
~]# iptables -L -n | grep 'tcp.*80'
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
HTTPS のデフォルトポートを有効にすると、以下の行が上記の行に加えて出力として表示されます。
--port=443:tcp
ファイアウォールが現在クライアントの着信 HTTPS トラフィックを許可しているかどうかを確認するには、root で以下のコマンドを実行します。
~]# iptables -L -n | grep 'tcp.*443'
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:443

18.1.14. その他のリソース

Apache HTTP Server の詳細は、以下のリソースを参照してください。

インストールされているドキュメント

  • httpd(8): httpd サービスの man ページで、コマンドラインオプションの一覧が記載されます。
  • genkey(1): crypto-utils パッケージが提供する genkey ユーティリティーの man ページです。

インストール可能なドキュメント

  • http://localhost/manual/ - Apache HTTP Server の公式ドキュメントで、そのディレクティブと利用可能なモジュールの詳細を説明します。本書にアクセスするには、httpd-manual パッケージがインストールされ、Web サーバーが稼働している必要があることに注意してください。
    ドキュメントにアクセスする前に、root で以下のコマンドを発行します。
    ~]# yum install httpd-manual
    ~]# service httpd graceful

オンラインドキュメント

  • http://httpd.apache.org/ - Apache HTTP Server の公式 Web サイトです。すべてのディレクティブおよびデフォルトモジュールの説明が記載されています。
  • http://www.openssl.org/ - その他のドキュメント、よくある質問、メーリングリストへのリンクなどの役立つリソースを掲載した OpenSSL のホームページです。