github.com/krum110487/go-htaccess@v0.0.0-20240316004156-60641c8e7598/tests/data/apache_2_2_34/manual/mod/mod_unique_id.html.ja.utf8 (about)

     1  <?xml version="1.0" encoding="UTF-8"?>
     2  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     3  <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head>
     4  <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
     5  <!--
     6          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     7                This file is generated from xml source: DO NOT EDIT
     8          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     9        -->
    10  <title>mod_unique_id - Apache HTTP サーバ バージョン 2.2</title>
    11  <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
    12  <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
    13  <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
    14  <script src="../style/scripts/prettify.min.js" type="text/javascript">
    15  </script>
    16  
    17  <link href="../images/favicon.ico" rel="shortcut icon" /><link href="http://httpd.apache.org/docs/current/mod/mod_unique_id.html" rel="canonical" /></head>
    18  <body>
    19  <div id="page-header">
    20  <p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p>
    21  <p class="apache">Apache HTTP サーバ バージョン 2.2</p>
    22  <img alt="" src="../images/feather.gif" /></div>
    23  <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
    24  <div id="path">
    25  <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP サーバ</a> &gt; <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> &gt; <a href="../">バージョン 2.2</a> &gt; <a href="./">モジュール</a></div>
    26  <div id="page-content">
    27  <div class="retired"><h4>Please note</h4>
    28              <p> This document refers to a legacy release (<strong>2.2</strong>) of Apache httpd. The active release (<strong>2.4</strong>) is documented <a href="http://httpd.apache.org/docs/current">here</a>. If you have not already upgraded, please follow <a href="http://httpd.apache.org/docs/current/upgrading.html">this link</a> for more information.</p>
    29          <p>You may follow <a href="http://httpd.apache.org/docs/current/mod/mod_unique_id.html">this link</a> to go to the current version of this document.</p></div><div id="preamble"><h1>Apache モジュール mod_unique_id</h1>
    30  <div class="toplang">
    31  <p><span>翻訳済み言語: </span><a href="../en/mod/mod_unique_id.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
    32  <a href="../ja/mod/mod_unique_id.html" title="Japanese">&nbsp;ja&nbsp;</a> |
    33  <a href="../ko/mod/mod_unique_id.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
    34  </div>
    35  <div class="outofdate">この日本語訳はすでに古くなっている
    36              可能性があります。
    37              最近更新された内容を見るには英語版をご覧下さい。
    38          </div>
    39  <table class="module"><tr><th><a href="module-dict.html#Description">説明:</a></th><td>それぞれのリクエストに対する一意な識別子の入った環境変数を
    40  提供する</td></tr>
    41  <tr><th><a href="module-dict.html#Status">ステータス:</a></th><td>Extension</td></tr>
    42  <tr><th><a href="module-dict.html#ModuleIdentifier">モジュール識別子:</a></th><td>unique_id_module</td></tr>
    43  <tr><th><a href="module-dict.html#SourceFile">ソースファイル:</a></th><td>mod_unique_id.c</td></tr></table>
    44  <h3>概要</h3>
    45  
    46  
    47      <p>このモジュールは非常に制限された条件下で、
    48      それぞれのリクエストに「すべて」のリクエストに対して
    49      一意に決まることが保証されている魔法のトークンを提供します。
    50      この一意な識別子は、適切に設定されたクラスタでは複数の
    51      マシンの間でさえも一意になります。それぞれのリクエストに対して環境変数
    52      <code>UNIQUE_ID</code> に識別子が設定されます。
    53      一意な識別子が便利な理由はいろいろありますが、
    54      このドキュメントの目的からは外れるため、ここでは説明しません。</p>
    55  </div>
    56  <div id="quickview"><h3>トピック</h3>
    57  <ul id="topics">
    58  <li><img alt="" src="../images/down.gif" /> <a href="#theory">理論</a></li>
    59  </ul><h3 class="directives">ディレクティブ</h3>
    60  <p>このモジュールにディレクティブはありません。</p>
    61  <ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
    62  <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
    63  <div class="section">
    64  <h2><a name="theory" id="theory">理論</a></h2>
    65      
    66  
    67      <p>まずはじめに、Apache サーバが Unix
    68      マシンでどのように動作をするかを簡単に説明します。
    69      この機能は現時点では Windows NT ではサポートされていません。
    70      Unix マシンでは Apache はいくつかの子プロセスを作成し、
    71      その子プロセスが一つずつリクエストを処理します。それぞれの子プロセスは、
    72      生存期間中に複数のリクエストを扱うことができます。
    73      この議論では子プロセス間では一切データを共有しないことにします。
    74      以後、この子プロセスのことを <dfn>httpd プロセス</dfn> と呼びます。</p>
    75  
    76      <p>あなたのウェブサイトにはあなたが管理するいくつかのマシンがあるとします。
    77      それらをまとめてクラスタと呼ぶことにします。それぞれのマシンは複数の
    78      Apache を実行することもできます。
    79      これらすべてをまとめたものが「宇宙」であると考えられます。
    80      いくつかの仮定の下で、クラスタのマシン間がたくさん通信をすることなく、
    81      この宇宙の中でそれぞれのリクエストに一意な識別子を生成できることを示します。
    82      </p>
    83  
    84      <p>クラスタにあるマシンは以下の要求を見たさなければなりません。
    85      (マシンが一つだけだとしても、NTP で時計を合わせる方が良いです。)</p>
    86  
    87      <ul>
    88        <li>NTP や他のネットワーク上で時間を合わせるプロトコルによって
    89        各マシンの時間の同期が取られていること。</li>
    90  
    91        <li>モジュールがホスト名を引いて違う IP
    92        アドレスを受け取ることができるように、
    93        クラスタのそれぞれのマシンのホスト名が違うこと。</li>
    94      </ul>
    95  
    96      <p>オペレーティングシステムにおいては、pid (プロセス ID) が
    97      32 ビットの範囲内であることを仮定します。オペレーティングシステムの
    98      pid が 32 ビットを超える場合は、簡単な修正ではありますが、
    99      コードを変更する必要があります。</p>
   100  
   101      <p>これらの仮定が満たされていると、ある時点において、
   102      クラスタ内のどのマシンのどの httpd
   103      プロセスでも、一意に同定することができます。これはマシンの IP
   104      アドレスと httpd プロセスの pid で十分に行なうことができます。
   105      ですから、リクエストに一意な識別子を生成するためには、
   106      時刻を区別する必要があるだけです。</p>
   107  
   108      <p>時刻を区別するために、Unix のタイムスタンプ (UTC の 1970 年
   109      1 月 1 日からの秒数) と、16 ビットのカウンタを使います。
   110      タイムスタンプの粒度は一秒ですので、一秒間の 65536
   111      までの値を表現するためにカウンタを使用します。四つの値
   112      <em>( ip_addr, pid, time_stamp, counter )</em> で各 httpd
   113      プロセスで一秒の間に 65536 リクエストを数えあげることができます。
   114      時間が経つと pid が再利用されるという問題がありますが、
   115      この問題を解決するためにカウンタが使用されます。</p>
   116  
   117      <p>httpd の子プロセスが作成されると、カウンタは
   118      (その時点のマイクロ秒 ÷ 10) modulo 65536 で初期化されます
   119      (この式はいくつかのシステムにある、マイクロ秒の
   120      タイマの下位ビットが異なるという問題を解決するために選ばれました)。
   121      一意な識別子が生成されたとき、使用されるタイムスタンプは
   122      ウェブサーバにリクエストが到着した時刻になります。
   123      カウンタは識別子が生成されるたびに増加します 
   124      (あふれた場合は 0 に戻ります)。</p>
   125  
   126      <p>カーネルはプロセスをフォークすると、それぞれのプロセスのために
   127      pid を生成します。pid は繰り返されることが許可されています
   128      (pid の値は多くの Unix では 16 ビットですが、新しいシステムでは
   129      32 ビットに拡張されています)。
   130      ですから、ある程度の時間が経過すると同じ pid が再び使用されます。
   131      しかし、一秒内に再使用されなければ、
   132      四つの値の一意性は保たれます。つまり、我々はシステムが一秒間
   133      に 65536 個のプロセスを起動しないと仮定しています (いくつかの Unix
   134      では 32768 プロセスですが、それですらほとんどあり得ないでしょう)。</p>
   135  
   136      <p>何らかの理由で、同じ時刻が繰り返されたとしましょう。
   137      つまり、システムの時計が狂っていて、もう一度過去の時刻になってしまった
   138      (もしくは進みすぎていたときに、
   139      正しい時刻に戻したために再び将来の時刻になってしまった) とします。
   140      この場合、pid とタイムスタンプが再使用されることが簡単に示されます。
   141      カウンタ初期化用の関数は、この問題の回避を手助けしようと選択されています。
   142      本当はカウンタの初期化をするためにランダムな数字を使いたいのですが、
   143      ほとんどのシステムでは簡単に使用できる数は無いことに注意してください
   144      (<em>すなわち</em>、rand ()は使えません。rand () には seed
   145      を与える必要があり、seed には時刻を使えません。一秒単位では、
   146      その時刻はすでに繰り返されているからです)。
   147      これは、完璧な対策ではありません。</p>
   148  
   149      <p>この対策はどのくらい効果があるでしょうか?
   150      ここでは、マシン群の中の一つは最大で一秒に 500
   151      リクエストを扱うと仮定します (これを書いている時点では妥当な上限です。
   152      通常システムがすることは静的なファイルを取りだすだけではありませんから)。
   153      それを行なうために、そのマシンは並行して来るクライアントの数に
   154      応じた数の子プロセスを要求します。
   155      しかしながら、悲観的に考えて、一つの子プロセスが一秒に 500
   156      リクエストを扱えるとします。そうすると、(一秒の精度において)
   157      時刻が同じ時を繰り返すと、この子プロセスがカウンタの値を再び使い、
   158      一意性が壊れる可能性が 1.5% あります。
   159      これは非常に悲観的な例で、実世界の値では、ほとんど起こりそうにありません。
   160      それでもこれが起こる可能性のあるようなシステムなら、
   161      (プログラムコードを編集して) 
   162      カウンタを 32 ビットにするのが良いでしょう。
   163      </p>
   164  
   165      <p>サマータイムにより時計が「戻される」ことを気にしている人が
   166      いるかもしれません。ここで使用される時間は UTC であり、
   167      それは「常に」進むのでここでは問題になりません。x86 上の Unix
   168      はこの条件を満たすために適切な設定が必要かもしれないことに
   169      注意してください。マザーボードの時計は UTC になっていて、
   170      他の時間はそこから適切に補正されることを仮定できるように
   171      設定されなければなりません。そのような場合でさえ、NTP
   172      を使っているならばリブート後にすぐ正しい UTC の時間になるでしょう。</p>
   173  
   174      <p><code>UNIQUE_ID</code> 環境変数は 112 ビット (32 ビット IP
   175      アドレス、32 ビット pid, 32 ビットタイムスタンプ、16
   176      ビットカウンタの四つの組) をアルファベット <code>[A-Za-z0-9@-]</code>
   177      を用いて MIME の base64 符号化と同様の方法により符号化し、19
   178      の文字を生成することにより作成されます。MIME の base64
   179      のアルファベットは実際は <code>[A-Za-z0-9+/]</code> ですが、
   180      <code>+</code> と <code>/</code> とは URL
   181      では特別な符号化が必要なので、あまり望ましくありません。
   182      全ての値はネットワークバイトオーダで符号化されますので、
   183      符号は違ったバイトオーダのアーキテクチャ間で比較可能です。
   184      実際の符号化の順番は: タイムスタンプ、IP アドレス、pid,
   185      カウンタです。この順には目的がありますが、
   186      アプリケーションは符号を解析するべきではないことを強調しておきます。
   187      アプリケーションは符号化された <code>UNIQUE_ID</code>
   188      全体を透過的なトークンとして扱うべきです。
   189      <code>UNIQUE_ID</code> は他の <code>UNIQUE_ID</code>
   190      との等価性を調べるためだけにのみ使用できます。</p>
   191  
   192      <p>この順番は将来、既存の <code>UNIQUE_ID</code>
   193      のデータベースとの衝突を心配することなく符号を変更することが
   194      可能になるように選択しています。
   195      新しい符号はタイムスタンプを最初の要素として残すのが望ましく、
   196      それ以外は同じアルファベットとビット長を使うことができます。
   197      タイムスタンプは本質的に増加系列ですので、
   198      クラスタの全てのマシンがリクエストとサーバ機能を停止して、
   199      古い符号化方式を使用するのをやめる<em>フラグ秒</em>があれば十分です。
   200      その後は、リクエストを再開し、
   201      新しい符号を発行することができるようになります。</p>
   202  
   203      <p>我々はこれが、
   204      この問題に対する比較的移植性の高い解決法だと考えています。
   205      Windows NT のようなマルチスレッドのシステムに拡張することができますし、
   206      将来必要になればさらに増やすこともできます。
   207      ID は必要に応じて長くすることができますので、生成された ID
   208      は実質上、無限に有効です。また、クラスタのマシン間の通信も事実上必要なく
   209      (NTP による同期のみが必要で、これはオーバヘッドはあまりありません)、httpd
   210      プロセス間の通信も必要ありません (通信はカーネルにより割り当てられた
   211      pid の値により暗黙の内に行なわています)。
   212      さらに限られた状況下では、ID はさらに短くすることができますが、
   213      より多くの情報を仮定する必要がでてきます (例えば、32 ビット
   214      IP アドレスはどのサイトにおいても過剰な情報ですが、
   215      それの代わりになる移植性のあるものはありません)。</p>
   216  </div>
   217  </div>
   218  <div class="bottomlang">
   219  <p><span>翻訳済み言語: </span><a href="../en/mod/mod_unique_id.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
   220  <a href="../ja/mod/mod_unique_id.html" title="Japanese">&nbsp;ja&nbsp;</a> |
   221  <a href="../ko/mod/mod_unique_id.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
   222  </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
   223  <script type="text/javascript"><!--//--><![CDATA[//><!--
   224  var comments_shortname = 'httpd';
   225  var comments_identifier = 'http://httpd.apache.org/docs/2.2/mod/mod_unique_id.html';
   226  (function(w, d) {
   227      if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
   228          d.write('<div id="comments_thread"><\/div>');
   229          var s = d.createElement('script');
   230          s.type = 'text/javascript';
   231          s.async = true;
   232          s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
   233          (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
   234      }
   235      else { 
   236          d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
   237      }
   238  })(window, document);
   239  //--><!]]></script></div><div id="footer">
   240  <p class="apache">Copyright 2017 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p>
   241  <p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
   242  if (typeof(prettyPrint) !== 'undefined') {
   243      prettyPrint();
   244  }
   245  //--><!]]></script>
   246  </body></html>