comparison xml/ja/docs/http/server_names.xml @ 0:61e04fc01027

Initial import of the nginx.org website.
author Ruslan Ermilov <ru@nginx.com>
date Thu, 11 Aug 2011 12:19:13 +0000
parents
children 9d544687d02c
comparison
equal deleted inserted replaced
-1:000000000000 0:61e04fc01027
1 <!DOCTYPE digest SYSTEM "../../../../dtd/article.dtd">
2
3 <article title="サーバ名"
4 link="/ja/docs/http/server_names.html"
5 lang="ja"
6 author="Igor Sysoev"
7 translator="DigitalCube Co. Ltd., wokamoto">
8
9 <section>
10
11 <para>
12 サーバ名は <dirname>server_name</dirname> ディレクティブを使用して定義され、リクエストに対してどのサーバブロックが使われるかを決定します。「<a href="/ja/docs/http/request_processing.xml" />」もお読みください。これらは完全一致名、ワイルドカード名、正規表現で定義されます:
13
14 <programlisting>
15 server {
16 listen 80;
17 server_name nginx.org www.nginx.org;
18 ...
19 }
20
21 server {
22 listen 80;
23 server_name *.nginx.org;
24 ...
25 }
26
27 server {
28 listen 80;
29 server_name mail.*;
30 ...
31 }
32
33 server {
34 listen 80;
35 server_name ~^(?&lt;user&gt;.+)\.nginx\.net$;
36 ...
37 }
38 </programlisting>
39
40 サーバ名は次の順序で考査されます:
41
42 <orderedlist>
43
44 <item>
45 完全一致名
46 </item>
47
48 <item>
49 アスタリスクで始まるワイルドカード名: <url>*.nginx.org</url>
50 </item>
51
52 <item>
53 アスタリスクで終わるワイルドカード名: <url>mail.*</url>
54 </item>
55
56 <item>
57 設定ファイル内の順序での正規表現
58 </item>
59
60 </orderedlist>
61 最初にマッチしたところで検索は終了します。.
62 </para>
63
64 </section>
65
66
67 <section name="wildcard_names"
68 title="ワイルドカード名">
69
70 <para>
71 ワイルドカード名にはそのサーバ名の最初か最後のみ、そしてドットに隣接したところのみにアスタリスクが含まれます。サーバ名 <dirname>www.*.nginx.org</dirname> や <dirname>w*.nginx.org</dirname> は無効です。しかし、これらのサーバ名は正規表現を使用して、例えば <dirname>~^www\..+\.nginx\.org$</dirname> や <dirname>~^w.*\.nginx\.org$</dirname> として指定することができます。アスタリスクは複数部分にマッチさせることができます。<dirname>*.nginx.org</dirname> は <url>www.nginx.org</url> だけでなく <url>www.sub.nginx.org</url> にもマッチします。
72 </para>
73
74 <para>
75 特別なワイルドカードの形式 <dirname>.nginx.org</dirname> は、完全一致名 <dirname>nginx.org</dirname> とワイルドカード名 <dirname>*.nginx.org</dirname> の両方にマッチさせるように利用できます。
76 </para>
77
78 </section>
79
80
81 <section name="regex_names"
82 title="正規表現名">
83
84 <para>
85 nginx で使用される正規表現は Perl プログラミング言語(PCRE)で使用されているものと互換性があります。正規表現を使用するには、サーバ名を必ずチルダで始めます:
86
87 <programlisting>
88 server_name ~^www\d+\.nginx\.net$;
89 </programlisting>
90
91 チルダで始まっていないと完全一致名として、またはその正規表現にアスタリスクが含まれている場合はワイルドカード名として(そしてたいていの場合は無効なものとして)扱われてしまいます。&ldquo;^&rdquo; と &ldquo;$&rdquo; アンカーをセットし忘れないようにしてください。これらは構文的には必須ではありませんが論理的に必須です。また、ドメイン名のドットはバックスラッシュで必ずエスケープしてください。&ldquo;{&rdquo; と &ldquo;}&rdquo; 文字を含む正規表現は必ずダブルクォーテーションで囲ってください:
92
93 <programlisting>
94 server_name "~^(?&lt;name&gt;\w\d<b>{</b>1,3<b>}</b>+)\.nginx\.net$";
95 </programlisting>
96
97 さもないと、nginx は起動に失敗し次のエラーメッセージを表示します:
98
99 <programlisting>
100 directive "server_name" is not terminated by ";" in ...
101 </programlisting>
102
103 正規表現の名前付きキャプチャは変数としてその後で使用されます:
104
105 <programlisting>
106 server {
107 server_name ~^(www\.)?(<b>?&lt;domain&gt;</b>.+)$;
108
109 location / {
110 root /sites/<b>$domain</b>;
111 }
112 }
113 </programlisting>
114
115 PCRE ライブラリは次の構文を使用した名前付きキャプチャをサポートしています:
116
117 <table note="yes">
118
119 <tr>
120 <td>?&lt;<i>name</i>&gt;</td>
121 <td>Perl 5.10 互換構文、PCRE-7.0 よりサポート</td>
122 </tr>
123
124 <tr>
125 <td>?'<i>name</i>'</td>
126 <td>Perl 5.10 互換構文、PCRE-7.0 よりサポート</td>
127 </tr>
128
129 <tr>
130 <td>?P&lt;<i>name</i>&gt;</td>
131 <td>Python 互換構文、PCRE-4.0よりサポート</td>
132 </tr>
133
134 </table>
135
136 nginx が起動に失敗すると次のエラーメッセージを表示します:
137
138 <programlisting>
139 pcre_compile() failed: unrecognized character after (?&lt; in ...
140 </programlisting>
141
142 これは PCRE ライブラリが古いので <dirname>?P&lt;<i>name</i>&gt;</dirname> 構文を試すように、という意味です。このキャプチャは数字形式でも使用できます:
143
144 <programlisting>
145 server {
146 server_name ~^(www\.)?(.+)$;
147
148 location / {
149 root /sites/<b>$2</b>;
150 }
151 }
152 </programlisting>
153
154 とはいえ、数字形式は簡単に上書きすることができるため、このような使用法は(上記のような)単純なケースに限るべきです。
155 </para>
156
157
158 </section>
159
160
161 <section name="miscellaneous_names"
162 title="その他のサーバ名">
163
164 <para>
165 デフォルトではないサーバブロックで &ldquo;Host&rdquo; ヘッダ無しのリクエストを処理させたい場合は、空のサーバ名を指定します:
166
167 <programlisting>
168 server {
169 listen 80;
170 server_name nginx.org www.nginx.org "";
171 ...
172 }
173 </programlisting>
174 </para>
175
176 <para>
177 <dirname>server_name</dirname> がサーバブロックで定義されていない場合は、nginx は<i>サーバ名</i>として空の名前を使用します。
178
179 </para>
180
181 <note>
182 nginx のバージョン 0.8.48 までは、このような場合はサーバ名としてホスト名を使用していました。
183 </note>
184
185 <para>
186 サーバ名ではなく IP アドレスを使用したリクエストが送られてきた場合、そのリクエストの &ldquo;Host&rdquo; ヘッダには IP アドレスが含まれているので、その IP アドレスをサーバ名として利用してそのリクエストを処理できます:
187
188 <programlisting>
189 server {
190 listen 80;
191 server_name nginx.org
192 www.nginx.org
193 ""
194 <b>192.168.1.1</b>
195 ;
196 ...
197 }
198 </programlisting>
199 </para>
200
201 <para>
202 すべてのサーバに適合させる例では奇妙なサーバ名 &ldquo;_&rdquo; が使われます:
203
204 <programlisting>
205 server {
206 listen 80 default_server;
207 server_name _;
208 return 444;
209 }
210 </programlisting>
211
212 このサーバ名に特別なところはありません。単にどのサーバ名とも決してマッチしない無数の無効なドメイン名のひとつです。したがって、 &ldquo;--&rdquo;、&ldquo;!@#&rdquo; なども同様な結果を得られます。
213 </para>
214
215 <para>
216 nginx バージョン 0.6.25 までは特別なサーバ名 &ldquo;*&rdquo; をサポートしていて、これは誤ってすべてのサーバ名と一致するもの(キャッチオール名)として解釈されていました。この特別なサーバ名 &ldquo;*&rdquo;はキャッチオールまたはワイルドカードとして機能したことはありませんでした。代わりに、今は <dirname>server_name_in_redirect</dirname> ディレクティブによって提供されている機能の役を果たしていました。特別なサーバ名 &ldquo;*&rdquo; は今後廃止予定ですので、<dirname>server_name_in_redirect</dirname> ディレクティブを使うようにしてください。キャッチオール名を指定したり <dirname>server_name</dirname> ディレクティブを使用した<i>デフォルト</i>サーバを指定したりする方法はないことに注意してください。これは <dirname>listen</dirname> ディレクティブのプロパティであり、<dirname>server_name</dirname> ディレクティブのプロパティではありません。&ldquo;<a href="/ja/docs/http/request_processing.xml" />&rdquo; も参照してください。
217 ポート *:80 と *:8080 で待ち受けているサーバを定義し、ひとつをポート *:8080 のデフォルトサーバへ、もうひとつをポート *:80 のデフォルトサーバへ振り向けることができます。
218
219 <programlisting>
220 server {
221 listen 80;
222 listen 8080 default_server;
223 server_name nginx.net;
224 ...
225 }
226
227 server {
228 listen 80 default_server;
229 listen 8080;
230 server_name nginx.org;
231 ...
232 }
233 </programlisting>
234 </para>
235
236
237 </section>
238
239
240 <section name="optimization"
241 title="最適化">
242
243 <para>
244 完全一致名とワイルドカード名はハッシュで保存されます。このハッシュは待ち受けポートに結び付けられ、各待ち受けポートは、完全一致名のハッシュ、アスタリスクで始まるワイルドカード名のハッシュ、アスタリスクで終わるワイルドカード名のハッシュの3つまでのハッシュを持つことができます。ハッシュのサイズは構成フェーズで最適化されるので、CPU キャッシュのミスは最低でもサーバ名を見つけることができます。最初に完全一致名のハッシュが検索されます。完全一致名のハッシュを使って見つからなければ、次にアスタリスクで始まるワイルドカード名のハッシュが検索されます。さらにまだ見つからなければ、アスタリスクで終わるワイルドカード名のハッシュが検索されます。ワイルドカード名のハッシュの検索は完全一致名のハッシュの検索よりも遅くなります。これはサーバ名の検索がドメイン部分によって検索されるからです。特別なワイルドカード形式の <dirname>.nginx.org</dirname> は完全一致名のハッシュではなくワイルドカード名のハッシュで保存されます。正規表現は順番に考査されるので、これがもっとも遅い方式ですし、非スケーラブルでもあります。
245 </para>
246
247 <para>
248 これらの理由から、可能な場合は完全一致名を利用するのがよいでしょう。例えば、もっとも頻繁にリクエストされるサーバ名が <url>nginx.org</url> と <url>www.nginx.org</url> だとすると、これらを明示的に定義するとより効率的です:
249
250 <programlisting>
251 server {
252 listen 80;
253 server_name nginx.org www.nginx.org *.nginx.org;
254 ...
255 }
256 </programlisting>
257
258 上記は次の単純化された形式を使用するよりも効率的です:
259
260 <programlisting>
261 server {
262 listen 80;
263 server_name .nginx.org;
264 ...
265 }
266 </programlisting>
267 </para>
268
269 <para>
270 たくさんの数のサーバ名を定義したり非常に長いサーバ名を定義したりする場合は、http レベルの <dirname>server_names_hash_max_size</dirname> と <dirname>server_names_hash_bucket_size</dirname> ディレクティブを調整する必要があるかもしれません。<dirname>server_names_hash_bucket_size</dirname> のデフォルト値は 32、もしくは 64、あるいはお使いの CPU キャッシュラインのサイズによってはその他の値になっているかもしれません。もしデフォルト値が 32 でサーバ名として &ldquo;too.long.server.name.nginx.org&rdquo; のような非常に長いサーバ名を定義している場合、nginx は起動に失敗し、次のエラーメッセージを表示させます:
271
272 <programlisting>
273 could not build the server_names_hash,
274 you should increase server_names_hash_bucket_size: 32
275 </programlisting>
276
277 この場合、このディレクティブの値を次の 2 の累乗にセットします:
278
279 <programlisting>
280 http {
281 server_names_hash_bucket_size 64;
282 ...
283 </programlisting>
284
285 非常にたくさんの数のサーバ名を定義した場合は次のエラーメッセージが表示されます:
286
287 <programlisting>
288 could not build the server_names_hash,
289 you should increase either server_names_hash_max_size: 512
290 or server_names_hash_bucket_size: 32
291 </programlisting>
292
293 まず最初に <dirname>server_names_hash_max_size</dirname> の値を、定義するサーバ名の数に近い数に設定して試します。この設定がうまくいかない時だけ、もしくは nginx の起動時間が許容できないほど長い場合だけ <dirname>server_names_hash_bucket_size</dirname> の値を増やしてみます。
294 </para>
295
296 <para>
297 待ち受けているポートがひとつだけでサーバもひとつだけの場合、nginx はサーバ名を考査しません(また、待ち受けポート用のハッシュも生成しません)。しかし一つ例外があります。<dirname>server_name</dirname> がキャプチャを伴った正規表現の場合、nginx はキャプチャを取得するためにこの正規表現を実行します。
298 </para>
299
300 </section>
301
302
303 <section name="compatibility"
304 title="互換性">
305
306 <para>
307 <list>
308
309 <item>
310 0.8.48 以降、デフォルトのサーバ名の値は空の名前 &ldquo;&rdquo; です。
311 </item>
312
313 <item>
314 正規表現サーバ名の名前付きキャプチャのサポートは 0.8.25 からです。
315 </item>
316
317 <item>
318 正規表現サーバ名のキャプチャのサポートは 0.7.40 からです。
319 </item>
320
321 <item>
322 空のサーバ名 &ldquo;&rdquo; のサポートは 0.7.12 からです。
323 </item>
324
325 <item>
326 ワイルドカードサーバ名と正規表現の最初のサーバ名としての使用は0.6.25 からサポートされています。
327 </item>
328
329 <item>
330 正規表現サーバ名のサポートは 0.6.7 からです。
331 </item>
332
333 <item>
334 ワイルドカードの形式 <url>nginx.*</url> のサポートは 0.6.0 からです。
335 </item>
336
337 <item>
338 特別な形式 <url>.nginx.org</url> のサポートは 0.3.18 からです。
339 </item>
340
341 <item>
342 ワイルドカードの形式 <url>*.nginx.org</url> のサポートは 0.1.13 からです。
343 </item>
344
345 </list>
346 </para>
347
348 </section>
349
350 </article>