Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
nginx
GitHub Repository: nginx/nginx.org
Path: blob/main/xml/ja/docs/http/server_names.xml
1 views
1
<!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
2
3
<article name="サーバ名"
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
サーバ名は <literal>server_name</literal> ディレクティブを使用して定義され、リクエストに対してどのサーバブロックが使われるかを決定します。「<link doc="request_processing.xml" />」もお読みください。これらは完全一致名、ワイルドカード名、正規表現で定義されます:
13
14
<programlisting>
15
server {
16
listen 80;
17
server_name example.org www.example.org;
18
...
19
}
20
21
server {
22
listen 80;
23
server_name *.example.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;.+)\.example\.net$;
36
...
37
}
38
</programlisting>
39
40
サーバ名は次の順序で考査されます:
41
42
<list type="enum">
43
44
<listitem>
45
完全一致名
46
</listitem>
47
48
<listitem>
49
アスタリスクで始まるワイルドカード名: <literal>*.example.org</literal>
50
</listitem>
51
52
<listitem>
53
アスタリスクで終わるワイルドカード名: <literal>mail.*</literal>
54
</listitem>
55
56
<listitem>
57
設定ファイル内の順序での正規表現
58
</listitem>
59
60
</list>
61
最初にマッチしたところで検索は終了します。.
62
</para>
63
64
</section>
65
66
67
<section id="wildcard_names"
68
name="ワイルドカード名">
69
70
<para>
71
ワイルドカード名にはそのサーバ名の最初か最後のみ、そしてドットに隣接したところのみにアスタリスクが含まれます。サーバ名 <literal>www.*.example.org</literal> <literal>w*.example.org</literal> は無効です。しかし、これらのサーバ名は正規表現を使用して、例えば <literal>~^www\..+\.example\.org$</literal> <literal>~^w.*\.example\.org$</literal> として指定することができます。アスタリスクは複数部分にマッチさせることができます。<literal>*.example.org</literal> <literal>www.example.org</literal> だけでなく <literal>www.sub.example.org</literal> にもマッチします。
72
</para>
73
74
<para>
75
特別なワイルドカードの形式 <literal>.example.org</literal> は、完全一致名 <literal>example.org</literal> とワイルドカード名 <literal>*.example.org</literal> の両方にマッチさせるように利用できます。
76
</para>
77
78
</section>
79
80
81
<section id="regex_names"
82
name="正規表現名">
83
84
<para>
85
nginx で使用される正規表現は Perl プログラミング言語(PCRE)で使用されているものと互換性があります。正規表現を使用するには、サーバ名を必ずチルダで始めます:
86
87
<programlisting>
88
server_name ~^www\d+\.example\.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>+)\.example\.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><literal>?&lt;<value>name</value>&gt;</literal></td>
121
<td>Perl 5.10 互換構文、PCRE-7.0 よりサポート</td>
122
</tr>
123
124
<tr>
125
<td><literal>?'<value>name</value>'</literal></td>
126
<td>Perl 5.10 互換構文、PCRE-7.0 よりサポート</td>
127
</tr>
128
129
<tr>
130
<td><literal>?P&lt;<value>name</value>&gt;</literal></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 ライブラリが古いので <literal>?P&lt;<value>name</value>&gt;</literal> 構文を試すように、という意味です。このキャプチャは数字形式でも使用できます:
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 id="miscellaneous_names"
162
name="その他のサーバ名">
163
164
<para>
165
デフォルトではないサーバブロックで &ldquo;Host&rdquo; ヘッダ無しのリクエストを処理させたい場合は、空のサーバ名を指定します:
166
167
<programlisting>
168
server {
169
listen 80;
170
server_name example.org www.example.org "";
171
...
172
}
173
</programlisting>
174
</para>
175
176
<para>
177
<literal>server_name</literal> がサーバブロックで定義されていない場合は、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 example.org
192
www.example.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;はキャッチオールまたはワイルドカードとして機能したことはありませんでした。代わりに、今は <literal>server_name_in_redirect</literal> ディレクティブによって提供されている機能の役を果たしていました。特別なサーバ名 &ldquo;*&rdquo; は今後廃止予定ですので、<literal>server_name_in_redirect</literal> ディレクティブを使うようにしてください。キャッチオール名を指定したり <literal>server_name</literal> ディレクティブを使用した<i>デフォルト</i>サーバを指定したりする方法はないことに注意してください。これは <literal>listen</literal> ディレクティブのプロパティであり、<literal>server_name</literal> ディレクティブのプロパティではありません。&ldquo;<link doc="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 example.net;
224
...
225
}
226
227
server {
228
listen 80 default_server;
229
listen 8080;
230
server_name example.org;
231
...
232
}
233
</programlisting>
234
</para>
235
236
237
</section>
238
239
240
<section id="optimization"
241
name="最適化">
242
243
<para>
244
完全一致名とワイルドカード名はハッシュで保存されます。このハッシュは待ち受けポートに結び付けられ、各待ち受けポートは、完全一致名のハッシュ、アスタリスクで始まるワイルドカード名のハッシュ、アスタリスクで終わるワイルドカード名のハッシュの3つまでのハッシュを持つことができます。ハッシュのサイズは構成フェーズで最適化されるので、CPU キャッシュのミスは最低でもサーバ名を見つけることができます。最初に完全一致名のハッシュが検索されます。完全一致名のハッシュを使って見つからなければ、次にアスタリスクで始まるワイルドカード名のハッシュが検索されます。さらにまだ見つからなければ、アスタリスクで終わるワイルドカード名のハッシュが検索されます。ワイルドカード名のハッシュの検索は完全一致名のハッシュの検索よりも遅くなります。これはサーバ名の検索がドメイン部分によって検索されるからです。特別なワイルドカード形式の <literal>.example.org</literal> は完全一致名のハッシュではなくワイルドカード名のハッシュで保存されます。正規表現は順番に考査されるので、これがもっとも遅い方式ですし、非スケーラブルでもあります。
245
</para>
246
247
<para>
248
これらの理由から、可能な場合は完全一致名を利用するのがよいでしょう。例えば、もっとも頻繁にリクエストされるサーバ名が <literal>example.org</literal> <literal>www.example.org</literal> だとすると、これらを明示的に定義するとより効率的です:
249
250
<programlisting>
251
server {
252
listen 80;
253
server_name example.org www.example.org *.example.org;
254
...
255
}
256
</programlisting>
257
258
上記は次の単純化された形式を使用するよりも効率的です:
259
260
<programlisting>
261
server {
262
listen 80;
263
server_name .example.org;
264
...
265
}
266
</programlisting>
267
</para>
268
269
<para>
270
たくさんの数のサーバ名を定義したり非常に長いサーバ名を定義したりする場合は、http レベルの <literal>server_names_hash_max_size</literal> <literal>server_names_hash_bucket_size</literal> ディレクティブを調整する必要があるかもしれません。<literal>server_names_hash_bucket_size</literal> のデフォルト値は 32、もしくは 64、あるいはお使いの CPU キャッシュラインのサイズによってはその他の値になっているかもしれません。もしデフォルト値が 32 でサーバ名として &ldquo;too.long.server.name.example.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
まず最初に <literal>server_names_hash_max_size</literal> の値を、定義するサーバ名の数に近い数に設定して試します。この設定がうまくいかない時だけ、もしくは nginx の起動時間が許容できないほど長い場合だけ <literal>server_names_hash_bucket_size</literal> の値を増やしてみます。
294
</para>
295
296
<para>
297
待ち受けているポートがひとつだけでサーバもひとつだけの場合、nginx はサーバ名を考査しません(また、待ち受けポート用のハッシュも生成しません)。しかし一つ例外があります。<literal>server_name</literal> がキャプチャを伴った正規表現の場合、nginx はキャプチャを取得するためにこの正規表現を実行します。
298
</para>
299
300
</section>
301
302
303
<section id="compatibility"
304
name="互換性">
305
306
<para>
307
<list type="bullet">
308
309
<listitem>
310
0.8.48 以降、デフォルトのサーバ名の値は空の名前 &ldquo;&rdquo; です。
311
</listitem>
312
313
<listitem>
314
正規表現サーバ名の名前付きキャプチャのサポートは 0.8.25 からです。
315
</listitem>
316
317
<listitem>
318
正規表現サーバ名のキャプチャのサポートは 0.7.40 からです。
319
</listitem>
320
321
<listitem>
322
空のサーバ名 &ldquo;&rdquo; のサポートは 0.7.12 からです。
323
</listitem>
324
325
<listitem>
326
ワイルドカードサーバ名と正規表現の最初のサーバ名としての使用は0.6.25 からサポートされています。
327
</listitem>
328
329
<listitem>
330
正規表現サーバ名のサポートは 0.6.7 からです。
331
</listitem>
332
333
<listitem>
334
ワイルドカードの形式 <literal>example.*</literal> のサポートは 0.6.0 からです。
335
</listitem>
336
337
<listitem>
338
特別な形式 <literal>.example.org</literal> のサポートは 0.3.18 からです。
339
</listitem>
340
341
<listitem>
342
ワイルドカードの形式 <literal>*.example.org</literal> のサポートは 0.1.13 からです。
343
</listitem>
344
345
</list>
346
</para>
347
348
</section>
349
350
</article>
351
352