|Home|私のLinux活用記録-Home-|
私のLinux活用記録
-Page22-項目
kh22-01[Apache の設定−1(設定とアクセス制御の概要)]kh22-02[Apache の設定−2(アクセス制御命令の解説)]
kh22-03[Apache の設定−3(バーチャルホストによる SSL利用)]
kh22-04[Apache の設定−4(リファレンスマニュアル抜粋)]
[Apache の設定−1(設定とアクセス制御の概要)]
作成:2005年06月18日Apache の設定について、これまでは、とりあえず動けばよいという安易な考えで、書籍やインターネットに紹介されているものを断片的に参考にし、見様見まねで行ってきました。マニュアルをきっちり読んで意味を理解して使うというより、紹介されている命令の記述をそのまま写して使ってきたのが実状です。
しかし、自分が使っている命令の記述が正しいのか、その意味はどういうことなのかという意識で、マニュアルを読んでみると、解からないこと、どうも間違って使っていることががありそうで、あらためて整理してみる必要を感じました。
Apache のマニュアルは、実に詳細に書かれていますが、難点は全体像が見えにくいことかもしれません。また、日本語マニュアルの翻訳が若干こなれていない部分があったりして、理解しずらい表現がところどころにあるのも、とっつきにくい要因です。
とはいえこのマニュアルが最も信頼できるものであり、あらためて読み直してみて、自分に必要でかつ理解できた部分を整理し掲載することにしました。この項目では、Apache の全般的な設定方法とアクセス制御方法の概要を整理しました。また、バーチャルホストの使い方に関する概要については次項に整理しました。もし誤解や、理解不足で間違った記述があれば、ご指摘を頂ければ大変ありがたいです。
■ 参考ドキュメント
Apache HTTP Server Version 1.3
■ 使用パッケージ
apache-1.3.xx(Vine Linux 3.1)
kh22-01.01 Apache の設定方法概要
kh22-01.02 メインサーバの基本設定
kh22-01.02 httpd.confファイルによるアクセス制御の方法
kh22-01.03 .htaccessファイルによるアクセス制御の方法
Apache の設定方法概要
Apache の設定ファイルApache の設定は、httpd.confファイル(Vine Linux では、通常 /etc/httpd/conf/ 配下に配置されています) によって行います。
Apache では、もう一つ補助的な設定方法として .htaccessファイルを用いることができます。
.htaccessファイルは、特別にディレクトリへのアクセス制御を行うための設定ファイルで、制御対象のディレクトリ配下に配置して使います。
httpd.confファイルと .htaccessファイルの両方を使うことで、きめ細かいアクセス制御を行うことができます。
httpd.confファイルの構成
デフォルトの httpd.confファイルは、以下の 3つのセクションから構成されています。
Section 1: Global Environment(サーバの総合的な環境設定)
Section 2: 'Main' server configuration(メインサーバの設定)
Section 3: Virtual Hosts(バーチャルホスト(仮想ホスト) の設定)
Section 1 及び Section 2 の基本的な設定については、次の メインサーバの基本設定 に、また Section 3 の Virtual Host については、[Apache の設定−3(バーチャルホストによる SSL利用)] に記述しています。
メインサーバの基本設定
httpd.conf ファイルの Section 1、および Section 2 に記述されている命令の内、基本的な設定として重要なものを、以下に簡単に説明します。- ServerType standalone
- ServerType命令は、サーバーの稼動方式を定義します。デフォルトの standalone はサーバをデーモンとして稼動させる場合で、inetd は inetd デーモンを通じてサーバを稼動させます。
- ServerRoot /etc/httpd
- ServerRoot命令は、サーバが存在するディレクトリのパスを定義します。通常、配下に conf/ や logs/ を含みます。デフォルトは、/etc/httpd です。
- Listen 80
- Listen命令の一般形式は、Listen [IP-address:]port で、ひとつ以上の IPアドレスやポートに対して、Apache が対応するように指定する命令です。Port命令で指定されているポート番号を Listen命令で指定した場合、全ての IPインターフェース対して、Apache が対応します。ポート番号 80 の指定はデフォルトです。
- Port 80
- Listen命令や BindAddress命令によってポート番号が指定されていない場合、Port命令は、メインサーバのネットワークポートを指定します。Listen命令や BindAddress命令によってポート番号が指定されていても、Port命令では、どのアドレスに対応するかには影響しません。また、Port命令は、SERVER_PORT環境変数値を設定します(CGI や SSI のための)。デフォルトは、80 です。
- User apache
- User命令は、リクエストに応える時の Unix 上の userid を設定します。デフォルトは、apache です。
- Group apache
- Group命令は、リクエストに応える時の Unix 上の group を設定します。デフォルトは、apache です。
- ServerAdmin email-address
- ServerAdmin命令は、サーバがエラーメッセージをクライアントに返すときの発信者のメールアドレスを設定します。
- ServerName fully-qualified-domain-name
- ServerName命令は、サーバのホスト名を設定します。
例:ServerName www.example.com
- DocumentRoot directory-path
- DocumentRoot命令は、httpd が提供するファイルが配置されたディレクトリを設定します。
例:DocumentRoot /usr/web
http://www.my.host.com/index.html が要求されたとき、/usr/web/index.html が返されます。
- [参考] Alias URL-path file-path|directory-path
- Alias命令は、DocumentRoot命令で定義されたディレクトリ以外の場所に置かれたファイルへのアクセスを許可する命令です。
例:Alias /image /ftp/pub/image
http://www.my.host.com/image/foo.gif が要求されたとき、/ftp/pub/image/foo.gif が返されます。
- UserDir public_html
- UserDir命令は、システムに登録されたユーザ毎のホームディレクトリ配下のディレクトリを指定して、アクセスを許可します。デフォルトは、public_html です。サーバが、http://www.foo.com/ の場合、http://www.foo.com/~bob/ でアクセスすれば、~bob/public_html/(ex. /home/bob/public_html/) 配下のファイルが返されます。
- DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.cgi
- DirectoryIndex命令は、クライアントが、ディレクトリ名の最後に「/」を指定してアクセスしたときに、当該ディレクトリ配下から返すファイルの名前を指定します。複数のファイルが見つかった場合は、最初に見つかったファイルが返されます。
ファイルが見つからず、かつ (IndexOptions命令 or IndexOrderDefault命令によって?) Indexesオプションが設定されていると、当該ディレクトリ配下のファイルリストが返されますので、注意が必要です。また、不要なファイル名は削除しておくといいでしょう。
- AccessFileName .htaccess
- .htaccessファイルがアクセス制御命令を記述したファイルであることを定義します。
[参照] .htaccessファイルによるアクセス制御の方法
- ServerSignature Off
- ServerSignature命令は、サーバがエラーメッセージ等を返すときのメッセージ内容を設定します。
On に設定すると、サーバのバージョン番号、サーバ名、ServerAdmin命令で指定しているメールアドレスなどを返します。サーバのセキュリティを守る観点では、Off に設定するのが安全です。
- ServerTokens ProductOnly
- ServerTokens命令は、サーバがクライアントに返すヘッダー情報の内容を指定します。ProductOnly を指定すると、「Server: Apache」という情報しか返しませんが、Full を指定すると「Server: Apache/1.3.0 (Unix) PHP/3.0 MyMod/1.2」のように、詳細な情報が返されます。何も指定しない場合のデフォルトは、Full と同等です。サーバの安全性を高めるために、ProductOnly を指定するのがいいでしょう。
httpd.confファイルによるアクセス制御の方法
httpd.confファイルによるアクセス制御を行う場合の、命令の使用ルールと、命令の種類について簡単に説明します。命令の使用ルール
Apache で使われる命令は、大きく別けて、メインサーバ用の記述に使かわれるもの、バーチャルホスト用の記述に使われるもの、ディレクトリ用の記述に使われるもの、.htaccessファイルの記述に使われるものに区分されています。
各命令には、以下の 1つまたは複数の使用区分が定義されています。これらの使用区分は、マニュアルでは、[Context:xxxx] 項目に、記述されています。
- Context:server config(メインサーバ)
- メインサーバ用の設定に使用できます。httpd.confファイルのメインサーバ設定領域で使用できますが、 <VirtualHost> や <Directory> の中では 使用できないことを示します。また、.htaccessファイルでの使用も許可されていません。
- Context:virtual host(バーチャルホスト)
- バーチャルホスト用の設定に使用できます。httpd.confファイルの <VirtualHost> の中で使用できることを示します。
- Context:directory(ディレクトリ)
- ディレクトリ用の設定に使用できます。httpd.confファイルの <Directory>、 <Location>、<Files> の中で、 各々の制限の下で使用できることを示します。
- Context:.htaccess
- ディレクトリ配下に配置した .htaccessファイルの中で使用できます。ただし、上書きの条件設定によっては、処理されない場合があります。
[注]
ディレクトリ用の命令は、<Directory>命令、<Location>命令、<Files>命令の中で使用することができますが、各々以下の「...」部分に命令を記述します。
<Directory directory> ... </Directory>
<Location URL-path|URL> ... </Location>
<Files filename> ... </Files>
また、<LocationMatch>命令や、<FilesMatch>命令についても、<Location>命令、<Files>命令と同様、ディレクトリ用の命令がその中で使用できます。
アクセス制御に使う命令
アクセス制御を行うことができる命令として、以下のものがあります。これら以外にもアクセス制御に使う命令はあると思いますが、とりあえず自分に必要そうなものをまとめてみました。
一応これらの命令とそれに関連する命令を知っていれば、アクセス制御に大きくは不自由しないと思います。
各命令の詳細説明は、[Apache の設定−2(アクセス制御命令の解説)] を参照してください。また、リファレンスマニュアル本文は、[Apache の設定−4(リファレンスマニュアル抜粋)] を参照してください。
なおこれらの命令については、httpd.confファイルへの記述はもちろんですが、.htaccessファイルへの記述も許可されています。
- Options命令
- 特定のディレクトリに対して、特定のサーバ制御(アクセス制御を含む) を適用する命令です。
- Require命令
- ユーザ認証の種類を選択することができます。
- <Files> ... </Files>命令
- ファイル名によるアクセス制御を設定します。
- <Limit> ... </Limit>命令
- <Limit> ... </Limit>命令の中に記述されたアクセス制御命令に対して、指定したアクセスメソッドだけを適用することを許可します。
.htaccessファイルによるアクセス制御の方法
.htaccessファイルは、httpd.confファイルに記述したアクセス制御に加えて、個別ディレクト単位でアクセス制御を行うための命令を記述したファイルです。アクセス制御したいディレクトリ配下に配置して使います。以下の命令を httpd.confファイルに記述することによって、.htaccessファイルに記述された命令が、そのディレクトリへのアクセス制御情報として上書きされ、実行されます。
<Directory directory>
AccessFileName .htaccess
AllowOverrid override override ...
</Directory>
.htaccessファイルを使うための命令
- AccessFileName .htaccess
- .htaccessファイルがアクセス制御命令を記述したファイルであることを定義します。
- AllowOverrid override override ...
- .htaccessファイルによって上書き可能なアクセス制御情報の種類を orverride により定義します。
override の値
- AuthConfig
- 認証命令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require, etc.) の使用を許可します。
- FileInfo
- ドキュメントタイプをコントロールする命令(AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority, etc.) の使用を許可します。
- Indexes
- ディレクトリインデクスをコントロールする命令(AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, etc.) の使用を許可します。
- Limit
- ホストへのアクセスをコントロールする命令(Order, Deny, Allow) の使用を許可します。
- Options
- 特定のディレクトリの設定をコントロールする命令(Options and XBitHack) の使用を許可します。
[Apache の設定−2(アクセス制御命令の解説)]
作成:2005年06月18日訂正:2005年09月02日
■ 参考ドキュメント
Apache HTTP Server Version 1.3
■ 使用パッケージ
apache-1.3.xx(Vine Linux 3.1)
kh22-02.01 Options命令
kh22-02.02 Order, Deny, Allow命令
kh22-02.03 Require命令
kh22-02.04 <Files>命令
kh22-02.05 <Limit>命令
Options命令
Options命令は、特定のディレクトリに対して、特定のサーバ制御(アクセス制御を含む) を適用する命令です。
この命令は、メインサーバ、バーチャルホスト、ディレクトリ、.htaccess のいずれでも使用可能です。
■ 記述形式(例)
<Directoy directory>
Options [+|-]option [[+|-]option] ...
</Directory>
■ 記述形式の説明
□ [+|-]
上位ディレクトリに、Options命令が適用されていて、その下位ディレクトリの Options命令に +option があると、その option が上位ディレクトリの Options命令に追加されて適用されます。また、-option があると、その option が上位ディレクトリの Options命令から除外されて適用されます。[+|-] がない場合は、上位ディレクトリの Options命令は無視されます。具体的な例は、マニュアルを参照してください。
□ option
option の値と意味は、以下のいずれかです。
- None
- 特別な制御は利用不可です。
- All
- MultiViews を除いた全てのものが利用可能です。
- ExecCGI
- そのディレクトリ配下の CGI の実行が認められます。
- FollowSymLinks
- そのディレクトリ配下へのシンボリックリンクを許可します。
記述例(デフォルトの httpd.conf)
<Directoy />
Options FollowSymlinks
</Directory>
この例では、ルートディレクトリ配下へのシンボリックリンクが許可されます。これによって、DocumentRoot で定義されたディレクトリ配下から、ルートディレクトリ配下へのシンボリックリンクが有効になります。
[参考] DocumentRoot命令
例えば、http://www.my.host.com/ がアクセスされたときに表示される、サーバ上のディレクトリを定義する命令で、メインサーバ、またはバーチャルホストの設定として必須の命令です。
記述例(デフォルトの httpd.conf)
DocumentRoot /home/httpd/html (最後にスラッシュをつけないフルパス表記)
- Includes
- そのディレクトリ配下で Sever-side includes(SSI) の実行を許可します。
[参考] SSI(Server Side Includes)
SSI は、HTMLドキュメントの中に埋め込んで使用する命令で、サーバがそのページをクライアントに提供する時にその命令を評価・実行します。この方法は、HTMLドキュメントの一部分を動的に生成するのに用いられます。SSI を使えば、CGI を用いなくとも、簡便に部分的な動的コンテンツを生成することが可能です。例えば、複数の HTMLドキュメントに共通のヘッダー情報やフッター情報がある場合に一括更新を行ったり、日付の自動更新などに使うと便利な方法です。
SSI についての詳細は、以下のドキュメントを参照してください。
Apache チュートリアル: Server Side Includes 入門
Module mod_include
- IncludesNOEXEC
- そのディレクトリ配下で Sever-side includes(SSI) の実行を許可しますが、#exec コマンドおよび #exec CGI は実行できません。なお、#include virtual CGI スクリプトは、ScriptAlias で指定されたディレクトリからは実行可能です。
- Indexes
- そのディレクトリの URL へアクセスがあったときに、DirectoryIndex命令で定義されたファイル(ex. index.html) がない場合、そのディレクトリ配下のファイルが表示されます。
[参考] DirectoryIndex命令
ファイルの指定なしにディレクトリへのアクセスがあったときに、優先的に表示するファイルを定義します。
この命令は、メインサーバ、バーチャルホスト、ディレクトリ、.htaccess のいずれでも使用可能です。
記述例(デフォルトの httpd.conf)
DirectoryIndex index.html index.htm index.shtml index.php index.php4 index.php3 index.cgi
- MultiViews
- マニュアルによると、「仮にサーバが、/some/dir/foo へのリクエストを受けたとき、/some/dir に MultiViews が許可されており、かつ /some/dir/foo が存在しない場合、サーバは、/some/dir 配下の foo.* を捜して、最適なファイルを選んでクライアントの要求に応える機能」のようですが、よく理解できていません。
- SymlinksIfOwnerMatch
- シンボリックリンクのユーザID とリンク元のファイルまたはディレクトリのユーザID が一致していれば、そのディレクトリ配下へのシンボリックリンクを許可します。
Order, Deny, Allow命令
Order, Deny, Allow命令は、アクセスコントロールの基本的な命令です。特定のディレクトリに対して、特定のドメインやホストからのアクセスを許可したり、拒否したりすることができます。
この命令は、ディレクトリ、.htaccess で使用可能です。
また特別な用法として、<Limit>命令の中に記述して、アクセスメソッド(Access Method) の選択と併せてアクセス制御することができます。アクセスメソッドの選択については、<Limit>命令を参照してください。
■ 記述形式(例)
<Directory directory>
Order ordering(ex. deny,allow)
Deny from host host ...
Allow from host host ...
</Directory>
■ 記述形式の説明
□ Order命令
Order命令は、Allow命令と Deny命令 の評価順序を指定します。
ordering は以下の値をとります。
- allow,deny
- Allow命令が評価された後、Deny命令が評価されます。
- deny,allow
- Deny命令が評価された後、Allow命令が評価されます。デフォルトは、deny,allow に設定されています。
- mutual-failure
- Allow命令にリストされ、Deny命令にリストされないホストからのアクセスを許可します。
□ Deny命令
host に指定されたホストからのアクセスを拒否します。host は以下の形式で記述されます。
- all
- 全てのホストからのアクセスを拒否します。
- ドメイン名
- 例えば .ncsa.uiuc.edu のように記述します。指定したドメイン名に所属する全てのホストからのアクセスを拒否します。
- IPアドレス
- 指定した IPアドレスのホストからのアクセスを拒否します。
- 部分的な IPアドレス
- IP アドレスの最初の 3バイトまでを指定します。指定しない残りのバイト部分をサブネットとみなし、サブネットに所属する全てのホストからのアクセスを拒否します。
- ネットワークアドレス/サブネットマスク
- 例えば 10.1.0.0/255.255.0.0 のように記述します。指定した ネットワークアドレス/サブネットマスク に所属する全てのホストからのアクセスを拒否します。
- ネットワークアドレス/サブネットマスク(ビット数表現)
- 例えば 10.1.0.0/16 のように記述します。指定した ネットワーク/nn に所属する全てのホストからのアクセスを拒否します。
□ Allow命令
host に指定されたホストからのアクセスを許可します。host の記述形式は、Deny命令と同様です。
Require命令
Require命令は、ユーザ認証の種類を選択することができます。
この命令は、ディレクトリ、.htaccess で使用可能です。
また特別な用法として、<Limit>命令の中に記述して、アクセスメソッド(Access Method) の選択と併せてユーザ認証に用いることができます。アクセスメソッドの選択については、<Limit>命令を参照してください。
■ 記述形式
Require entity-name [entity-name] ...
■ 記述形式の説明
entity-name は、以下の値をとります。
- user userid [userid] ...
- 特定のユーザ名に対してだけアクセスを許可します。
- group group-name [group-name] ...
- 特定のグループ名に所属するユーザに対してだけアクセスを許可します。
- valid-user
- 全ての正当なユーザにアクセスを許可します。
- file-owner
- そのファイルの所有者にのみアクセスを許可します。
- file-group
- そのファイルの所属グループにのみアクセスを許可します。
■ 補足
Require命令が正しく機能するには、AuthName命令や AuthType命令、および AuthUserFile命令や AuthGroupFile命令(ユーザ名やグループ名を定義) などの認証に係わる命令によって、認証(範囲)の名前、認証タイプ、認証対象のユーザ名を記述したファイル、認証対象のグループ名を記述したファイルが定義されている必要があります。
以下に、ディレクトリ /secret/ 配下へのアクセスに対して、ユーザ認証を行う場合の使用例を示します。
まず準備として、ユーザ名 USER_NAME をパスワードファイル .htpasswd に登録します。
パスワードファイル .htpasswd は、/etc/httpd/conf/ 配下に作成します。
# cd /etc/httpd/conf
# htpasswd -c .htpasswd USER_NAME
PASS_WORD を入力
-c オプションは、新規のパスワードファイルを作成する場合に使用します。.htpasswd は、/etc/httpd/conf/ 配下に作成されます。
------- httpd.conf の記述 -------
Alias /secret /secret
<Directory /secret>
AuthType Basic
AuthName "Top Secret"
AuthUserFile /etc/httpd/conf/.htpasswd
Require user USER_NAME
</Directory>
------- httpd.conf の記述 -------
これを実行すると、http://www.test.net/secret/ にアクセスがあった場合、Basic 認証による "Top Secret" という名称の認証画面 or 認証要求が表示されます。指定された USER_NAME と PASS_WORD が入力されれば、http://www.test.net/secret/ 配下のファイルが表示されます。管理者は、アクセスを許可するユーザに、認証名と USER_NAME および PASS_WORD を事前に知らせておく必要があります。
<Files>命令
<Files>命令は、ファイル名によるアクセス制御を設定します。
この命令はメインサーバ、バーチャルホスト、.htaccess で使用可能です。
また特殊な用法として、<Directory> ... </Directory> の中に記述することが許可されています。
■ 記述形式
<Files filename>
アクセス制御命令(ex. Order, Deny, Allow, Require命令、etc.)
....
</Files>
■記述形式の説明
filename には、アクセス制御する対象のファイル名を記述します。ファイル名には、ワイルドカードが使用できます。「?」はある一文字に一致し、「*」はある連続した文字列に一致します。また、「~」を前に付けることによって、正規表現によるファイル名を指定することができます。
正規表現によるファイル名指定の記述例
<Files ~ "\.(gif|jpe?g|png)$"> ... </Files;>
[参考] <FilesMatch>命令
<Files>命令と同じ制御機能ですが、デフォルトでファイル名に正規表現を用いることができます。
正規表現によるファイル名指定の記述例
<FilesMatch "\.(gif|jpe?g|png)$"> ... </FilesMatch>
<Limit>命令
通常アクセス制御は、全てのアクセスメソッドに対して有効です。一般的には、アクセス制御命令を <Limit>命令の中に記述すべきではありませんが、Order命令、Deny命令、Allow命令、Require命令は、使用が許可されています。
<Limit>命令は、命令の中に記述されたアクセス制御命令に対して、指定したアクセスメソッドだけを適用することを許可します。指定されなかったアクセスメソッドについては、何ら作用しません。
この命令は、httpd.conf 及び .htaccessファイルのどの命令の中でも使用できます。
■ 記述形式(例)
<Limit method [method] ...>
アクセス制御命令(Order, Deny, Allow, Require命令)
</Limit>
■ 記述形式の説明
method の値は、以下にリストしたものから選ばれます。
GET, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK
なお、各々のアクセスメソッドの意味については、RFC2616ドキュメントを参照してください。
[参考]
http://www.siisise.net/rfc2616-HTTP1.1-ja.txt
http://www.mars.dti.ne.jp/%7Etorao/rfc/rfc2616-ja.txt
http://www.ietf.org/rfc/rfc2616.txt
ftp://ftp.sra.co.jp/pub/doc/inet/rfc/RFC2600/rfc2616.txt
[参考] <LimitExcept>命令
この命令は、<Limit>命令とは逆に、指定したアクセスメソッド以外のメソッドに対してアクセス制御命令を適用する場合に使用します。
[Apache の設定−3(バーチャルホストによる SSL利用)]
作成:2005年06月18日■ 参考ドキュメント
Apache HTTP Server Version 1.3(ただし、SSL関連のドキュメントは Apache HTTP Server Version 2.0)
■ 使用パッケージ
apache-1.3.xx(Vine Linux 3.1)
kh22-03.01 デフォルトのSSL用バーチャルホスト
kh22-03.02 IP ベースバーチャルホスト
kh22-03.03 名前ベースバーチャルホスト
デフォルトのSSL用バーチャルホスト
SSL を利用するアプリケーションやドキュメントファイルをメインサーバ上で運用することはセキュリティ上避けるべきです。デフォルトの httpd.conf では、デフォルトのバーチャルホストを使ってメインサーバとは別のホストとして運用するように設定されています。以下は、デフォルトの SSL用バーチャルホストの設定を利用した例です。
<IfDefine HAVE_SSL>
Listen 443
SSLSessionCache shm:/var/cache/ssl_gcache_data(524288)
<VirtualHost _default_:443>
DocumentRoot /home/php/public_html
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
<Files ~ "\.(cgi|shtml)$">
SSLOptions +StdEnvVars
</Files>
<Directory /home/httpd/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
</VirtualHost>
</IfDefine>
[解説]
- <IfDefine HAVE_SSL>
- HAVE_SSL パラメーターが設定されていれば(SSL が有効であれば?) <IfDefine> ... </IfDefine> 内に記述された命令が実行されます。
- Listen 443
- SSL で使用するデフォルトのポートは 443 です。Listen命令については、メインサーバの基本設定 を参照してくだい。
- SSLSessionCache shm:/var/cache/ssl_gcache_data(524288)
- SSLSessionCache命令は、サーバに同時要求があった場合に、プロセススピードを上げるために追加的な能力を設定するものです。shm:/var/cache/ssl_gcache_data は、ハイパフォーマンスのハッシュテーブルを、/var/cache/ssl_gcache_dataファイルを通じてメモリーに作成することを指定しています。(524288) は、そのメモリーサイズを指定しています。この記述はデフォルトです。
- <VirtualHost _default_:443>
- <VirtualHost>命令は、1台のサーバで、複数の IPアドレスに対応するサーバを構築する場合(IPベースバーチャルホスト) や、1台のサーバ、1つの IPアドレスで、複数の「ホスト名.ドメイン名」をサポートするサーバを構築する場合(名前ベースバーチャルホスト) に使われる設定方法です。詳細は、IPベースバーチャルホスト および 名前ベースバーチャルホスト を参照してください。
_default_ を指定した場合、このバーチャルホストは、その他のバーチャルホストには明示的にリストされていない IPアドレスに対して、適用されます。_default_ が指定されていないと、適合するバーチャルホストがない場合、メインサーバのコンフィグレーションが適用されます。
- DocumentRoot /home/php/public_html
- 私の Web Server では、ユーザ名 php を登録し、UserDir命令を用いて、/home/php/public_html/ 配下を SSL用バーチャルホストに指定しています。
DocumentRoot命令、および UserDir命令については、メインサーバの基本設定 を参照してください。
- SSLEngine on
- この命令は、SSL/TLS プロコトルエンジンを使用する命令で、<VirtualHost>命令の中で使用します。on で有効となり、off で無効となります。
- SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
- この命令は、PEM-エンコードされた証明書ファイルを指定します。この場合、証明書ファイルは、server.crt で、配置ディレクトリは /etc/httpd/conf/ssl.crt/ 配下です。いずれもデフォルトの設定です。
なお、証明書ファイルについての詳細は、下記を参照してください。
kh19-02[Apache, OpenSSL, PHP, PostgreSQL の設定]
kh19-02.02 OpenSSL のインストールと設定
- SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
- この命令は、PEM-エンコードされた秘密鍵ファイルを指定します。この場合、秘密鍵ファイルは、server.key で、配置ディレクトリは /etc/httpd/conf/ssl.key/ 配下です。いずれもデフォルトの設定です。
なお、秘密鍵ファイルについての詳細は、下記を参照してください。
kh19-02[Apache, OpenSSL, PHP, PostgreSQL の設定]
kh19-02.02 OpenSSL のインストールと設定
- SSLOptions +StdEnvVars
- この命令は、SSL 実行時の各種オプションをディレクトリ単位で制御するために用います。複数の SSLOptions がディレクトリに適用されたときは、もっとも明確な(?)オプションが適用されます。オプションはマージできませんが、オプションの前に (+) または (-) 符号をつけることによってマージできます。
オプション StdEnvVars は、CGI/SSI 環境変数に関連する SSL 標準セットを生成します。通常、CGI と SSI の要求だけを取り扱う場合は、このオプションを使います。
- SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
- この命令は、リクエストの属性に基づいて環境変数を定義するものです。「これらの属性は、HTTP リクエストのヘッダーフィールドの値であったり、リクエストのその他の属性であったりする」と解説されていて、以下の事例が紹介されていますが、あまりよく理解できていません。
SetEnvIf Request_URI "\.gif$" object_is_image=gif
SetEnvIf Request_URI "\.jpg$" object_is_image=jpg
SetEnvIf Request_URI "\.xbm$" object_is_image=xbm
SetEnvIf Referer www\.mydomain\.com intra_site_referral
SetEnvIf object_is_image xbm XBIT_PROCESSING=1
IPベースバーチャルホスト
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>の中に記述された内容によって、IPベースバーチャルホストが設定されます。このバーチャルホストは複数のIPアドレスインターフェースを持つサーバ上に、それぞれの IPアドレスに対応する仮想ホストを設定するものです。例えば、内部ネットワーク用と外部ネットワーク用に同一名のサーバを動かす場合などに使われます。
addr には、バーチャルホストの IPアドレス、または「ホスト名.ドメイン名」が使用できます。
[設定例]
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/host.foo.com
ServerName host.foo.com
ServerAlias host
</VirtualHost>
[参考]
ServerAlias命令は、ServerName命令で定義されたサーバ名に対して、別名を定義します。
名前ベースバーチャルホスト
名前ベースのバーチャルホストは、ホスト名とそれに対応する IPアドレスを DNS で設定し、異なるホスト名を区別してサーバを設定する方法です。さらに、名前ベースのバーチャルホストでは、同一の IPアドレスに対して複数のホスト名を設定できるので、IPアドレスの不足を補うことができます。名前ベースバーチャルホストを使用する場合、以下の制約があります。
- IPアドレスとホスト名の名前解決のために、DNSサーバーが必要です。
- 名前ベースバーチャルホストは、SSLプロトコルの特徴により、SSLセキュアサーバには使えません。
[設定例]
NameVirtualHost * <VirtualHost *> ServerName www.domain.tld DocumentRoot /www/domain </VirtualHost> <VirtualHost *> ServerName www.otherdomain.tld DocumentRoot /www/otherdomain </VirtualHost>
NameVirtualHost 及び <VirtualHost> のどちらの場合も、* の部分には明示的に IPアドレスを指定することができます(バージョン 1.3.12 以前では IP アドレスの指定が必要です)。また、推奨されていませんが、NameVirtualHost においても、ホスト名を用いることが可能です。
[補足・若干の疑問]
今回、バーチャルホストについてのドキュメントを読むまでは、SSL用バーチャルホストの設定は、以下のように行っていました。
NameVirtualHost my_host.my_domain
<VirtualHsot my_host.my_domain>
ServerName my_host.my_domain
DocumentRoot /my/server/document
....
</VirtualHost>
名前解決はインターネット側の DNSサーバで行う前提です。実は、この設定でも SSL用バーチャルホストは、エラーもなく、見かけ上正常に稼動していました。
しかしドキュメントを読んでみて、この設定が適切かどうか疑問になり、現在は、デフォルトのSSL用バーチャルホスト の設定を用いています。どちらがより安全で、適切な方法なのか、どなたかもっと詳しい方がアドバイスいただければ、大変ありがたいと思っています。
[Apache の設定−4(リファレンスマニュアル抜粋)]
作成:2005年06月18日更新:2005年06月20日
Apache のリファレンスマニュアルは、以下のサイトを参照しました。
- 1. http://japache.infoscience.co.jp/japanese_1_3/manual/index.html
- 完全に日本語訳されたものですが、日本語が若干こなれていなかったり、2. に比べて内容が一部欠落していたりする(2. より古いドキュメントの翻訳かもしれません) ので、あくまで参考として読みました。
- 2. http://www.apache.jp/docs/
- ほとんどが英語で、一部の解説だけ日本語ですが、かえって信頼感があります。このサイトのドキュメントの中から、自分に必要と思われる解説、及び命令を選び、リンクを作成しています。(私の備忘録的活用のため)。
■ リンク先ドキュメント
Apache HTTP Server Version 1.3(ただし、SSL関連のドキュメントは Apache HTTP Server Version 2.0)
kh22-04.01 解説ドキュメント
kh22-04.02 ディレクティブ(命令)
解説ドキュメント
Apache のディレクティブの解説に使われる用語Apache バーチャルホスト説明書
Apache IP-based Virtual Host Support
名前ベースと IPベースのバーチャルホストの比較
Virtual Host examples for common setups
Apache チュートリアル: Server Side Includes 入門
Module mod_include
ディレクティブ(命令)
Apache ディレクティブAccessFileName
Alias
Allow
AllowOverride
AuthGroupFile
AuthName
AuthType
AuthUserFile
BindAddress
Deny
<Directory>
DirectoryIndex
DocumentRoot
<Files>
<FilesMatch>
Group
<IfDefine>
IndexOptions
IndexOrderDefault
<Limit>
<LimitExcept>
Listen
<Location>
<LocationMatch>
NameVirtualHost
Options
Order
Port
Require
ServerAdmin
ServerAlias
ServerName
ServerRoot
ServerSignature
ServerTokens
ServerType
SetEnvIf
SSLCertificateFile
SSLCertificateKeyFile
SSLEngine
SSLOptions
SSLSessionCache
User
UserDir
<VirtualHost>
XBitHack
|
|
|Home|私のLinux活用記録-Home-|

