yoshiki 01/05/21 00:33:25 Added: htdocs/manual env.html.html env.html.ja.jis Removed: htdocs/manual env.html Log: New Japanese translation. This one corresponds to previous revision. I forgot to commit this document in January. I guess it's better to have translation of previous revision than to try to update and forget to commit again. ;-) Revision Changes Path 1.1 httpd-docs-1.3/htdocs/manual/env.html.html Index: env.html.html =================================================================== 1.1 httpd-docs-1.3/htdocs/manual/env.html.ja.jis Index: env.html.ja.jis =================================================================== Apache の環境変数

Apache における環境変数

多くのオペレーティングシステムは、環境変数と呼ばれる、情報の保存、伝達のための 機能を提供しています。動作方法を制御したり、CGI スクリプトのような他の プログラムと通信したりするために、Apache は多くの方法で環境変数を使います。 この文書では、Apache における環境変数の使用法をいくつか説明します。


環境変数の設定

関連モジュール

mod_env
mod_rewrite
mod_setenvif
mod_unique_id
関連ディレクティブ

BrowserMatch
BrowserMatchNoCase
PassEnv
RewriteRule
SetEnv
SetEnvIf
SetEnvIfNoCase
UnsetEnv

基本的な環境の操作

Apache において環境変数を設定する一番基本的な方法は、 無条件に環境変数を設定する SetEnv ディレクティブを使用することです。 PassEnv ディレクティブにより、Apache が起動されたシェルの 環境変数を渡すこともできます。

リクエスト毎に条件に基づいて設定する

より柔軟性を高めるために、mod_setenvif で提供されているディレクティブを 使用することで、リクエストの特性に基づいて環境変数を設定することができます。 例えば、特定のブラウザ (User-Agent) のリクエストや特定の Referer [意図的な綴りです] (訳注: 正しい綴りは referrer ですが、HTTP の仕様では Referer となっています) ヘッダが見つかったときのみ 変数を設定することができます。mod_rewrite の RewriteRule ディレクティブにおいて 環境変数を設定する [E=...] オプションを使用することで、 より柔軟な設定を行なうことができます。

一意な識別子

mod_unique_id は、非常に限られた条件の下で 「すべて」のリクエストについて、 一意であることが保証されている値を環境変数 UNIQUE_ID に設定します。


標準 CGI 変数

Apache の設定ファイルで設定された環境変数とシェルから渡される環境変数に 加えて、CGI スクリプトと SSI ページには CGI の使用で要求されている、リクエストの メタ情報を持った環境変数の組が提供されます。

いくつかの注意

環境変数の使用

関連モジュール

mod_access
mod_cgi
mod_include
mod_log_config
mod_rewrite
関連ディレクティブ

Allow
CustomLog
Deny
LogFormat
RewriteCond
RewriteRule

CGI スクリプト

環境変数の主な利用法の一つは、CGI スクリプトに情報を伝えることです。 上で説明されているように、CGI スクリプトに渡される環境変数は Apache の 設定により設定される変数に加えて、リクエストの標準のメタ情報を含んでいます。 詳細は CGI チュートリアル を参照してください。

SSI ページ

mod_include の server-parsed ハンドラで処理される server-parsed (SSI) ドキュメントでは、echo 要素を使用すると環境変数が 出力されます。また、ページのある部分がリクエストの性質の応じて 変更されるように、環境変数をフロー制御要素で使うことができます。 詳細は SSI チュートリアル を参照してください。

アクセス制御

allow from env= ディレクティブと deny from env= ディレクティブを使用して、サーバへのアクセスを環境変数の値で制御することができます。 SetEnvIf ディレクティブと組み合わせることで、クライアントの特性に基づいて サーバへのアクセス制御を柔軟に行なうことができるようになります。 例えば、これらのディレクティブを使用して、特定のブラウザ (User-Agent) からの アクセスを拒否することができます。

条件付きログ記録

LogFormat ディレクティブのオプション %e を使用することで、 環境変数をアクセスログに記録することができます。さらに、 CustomLog ディレクティブの条件分岐式を使用することで、 環境変数の値によってリクエストをログに記録するかどうかを決めることができます。 SetEnvIf ディレクティブと組み合わせることで、どのリクエストをログに 記録するかを柔軟に制御することが可能になります。例えば、gif で 終わるファイル名へのリクエストはログに記録しない、違うサブネットの クライアントからのリクエストだけをログに記録する、という選択が可能です。

URL の書き換え

RewriteCond ディレクティブで評価文字列として %{ENV:...} 式を指定することで、mod_rewrite の書き換えエンジンが環境変数に基いて条件分岐を 行なうことができます。mod_rewrite が使用可能な変数で ENV: が 前についていない変数は、実際は環境変数ではないということに注意してください。 それらは他のモジュールからは使用できない mod_rewrite 用の特別な変数です。


特別な目的の環境変数

互換性の問題を解決するために、特定のクライアントと通信しているときは Apache の 動作を変更できる機構が導入されました。 できるだけ柔軟にするために、これらの機構は環境変数を定義することで呼び出されます。 普通は、BrowserMatch ディレクティブを使いますが、 例えば SetEnv ディレクティブや PassEnv ディレクティブも使用することができます。

downgrade-1.0

これを指定することで、リクエストが HTTP/1.0 より新しいプロトコルの場合でも、 HTTP/1.0 として扱われます。

force-no-vary

応答ヘッダがクライアントに送られる前に Vary フィールドを 取り除きます。クライアントの中にはこのフィールドを正しく解釈しないものが あります (クライアントの既知の問題 のページを参照してください)。この変数を設定することでその問題を回避することが できます。この変数を設定すると、force-response-1.0 が 設定されたことになります。

force-response-1.0

これが設定されていると、常に HTTP/1.0 での応答になります。 この機能は、元々は AOL のプロキシの問題のために実装されました。クライアントの中には、 HTTP/1.1 の応答を返されると正しく動作しないものがあるかもしれません。 この機能を使用することで、そのようなクライアントとの間の互換性問題を解決できます。

nokeepalive

これが設定されている場合は、KeepAlive を使用しないようにします。


おかしな挙動をするクライアントに対してプロトコルの動作を変更する

クライアントに関する既知の問題に対処するために、以下の行を httpd.conf に入れることを推奨しています。

  #
  # The following directives modify normal HTTP response behavior.
  # The first directive disables keepalive for Netscape 2.x and browsers that
  # spoof it. There are known problems with these browser implementations.
  # The second directive is for Microsoft Internet Explorer 4.0b2
  # which has a broken HTTP/1.1 implementation and does not properly
  # support keepalive when it is used on 301 or 302 (redirect) responses.
  #
  BrowserMatch "Mozilla/2" nokeepalive
  BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
  
  #
  # The following directive disables HTTP/1.1 responses to browsers which
  # are in violation of the HTTP/1.0 spec by not being able to grok a
  # basic 1.1 response.
  #
  BrowserMatch "RealPlayer 4\.0" force-response-1.0
  BrowserMatch "Java/1\.0" force-response-1.0
  BrowserMatch "JDK/1\.0" force-response-1.0
  

画像へのリクエストをアクセスログに記録しない

この例では、画像へのリクエストがアクセスログに現れないようにします。 これを変更することで、特定のディレクトリのログ収集をやめたり、特定のホストからのリクエストの ログ収集をやめたりすることが簡単にできます。

      SetEnvIf Request_URI \.gif image-request
      SetEnvIf Request_URI \.jpg image-request
      SetEnvIf Request_URI \.png image-request
      CustomLog logs/access_log env=!image-request
  

「画像の盗用」を防ぐ

この例は、別のサーバにいる人が、あなたのサーバにある画像を inline 画像として 使用することを防ぎます。これは推奨されている設定ではありませんが、 ある限定された状況では有効です。ここでは、すべての画像は /web/images というディレクトリにあると仮定します。

      SetEnvIf Referer "^http://www.example.com/" local_referal
      # Allow browsers that do not send Referer info
      SetEnvIf Referer "^$" local_referal
      <Directory /web/images>
         Order Deny,Allow
         Deny from all
         Allow from env=local_referal
      </Directory>
  

注: 'referer' と 'referal' の綴りは意図的なものです (訳注: 正しい綴りは referrer と referral)。

この手法に関する詳しい情報は ApacheToday のチュートリアル "Keeping Your Images from Adorning Other Sites" を参照してください。

--------------------------------------------------------------------- To unsubscribe, e-mail: apache-docs-unsubscribe@apache.org For additional commands, e-mail: apache-docs-help@apache.org