env.html.ja.utf8 revision 190240988946204427a80158f9533b7fc77ce4ad
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>Apache の環境変数 - Apache HTTP サーバ</title>
<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="/mod/">モジュール</a> | <a href="/mod/directives.html">ディレクティブ</a> | <a href="/faq/">FAQ</a> | <a href="/glossary.html">用語</a> | <a href="/sitemap.html">サイトマップ</a></p>
<p class="apache">Apache HTTP サーバ バージョン 2.3</p>
<div id="path">
<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="./">バージョン
2.3</a></div><div id="page-content"><div id="preamble"><h1>Apache の環境変数</h1>
<div class="toplang">
<p><span>言語: </span><a href="/en/env.html" hreflang="en" rel="alternate" title="English"> en </a> |
</div>
<p>Apache HTTP サーバは<em>環境変数</em>と呼ばれる、名前のついた
変数に情報を記憶する仕組みを提供しています。この情報はログ収集や
アクセス制御などのいろいろな操作を制御するために使うことができます。
これらの変数は CGI スクリプトなどの外部プログラムと通信するためにも
使われます。この文書はそれらの変数の操作方法と使用方法をいくつか
紹介します。</p>
<p>これらの変数は<em>環境変数</em>と呼ばれていますが、オペレーティング
システムによって制御されている環境変数と同じではありません。
実際は、これらの変数は Apache の内部構造の中に記憶され、操作されています。
それらは、CGI や SSI スクリプトに渡されたときだけ、実際の
オペレーティングシステムの環境変数になります。サーバ自身が
実行されているオペレーティングシステムの環境を操作したい場合は、
オペレーティングシステムのシェルが提供している標準の環境変数の
操作方法を使わなければなりません。</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#setting">環境変数の設定</a></li>
</ul></div>
<div class="section">
<h2><a name="setting" id="setting">環境変数の設定</a></h2>
<table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_env.html">mod_env</a></code></li><li><code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="/mod/mod_setenvif.html">mod_setenvif</a></code></li><li><code class="module"><a href="/mod/mod_unique_id.html">mod_unique_id</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code></li><li><code class="directive"><a href="/mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li><li><code class="directive"><a href="/mod/mod_env.html#passenv">PassEnv</a></code></li><li><code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li><li><code class="directive"><a href="/mod/mod_env.html#setenv">SetEnv</a></code></li><li><code class="directive"><a href="/mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li><li><code class="directive"><a href="/mod/mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></code></li><li><code class="directive"><a href="/mod/mod_env.html#unsetenv">UnsetEnv</a></code></li></ul></td></tr></table>
<h3><a name="basic-manipulation" id="basic-manipulation">基本的な環境の操作</a></h3>
<p>Apache において環境変数を設定する一番基本的な方法は、
無条件に環境変数を設定する <code class="directive"><a href="/mod/mod_env.html#setenv">SetEnv</a></code> ディレクティブを使用することです。
ディレクティブにより、Apache が起動されたシェルの
環境変数を渡すこともできます。</p>
<h3><a name="conditional" id="conditional">リクエスト毎に条件に基づいて設定する</a></h3>
<p>より柔軟性を高めるために、mod_setenvif
で提供されているディレクティブを使用することで、リクエストの
特性に基づいて環境変数を設定することができます。例えば、特定のブラウザ
(User-Agent) のリクエストや特定の Referer [意図的な綴りです]
<span class="transnote">(<em>訳注:</em> 正しい綴りは referrer ですが、HTTP の仕様では Referer
となっています)</span>ヘッダが見つかったときのみ変数を設定することができます。
mod_rewrite の <code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>
ディレクティブにおいて環境変数を設定する <code>[E=...]</code>
オプションを使用することで、
より柔軟な設定を行なうことができます。</p>
<h3><a name="unique-identifiers" id="unique-identifiers">一意な識別子</a></h3>
<p>mod_unique_id は、非常に限られた条件の下で
「すべて」のリクエストについて、一意であることが保証されている値を環境変数
<code>UNIQUE_ID</code> に設定します。</p>
<h3><a name="standard-cgi" id="standard-cgi">標準 CGI 変数</a></h3>
<p>Apache の設定ファイルで設定された環境変数とシェルから渡される
リクエストのメタ情報を持った環境変数の組が提供されます。</p>
<h3><a name="caveats" id="caveats">いくつかの注意</a></h3>
<ul>
<li>環境を操作するディレクティブを使って標準 CGI
変数を上書きしたり変更したりすることはできません。</li>
が使用されている場合、CGI スクリプトが起動するために、環境変数は<em>安全</em>な環境変数の組に整理されます。
で定義されます。</li>
<li>移植性のために、環境変数の名前はアルファベット、
数字とアンダースコア <span class="transnote">(<em>訳注:</em> '_')</span> だけから成ります。
さらに、最初の文字は数字であってはいけません。
この制限に合わない文字は CGI スクリプトと SSI
ページに渡されるときにアンダースコアに置換されます。</li>
段階の中でも遅くに実行されます。つまり
などからは、変数がそこで設定されていることがわかりません。</li>
</ul>
<div class="section">
<h2><a name="using" id="using">環境変数の使用</a></h2>
<table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_authz_host.html">mod_authz_host</a></code></li><li><code class="module"><a href="/mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="/mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="/mod/mod_headers.html">mod_headers</a></code></li><li><code class="module"><a href="/mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="/mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="/mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="/mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="/mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="/mod/mod_headers.html#header">Header</a></code></li><li><code class="directive"><a href="/mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="/mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="/mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li></ul></td></tr></table>
<h3><a name="cgi-scripts" id="cgi-scripts">CGI スクリプト</a></h3>
<p>環境変数の主な利用法の一つは、CGI スクリプトに情報を伝えることです。
上で説明されているように、CGI スクリプトに渡される環境変数は Apache
の設定により設定される変数に加えて、リクエストの標準のメタ情報を含んでいます。
を参照してください。</p>
<h3><a name="ssi-pages" id="ssi-pages">SSI ページ</a></h3>
<p>mod_include の <code>INCLUDES</code> フィルタで処理される
server-parsed (SSI) ドキュメントでは、<code>echo</code>
要素を使用すると環境変数が出力されます。
また、ページのある部分がリクエストの性質に応じて変更されるように、
環境変数をフロー制御要素で使うことができます。詳細は
<h3><a name="access-control" id="access-control">アクセス制御</a></h3>
<p><code>allow from env=</code> ディレクティブと <code>deny from env=</code>
ディレクティブを使用して、サーバへのアクセスを環境変数の値で制御することができます。
ディレクティブと組み合わせることで、クライアントの特性に基づいて
サーバへのアクセス制御を柔軟に行なうことができるようになります。
たとえば、これらのディレクティブを使用して、特定のブラウザ (User-Agent)
からのアクセスを拒否することができます。</p>
<h3><a name="logging" id="logging">条件付きログ記録</a></h3>
ディレクティブのオプション <code>%e</code>
を使用することで、環境変数をアクセスログに記録することができます。さらに、
ディレクティブの条件分岐式を使用することで、
環境変数の値によってリクエストをログに記録するかどうかを決めることができます。
ディレクティブと組み合わせることで、
どのリクエストをログに記録するかを柔軟に制御することが可能になります。たとえば、
<code>gif</code> で終わるファイル名へのリクエストはログに記録しない、
違うサブネットのクライアントからのリクエストだけをログに記録する、
という選択が可能です。</p>
<h3><a name="response-headers" id="response-headers">条件付き応答ヘッダ</a></h3>
ディレクティブは環境変数の存在や不在によってクライアントへの応答に特定の
HTTP ヘッダを付けるかどうかを決めることができます。
これにより、たとえば、クライアントからのリクエスト
にあるヘッダがある場合にのみ特定の応答ヘッダを送る、というようなことが
できます。</p>
<h3><a name="external-filter" id="external-filter">外部フィルタの適用</a></h3>
<p><code class="directive"><a href="/mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code>
ディレクティブを使用して
<code>disableenv=</code> と <code>enableenv=</code>
オプションを使って、環境変数による条件付き適用ができます。</p>
<h3><a name="url-rewriting" id="url-rewriting">URL の書き換え</a></h3>
ディレクティブで<em>評価文字列</em>として
<code>%{ENV:...}</code> 式を指定することで、mod_rewrite
の書き換えエンジンが環境変数に基いて条件分岐を行なうことができます。
mod_rewrite が使用可能な変数で <code>ENV:</code> が前についていない変数は、
実際は環境変数ではないということに注意してください。
それらは他のモジュールからは使用できない mod_rewrite 用の特別な変数です。
</p>
<div class="section">
<h2><a name="special" id="special">特別な目的の環境変数</a></h2>
<p>互換性の問題を解決するために、特定のクライアントと通信しているときは
Apache の動作を変更できる機構が導入されました。できるだけ柔軟にするために、
これらの機構は環境変数を定義することで呼び出されます。普通は、
ディレクティブを使いますが、たとえば <code class="directive"><a href="/mod/mod_env.html#setenv">SetEnv</a></code> ディレクティブや <code class="directive"><a href="/mod/mod_env.html#passenv">PassEnv</a></code> ディレクティブも使用することができます。</p>
<h3><a name="downgrade" id="downgrade">downgrade-1.0</a></h3>
<h3><a name="force-gzip" id="force-gzip">force-gzip</a></h3>
<p><code>DEFLATE</code> フィルタが使用するように設定されているときに、
この環境変数はブラウザの accept-encoding の設定を無視して常に
圧縮された出力を送るようにします。</p>
<h3><a name="force-no-vary" id="force-no-vary">force-no-vary</a></h3>
<p>応答ヘッダがクライアントに送られる前に <code>Vary</code>
フィールドを取り除きます。
クライアントの中にはこのフィールドを正しく解釈しないものがあります。
この変数を設定することでその問題を回避することができます。
この変数を設定すると、<strong>force-response-1.0</strong>
が設定されたことになります。</p>
<h3><a name="force-response" id="force-response">force-response-1.0</a></h3>
この機能を使用することで、そのようなクライアントとの間の互換性問題を解決できます。</p>
提供の <code>DEFLATE</code> 出力フィルタを無効にします。
また、静的に、既に圧縮されたファイルを使用したい場合、
(gzip だけでなく、"identity" と異なる全てのエンコードに対して)
<h3><a name="no-gzip" id="no-gzip">no-gzip</a></h3>
<code>DEFLATE</code> フィルタがオフになります。
はエンコードされたリソースを送らないようにします。</p>
<h3><a name="nokeepalive" id="nokeepalive">nokeepalive</a></h3>
<p>これが設定されている場合は、<code class="directive"><a href="/mod/core.html#keepalive">KeepAlive</a></code> を使用しないようにします。</p>
<h4><a name="prefer-language" id="prefer-language">prefer-language</a></h4>
(<code>en</code>, <code>ja</code>, <code>x-klingon</code>といった)
言語タグが格納されていれば、その言語の variant を送信しようとします。
そのような variant がない場合は、
適用されます。</p>
<h3><a name="redirect-carefully" id="redirect-carefully">redirect-carefully</a></h3>
<p>これはクライアントへのリダイレクトの送信をサーバがより注意深く
行なうようにします。
これは通常、リダイレクトに際してクライアントに
問題があることが分かっている場合に使われます。この機能は元々は
マイクロソフトのウェブフォルダのソフトが DAV
メソッドによるディレクトリのリソースへのリダイレクトの扱いに
問題がり、それを回避するために実装されました。</p>
<h3><a name="suppress-error-charset" id="suppress-error-charset">suppress-error-charset</a></h3>
<p><em>Apache 2.2 以降で利用可能</em></p>
<p>クライアントのリクエストに対する応答としてリダイレクトを送信する際、
レスポンスにはリダイレクトが自動的に行なえない (行なわれない)
場合に表示するテキストが含まれます。
通常、このテキストに合致したキャラクタセット、ISO-8859-1
でラベル付けをします。</p>
<p>しかし、リダイレクト先が別の文字セットを使っている場合、
ある問題のあるブラウザのバージョンでは、
リダイレクト先の実際の文字セットの代わりに、
リダイレクト元の文字セットを使ってしまうことがあります。
その結果、例えば変な描画が行なわれたりして、読めなくなったりします。</p>
<p>この環境変数を設定することで、リダイレクションテキストに対する
キャラクタセットの指定を除去しますので、それら問題のあるブラウザでも
リダイレクト先の文字セットを正しく使うようにできます。</p>
<div class="warning">
<h3>セキュリティ</h3>
<p>文字セットを指定せずにエラーページを送信すると、
クロスサイトスクリプティング <span class="transnote">(<em>訳注:</em> XSS)</span>
攻撃の危険性がでてきます。
"推測" しようとするブラウザ (MSIE) が実際にあるからです。
そのようなブラウザは UTF-7 文字セットを使って簡単に騙すことができます。
クロスサイトスクリプティング攻撃を防ぐために実装されている
通常のエスケープ機構が、入力データ中にある UTF-7 で
エンコードされたコンテンツ (リクエスト URI など) には
うまく動作しないからです。</p>
</div>
<h3><a name="proxy" id="proxy">force-proxy-request-1.0, proxy-nokeepalive, proxy-sendchunked, proxy-sendcl</a></h3>
<div class="section">
<h2><a name="examples" id="examples">例</a></h2>
<h3><a name="misbehaving" id="misbehaving">おかしな挙動をするクライアントに対してプロトコルの動作を変更する</a></h3>
<p>クライアントに関する既知の問題に対処するために、以下の行を
httpd.conf に入れることを推奨しています。</p>
<p>古いバージョンの Apache では、クライアントの問題に対応するために
httpd.conf に次の行を加えるよう推奨されていましたが、
今となっては、問題としていたクライアントは実際には見かけることは
なくなってきたので、この設定はもはや必要ないかもしれません。</p>
<div class="example"><pre>
#
# 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
# 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
#
# 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</pre></div>
<h3><a name="no-img-log" id="no-img-log">画像へのリクエストをアクセスログに記録しない</a></h3>
<p>この例では、画像へのリクエストがアクセスログに現れないようにします。
これを変更することで、特定のディレクトリのログ収集をやめたり、
特定のホストからのリクエストのログ収集をやめたりすることが簡単にできます。
</p>
<div class="example"><pre>
SetEnvIf Request_URI \.gif image-request
SetEnvIf Request_URI \.jpg image-request
SetEnvIf Request_URI \.png image-request
<h3><a name="image-theft" id="image-theft">「画像の盗用」を防ぐ</a></h3>
<p>この例は、別のサーバにいる人が、あなたのサーバにある画像を
inline 画像として使用することを防ぎます。
これは推奨されている設定ではありませんが、ある限定された状況では有効です。
というディレクトリにあると仮定します。</p>
<div class="example"><pre>
SetEnvIf Referer "^http://www\.example\.com/" local_referal
# Allow browsers that do not send Referer info
SetEnvIf Referer "^$" local_referal
Order Deny,Allow
Deny from all
Allow from env=local_referal
</Directory></pre></div>
<p>この手法に関する詳しい情報は ServerWatch にあるチュートリアル
「<a href="http://www.serverwatch.com/tutorials/article.php/1132731">Keeping Your Images from Adorning Other Sites</a>
」を参照してください。</p>
</div></div>
<div class="bottomlang">
<p><span>言語: </span><a href="/en/env.html" hreflang="en" rel="alternate" title="English"> en </a> |
</div><div id="footer">
<p class="apache">Copyright 2011 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="/mod/">モジュール</a> | <a href="/mod/directives.html">ディレクティブ</a> | <a href="/faq/">FAQ</a> | <a href="/glossary.html">用語</a> | <a href="/sitemap.html">サイトマップ</a></p></div>
</body></html>