Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


サイドバー

メインメニュー

XAMPP アレンジ

IED

WSL2

道具箱

リポジトリ編

フレームワーク編

公開ソフトウェア

メタ
リンク


このページへのアクセス
今日: 2 / 昨日: 6
総計: 5101

apache:2.4:httpd.conf

文書の過去の版を表示しています。


本編は投稿中です。しばらくお待ち下さい。

Apache2.4 httpd.confの編集

y2sunlight 2019-10-07

Apacheに戻る

関連記事


以下では、httpd.conf について説明しますが、その内容は本編の目的である「テスト用のローカルWebサーバの構築」です。従って、設定内容自体は公開用のWebサーバには当てはまりませんが、Apacheの設定方法に関してはある程度の参考になると思います。

XAMPP7.2でインストールした直後の httpd.conf は全体(インクルードファイルも含めて)で 約 1,800行あります。そのうち、行頭に # (シャープ記号)の付いた行はコメント行です。実際には、# が行頭にない行が有効な設定になります。httpd.conf は、次の3つのセクションから構成されています。

(Section 1)Global Enviroment Webサーバ全体の動作環境に関する設定
(Section 2)Main server configuretion メインサーバに関する設定
(Section 3)Supplemental configuretion 追加機能に関する設定

このセクション分けは便宜的なもので、設定上の特別な意味は持ちません。上で使われている「メインサーバ」と言う用語は、バーチャルホスティングによって扱われる仮想サーバに対して本来のWebサーバの事を指す言葉として使われています。仮想サーバの設置は Supplemental configuretion で行われています。

以下では、本編の目的である「テスト用のローカルWebサーバの構築」を行うための設定内容を、httpd.conf で出現するディレクティブの順に挙げます。尚、ここでは、インストール後に変更したもの及び説明のために特に重要と思われる主要な設定内容のみを挙げています。

Global Enviroment

サーバのインストールディレクトリ
ServerRoot "D:/usr/xampp7.2.22/apache"

ServerRoot ディレクティブは、 サーバのインストールディレクトリを設定します。通常、この中にはconf/ や logs/ といったサブディレクトリが存在します。httpd.conf に記述する他の設定ファイルの相対パスは、このディレクトリからになります。

httpのリスニング
Listen 80

Listen ディレクティブは Apache がリスニングするIP アドレスとポート番号を指定します。IPアドレスの指定がない場合、全インターフェースのリクエストに応答します。 Listen ディレクティブは必須のディレクティブで、設定ファイルに指定がなければ、サーバは起動に失敗します。

構文: Listen [IP-address:]portnumber

例:ポートを8080に変更する場合

Listen 8080

複数のIPアドレスやポートに対してリスニングする事もできます。例えば、80番と8080番のポートをリスニングするには以下のようにします。

Listen 80
Listen 8080
モジュールのロード
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule access_compat_module modules/mod_access_compat.so
 ...
LoadModule status_module modules/mod_status.so

LoadModule ディレクティブはモジュールを追加してサーバの機能を拡張します。初期にロードされているモジュールの一覧は前章の「apache2.4 Windows版の基本設定」を参照して下さい。

Main server configuretion

管理者メールアドレス
ServerAdmin postmaster@localhost

ServerAdmin ディレクティブには、サーバエラー発生時にブラウザに表示するエラーメッセージ中に記述する電子メールアドレスを設定します。

サーバのIPアドレスとポート番号
ServerName localhost:80

ServerName ディレクティブには、サーバが自分自身を示すホスト名とポートを設定します。 これは、リダイレクトする URL を生成する際に利用されます。公開用途でApacheを用いる場合は、DNS名を用いて以下のように記述しますが、本編では上のようにローカルホストを設定します。

ServerName y2sunlight.com:80

ServerNameが指定されていないときは、サーバはIPアドレスから逆引きを行なうことでホスト名を解決します。また、ServerName にポートが指定されていないときは、 サーバはリクエストが来ている ポートを使います。逆引きの手間を省く為にもServerName を使ってホスト名とポートを明示的に指定することをお薦めします。

デフォルトのアクセス制御
<Directory />
    AllowOverride none
    Require all denied
</Directory>

httpd.conf のこの辺からいよいよメインサーバに関するアクセス制御の中核に入っていきます。<Directory />ブロックはApacheインストール時に初期設定されます。この設定は全ての物理ディレクトリに対するアクセス制御(即ちデフォルトのアクセス制御)を表しています。 初期設定では

AllowOverride none アクセス制御ファイル(.htaccess)によるアクセス制御を全て禁止
Require all denied すべてのアクセスを拒否

になっています。これは、一旦、全てのホストからのアクセスを拒否しておいて、後で個別のドキュメントディレクトリに対して個別にアクセスを許可していきます。AllowOverride、Require の各ディレクティブについては「アクセス制御ディレクティブ 」をご覧下さい。また、より詳しく知りたい方は「Apache HTTP サーバ バージョン 2.4 ドキュメント( http://httpd.apache.org/docs-2.4/ )」を参照して下さい。

ドキュメントルート
DocumentRoot "D:/usr/xampp7.2.22/htdocs"

DocumentRootディレクティブには、ドキュメントルートを設定します。Apacheは指定されたURLパスがAlias またはScriptAlias ディレクティブにマッチしない場合には、ここで設定した物理パスに、リクエストされたURLパスを付加して物理パスを生成します。**DocumentRoot には最後のスラッシュを指定してはなりません。

ドキュメントルートのアクセス制御

FIXME

<Directory "D:/usr/xampp7.2.22/htdocs">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

TODO:

インデックスファイル
DirectoryIndex index.html index.html.var index.cgi index.php

TODO:

<IfModule dir_module>
    DirectoryIndex index.php index.pl index.cgi index.asp index.shtml index.html index.htm \
                   default.php default.pl default.cgi default.asp default.shtml default.html default.htm \
                   home.php home.pl home.cgi home.asp home.shtml home.html home.htm
</IfModule>

DirectoryIndex ディレクティブでは、クライアントが「/」 で終わるURLパスを要求(ディレクトリインデックス要求)した 場合に探すファイル名を設定します。複数のファイル名をスペースで区切って指定する事ができます。複数指定されている場合は、前に記述したものが優先されます。ここで指定したファイルが見つからず、Option Indexes が設定されている場合、Apacheはディレクトリリストを生成します。ここでは初期の設定にindex.cgiとindex.phpを追加しました。

尚、index.html.varは、Apacheがコンテントネゴシエーションを提供するための.varファイルです。コンテントネゴシエーションとは、ブラウザにより提供されたメディアタイプ、 言語、文字セットなどのネゴシエーション情報に基づいて、最適なリソースをWebサーバが選択ための機能です。

特別なファイルの保護

AccessFileName .htaccess
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

TODO:

<Files ".ht*">
    Require all denied
</Files>

AccessFileNameディレクティブは、アクセス制御ファイルの名前を設定します。このファイル名は既定では.htaccessです。このようにApacheでは.htで始まるファイルを特別視するのが習慣のようです。このような特別なファイルを保護するためには、<Files ~>ブロックを作り全てのホストからのアクセスを拒否します。<Files ~>ブロック内の “^\.ht” は正規表現で、「.htで始まるファイル」の意味です。正規表現についてはPerl に関する文献などを参照して下さい。 この設定はインストール時のもので変更していません。

エラーログ
ErrorLog logs/error.log
LogLevel warn

ErrorLogでエラーログファイル名を、LogLevelでエラーログのレベル(重要度)を指定します。Perlなどのテストではエラーログファイルを見る機会も多いと思います。この設定はインストール時のもので変更していません。

アクセスログ
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

CustomLog logs/access.log common

CustomLog ディレクティブはクライアントのHTTPリクエストのログ収集を指定します。この設定はインストール時のもので変更していません。この設定で、実際に有効なのは以下の部分です。

LogFormat “%h %l %u %t \”%r\“ %>s %b” common ログ形式を指定し、形式に名前(common)を付けます
CustomLog logs/access.log common 指定のログ形式(common)でログファイルを作ります

common以外の形式(combined/referer/agent)も定義してあります。公開用のWebサーバなどでは、目的と必要に応じてログファイルを追加します。

CGIディレクトリ
# ScriptAlias /cgi-bin/ "C:/usr/Apache2/cgi-bin/"          

# <Directory "C:/usr/Apache2/cgi-bin">
#     AllowOverride None
#     Options None
#     Order allow,deny
#     Allow from all
# </Directory>

AddHandlerディレクティブはファイル名の拡張子を特定のハンドラにマッピングします。この設定は、拡張子(cgiとpl)をCGI スクリプトとして扱うために、ハンドラcgi-script にマッピングします。また、CGIとして実行するためにはOptions ExecCGI を使用してCGIプログラムの実行を許可しなければまりません。本編のドキュメントディレクトリの設定は Options All なので、Options ExecCGI も含んでいます。

ハンドラ

 ハンドラとは、ファイルにマッピングされた「実行される動作」を表します。ハンドラはモジュールに組み込んだり、Action ディレクティブとして追加したりすることができます。以下に標準で組み込まれている主なハンドラを挙げます。

ハンドラ名 実行される動作 典型的な拡張子
send-as-isHTTP ヘッダのあるファイルをそのまま送ります .asis
cgi-script CGI スクリプト .cgi
imap-file イメージマップのルールファイル .map
type-map コンテントネゴシエーションのタイプマップ .var

コメント

コメントを入力. Wiki文法が有効です:
 
apache/2.4/httpd.conf.1570627637.txt.gz · 最終更新: 2019/10/09 22:27 by y2sunlight