Mercurial > hg > nginx-site
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 ~^(?<user>.+)\.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 チルダで始まっていないと完全一致名として、またはその正規表現にアスタリスクが含まれている場合はワイルドカード名として(そしてたいていの場合は無効なものとして)扱われてしまいます。“^” と “$” アンカーをセットし忘れないようにしてください。これらは構文的には必須ではありませんが論理的に必須です。また、ドメイン名のドットはバックスラッシュで必ずエスケープしてください。“{” と “}” 文字を含む正規表現は必ずダブルクォーテーションで囲ってください: | |
92 | |
93 <programlisting> | |
94 server_name "~^(?<name>\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>?<domain></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>?<<i>name</i>></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<<i>name</i>></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 (?< in ... | |
140 </programlisting> | |
141 | |
142 これは PCRE ライブラリが古いので <dirname>?P<<i>name</i>></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 デフォルトではないサーバブロックで “Host” ヘッダ無しのリクエストを処理させたい場合は、空のサーバ名を指定します: | |
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 アドレスを使用したリクエストが送られてきた場合、そのリクエストの “Host” ヘッダには 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 すべてのサーバに適合させる例では奇妙なサーバ名 “_” が使われます: | |
203 | |
204 <programlisting> | |
205 server { | |
206 listen 80 default_server; | |
207 server_name _; | |
208 return 444; | |
209 } | |
210 </programlisting> | |
211 | |
212 このサーバ名に特別なところはありません。単にどのサーバ名とも決してマッチしない無数の無効なドメイン名のひとつです。したがって、 “--”、“!@#” なども同様な結果を得られます。 | |
213 </para> | |
214 | |
215 <para> | |
216 nginx バージョン 0.6.25 までは特別なサーバ名 “*” をサポートしていて、これは誤ってすべてのサーバ名と一致するもの(キャッチオール名)として解釈されていました。この特別なサーバ名 “*”はキャッチオールまたはワイルドカードとして機能したことはありませんでした。代わりに、今は <dirname>server_name_in_redirect</dirname> ディレクティブによって提供されている機能の役を果たしていました。特別なサーバ名 “*” は今後廃止予定ですので、<dirname>server_name_in_redirect</dirname> ディレクティブを使うようにしてください。キャッチオール名を指定したり <dirname>server_name</dirname> ディレクティブを使用した<i>デフォルト</i>サーバを指定したりする方法はないことに注意してください。これは <dirname>listen</dirname> ディレクティブのプロパティであり、<dirname>server_name</dirname> ディレクティブのプロパティではありません。“<a href="/ja/docs/http/request_processing.xml" />” も参照してください。 | |
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 でサーバ名として “too.long.server.name.nginx.org” のような非常に長いサーバ名を定義している場合、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 以降、デフォルトのサーバ名の値は空の名前 “” です。 | |
311 </item> | |
312 | |
313 <item> | |
314 正規表現サーバ名の名前付きキャプチャのサポートは 0.8.25 からです。 | |
315 </item> | |
316 | |
317 <item> | |
318 正規表現サーバ名のキャプチャのサポートは 0.7.40 からです。 | |
319 </item> | |
320 | |
321 <item> | |
322 空のサーバ名 “” のサポートは 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> |