From 766882dec81c0c1aa74437b617249f427fec5da6 Mon Sep 17 00:00:00 2001
From: Yoshiki Hayashi <Directory>
、
- <Location>
、
- <Files>
- の中で、 Directory、Location、Files
- セクションの機能
+ <Directory>
,
+ <Location>
,
+ <Files>
+ コンテナの中で、 Directory, Location, Files セクションの動作方法
で説明されている制限の下で使用できることを示します。参照
Expires
HTTP headers according to
user-specified criteria
もし url-path の最後に /
- を書いたなら、サーバはエイリアスを展開するために最後の /
- を要求するということに注意してください。すなわち、Alias /icons/
- /usr/local/apache/icons/
というものを使用していると、
+ を書いたなら、サーバがエイリアスを展開するためには、最後の /
+ が必要になることに注意してください。すなわち、Alias /icons/
+ /usr/local/apache/icons/
というものを使用している場合は、
/icons
という url はエイリアスされません。
エイリアスの行き先を含んでいる <Directory>
@@ -107,6 +107,21 @@
セクションはエイリアスが処理される前に実行されますので、
こちらは適用されます。)
特に、Alias
を
+ DocumentRoot
+ ディレクトリの外側に配置した場合は、行き先のディレクトリに対する
+ アクセス権限を明示的に制限しなければならないでしょう。
+ Alias /image /ftp/pub/image
+ <Directory /ftp/pub/image>
+
+ Order allow,deny
+ Allow from all
+
+ </Directory>
+
このディレクティブは ScriptAlias
とほとんど同じですが、簡単な先頭からのマッチを行なうのではなく、
標準正規表現を利用します。ここで指定された正規表現と URL-path
- が合うかどうかを調べ、合う場合は括弧で括られたマッチを
+ が合うかどうかを調べ、合う場合は括弧で括られたマッチを
与えられた文字列で置き換え、それをファイル名として使用します。
たとえば、標準の /cgi-bin
を使用するようにするためには、以下のようなものを使います:
diff --git a/docs/manual/mod/mod_dav.html.ja.jis b/docs/manual/mod/mod_dav.html.ja.jis
index fce58330e86..5e6d870d008 100644
--- a/docs/manual/mod/mod_dav.html.ja.jis
+++ b/docs/manual/mod/mod_dav.html.ja.jis
@@ -48,7 +48,9 @@
DavLockDB
mod_dav を有効にするには、httpd.conf
ファイル中のコンテナに次を加えます:
LoadModule
を使用して実行時にロードされている必要があります。
- 動作させるには、httd.conf
ファイルの
- グローバルセクションに次を加えて、ウェブサーバが書き込みできる
- DAV ロックデータベースファイル名を指定します。
さらに、DAV ロックデータベースの場所が
+ DavLockDB
ディレクティブを使って
+ httd.conf
ファイルのグローバルセクションに指定されている
+ 必要があります。
- DavLockDB /tmp/DavLock
+ DavLockDB /usr/local/apache2/var/DavLock
ロックデータベースファイルのあるディレクトリは Apache が実行されている
+ User
と Group
に書き込み権限がある必要があります。
<Limit>
節を <Location>
ディレクティブ内部に追加して、DAV が有効な場所への
@@ -89,7 +95,7 @@
ディレクティブは DAV リクエストに対しては効力を持ちません。
- DavLockDB /tmp/DavLock
+ DavLockDB /usr/local/apache2/var/DavLock
<Location /foo>
@@ -99,7 +105,7 @@
AuthName DAV
AuthUserFile user.passwd
- <LimitExcept GET HEAD OPTIONS>
+ <LimitExcept GET OPTIONS>
require user admin
@@ -108,13 +114,68 @@
</Location>
HTTP 基本認証の使用は推奨できません。少なくとも
- mod_auth_digest
モジュールで提供される HTTP
- ダイジェスト認証を用いるべきです。WebDAV クライアントのほとんどは
- この認証方法に対応しています。もちろん、SSL
- が有効なコネクションを通した基本認証でもセキュリティが確保できます。
mod_dav
は Greg Stein さんの Apache 1.3 用の mod_dav に
+ 由来するものです。そのサイトからより多くの情報を手に入れることができます。
DAV のアクセスメソッドは遠隔クライアントがサーバのファイルを
+ 操作することを可能にしますので、 mod_dav
を使用する
+ 前に、サーバが安全であることを特に注意して確認しなければなりません。
サーバ上の DAV が使用可能になっている場所はすべて認証で保護してください。
+ HTTP 基本認証の使用は推奨できません。少なくとも
+ mod_auth_digest
モジュールで提供される HTTP
+ ダイジェスト認証を用いるべきです。WebDAV クライアントのほとんどは
+ この認証方法に対応しています。代わりに、SSL が
+ 有効なコネクションを通した基本認証を使うこともできます。
mod_dav
がファイルを操作できるようにするためには、
+ 管理下のディレクトリとファイルとに Apache が実行されている User
と Group
で書き込み可能である必要があります。
+ 新しく作成されるファイルもこの User
+ と Group
に所有される
+ ことになります。この理由から、そのアカウントへのアクセスを制御することは
+ 重要です。DAV リポジトリは Apache 専用のものだとみなされています。
+ Apache 以外の方法でファイルを修正すること (例えば FTP やファイルシステム
+ 用のツールなどを使って) は許可されていません。
mod_dav
はいろいろな種類のサービス拒否攻撃にさらされる
+ かもしれません。LimitXMLRequestBody
ディレクティブを使うと
+ 大きな DAV リクエストを解析するときに消費されるメモリの量を制限することが
+ できます。DavDepthInfinity
ディレクティブは
+ PROPFIND
リクエストが巨大リポジトリで大量のメモリを消費するのを
+ 防ぐことができます。他のサービス拒否攻撃には単純に使用可能なディスク領域を
+ 多くの大きなファイルで埋めてしまうんものがあります。これを直接防ぐ方法は
+ Apache にはありませんので、信用できないユーザに DAV アクセスを提供するのは
+ 避けた方が良いでしょう。
よくある要求に、mod_dav
を使って動的なファイル
+ (PHP スクリプト、CGI スクリプトなど) を操作したいというものがあります。
+ これの実現は、GET
リクエストはスクリプトの内容をダウンロードさせる
+ 代わりに、スクリプトを常に実行させてしまうので難しくなっています。
+ これを回避する方法には、二つの違う URL を同じコンテンツにマップし、
+ 一つはスクリプトを実行させ、もう一つはダウンロードさせたり、DAV から
+ 操作されたりするように設定するというものがあります。
+Alias /phparea /home/gstein/php_files
+Alias /php-source /home/gstein/php_files
+<Location /php-source>
+
+ DAV On
+ ForceType text/plain
+
+</Location>
+
この設定により、http://example.com/phparea
を PHP スクリプトの
+ 出力をアクセスするために使うことができ、
+ http://example.com/php-source
を DAV クライアントによる
+ が操作のために使うことができます。
filesystem
は mod_dav
- のデフォルトプロバイダになっていますから、filesystem
- の代わりに単に
+ のデフォルトプロバイダになっていますから、代わりに単に
On
と指定することもできます。
ロックデータベースへのフルパスを、拡張子を除いた形で
指定するには、DavLockDB
を使います。パスが絶対パスでなければ、ServerRoot
からの相対パスと解釈されます。
- mod_dav_fs
の実装では、ユーザロックを
+ mod_dav_fs
実装では、ユーザロックを
追跡するために SDBM データベースを使います。
圧縮機能は DEFLATE
フィルタ
- により実装されています。以下のディレクティブはそのディレクティブのある
- コンテナ中のドキュメントを圧縮するようにします:
よく使われているブラウザでは、すべてのコンテンツに対する - 圧縮を扱えるわけではありません。ですから、'gzip-only-text/html' - ノートを 1 にして、html ファイルに対してのみ - 圧縮が働くようにした方がよいかもしれません (以下参照) -
-この値を 1 以外の値に設定した場合は無視されますので、 - ネガティブマッチを行なうことができます。
- -SetEnv gzip-only-text/html 1
-SetOutputFilter DEFLATE
-
これは Apache のドキュメンテーションに対して圧縮を有効にする設定です:
- -
-<Directory "/your-server-root/manual">
- SetEnv gzip-only-text/html 1
- SetOutputFilter DEFLATE
-</Directory>
-
HTML ファイルの圧縮についてですらも問題のあるブラウザに対しては、
- BrowserMatch
- ディレクティブを使って特定のブラウザに対しては圧縮が行なわれないように
- 'no-gzip' ノートをセットすると良いでしょう。
下にせっかちな人向けの設定例を示します。しかしぜひ時間を取って + 下記の詳細もお読み下さい!
+
+ AddOutputFilterByType DEFLATE text/html text/plain text/xml
+
+ <Location />
+
+ # Insert filter
+ SetOutputFilter DEFLATE
+
+ # Netscape 4.x has some problems...
+ BrowserMatch ^Mozilla/4 gzip-only-text/html
+
+ # Netscape 4.06-4.08 have some more problems
+ BrowserMatch ^Mozilla/4\.0[678] no-gzip
+
+ # MSIE masquerades as Netscape, but it is fine
+ # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
+
+ # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
+ # the above regex won't work. You can use the following
+ # workaround to get the desired effect:
+ BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
+
+ # Don't compress images
+ SetEnvIfNoCase Request_URI \
+
+ \.(?:gif|jpe?g|png)$ no-gzip dont-vary
+
+
+ # Make sure proxies don't deliver the wrong content
+ Header append Vary User-Agent env=!dont-vary
+
+ </Location>
+
圧縮機能は DEFLATE
フィルタ
+ により実装されています。以下のディレクティブはそのディレクティブのある
+ コンテナ中のドキュメントを圧縮するようにします:
+ SetOutputFilter DEFLATE
+
よく使われているブラウザでは、すべてのコンテンツに対する
+ 圧縮を扱えるわけではありません。ですから、gzip-only-text/html
+ ノートを 1
にして、html ファイルに対してのみ
+ 圧縮が働くようにした方がよいかもしれません (以下参照)
+ この値を 1
以外の値に設定した場合は無視されます。
通常、特定のMIMEタイプについてのみ圧縮したいのであれば、
+ AddOutputFilterByType
+ ディレクティブを使用します。次に Apache のドキュメントの html
+ ファイルのみの圧縮を有効にする例を示します。
+ <Directory "/your-server-root/manual">
+
+ AddOutputFilterByType DEFLATE text/html
+
+ </Directory>
+
全てのファイルタイプでの圧縮に問題を抱えているブラウザに対しては、
+ BrowserMatch
+ ディレクティブを使用して、特定のブラウザに no-gzip
+ ノートをセットし、圧縮が行なわれないようにします。
+ no-gzip
と gzip-only-text/html
+ を組み合わせることで上手く対処できます。
+ この場合、前者が後者をオーバーライドします。
+ 上記の設定例の抜粋を
+ 次に示しますのでご覧下さい。
+ BrowserMatch ^Mozilla/4 gzip-only-text/html
+ BrowserMatch ^Mozilla/4\.0[678] no-gzip
+ BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
+
まず始めに User-Agent
文字列から Netscape Navigator
+ 4.x であるかどうかを調べます。これらのバージョンでは、
+ text/html
以外のタイプの圧縮を扱うことができません。
+ 4.06, 4.07, 4.08 は html ファイルの伸張にも問題を抱えています。
+ ですからこれらに対しては、完全に deflate フィルタをオフにします。
3 番目の BrowserMatch
+ ディレクティブで、推測したユーザーエージェントを修正します。
+ なぜなら Microsoft Internet Explorer も "Mozilla/4" と特定されますが、
+ これらは実際には圧縮を扱うことができるからです。
+ User-Agent
ヘッダを "MSIE"
+ (\b
は「単語の境界」を意味します) の追加文字で検査して、
+ これ以前に設定した制限を再び解除します。
DEFLATE
フィルタは必ず、PHP や SSI といった RESOURCE
+ フィルタの後になります。
+ DEFLATE フィルタは内部的なサブリクエストを関知しません。
+ mod_deflate
モジュールは、gzip
+ で圧縮されたリクエスト本体を伸張するフィルタも提供しています。
+ この機能を有効にするには、SetInputFilter
+ か AddInputFilter
を使用して、
+ DEFLATE
フィルタを入力フィルタチェインに組み込みます。
+ 例えば次のようになります。
+ <Location /dav-area>
+
+ SetInputFilter DEFLATE
+
+ </Location>
+
この設定であれば、Content-Encoding: gzip
+ ヘッダを含むリクエストが来ると、本体は自動的に伸張されます。
+ gzip リクエスト本体を送信するブラウザはあまりありません。
+ しかし、例えば WebDAV
+ クライアントの幾つかなど、特別なアプリケーションでリクエストの
+ 圧縮を実際にサポートしているものもあります。
リクエスト本体それ自体を評価する場合は、Content-Length
+ ヘッダを信用しないでください。Content-Length ヘッダは、
+ クライアントから送信されるデータの長さを反映しているのであって、
+ 伸張されたデータストリームのバイトカウントではありません。
mod_deflate
モジュールは Vary: Accept-Encoding
+ HTTP 応答ヘッダを送信して、適切な Accept-Encoding
+ リクエストヘッダを送信するクライアントに対してのみ、
+ プロクシサーバがキャッシュした応答を送信するように注意を喚起します。
+ このようにして、圧縮を扱うことのできないクライアントに
+ 圧縮された内容が送られることのないようにします。
もし特別に何かに依存して除外したい場合、例えば User-Agent
+ ヘッダなどに依存している場合、手動で Vary
ヘッダを設定して、
+ 追加の制限についてプロクシサーバに注意を行なう必要があります。
+ 例えば User-Agent
に依存して DEFLATE
+ を追加する典型的な設定では、次のように追加することになります。
+ Header append Vary User-Agent
+
リクエストヘッダ以外の情報 (例えば HTTP バージョン)
+ に依存して圧縮するかどうか決める場合、
+ Vary
ヘッダを *
に設定する必要があります。
+ このようにすると、仕様に準拠したプロクシはキャッシュを全く行なわなくなります。
+ Header set Vary *
+