Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
nginx
GitHub Repository: nginx/nginx.org
Path: blob/main/xml/he/docs/http/server_names.xml
1 views
1
<!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
2
3
<article name="שמות שרת"
4
link="/he/docs/http/server_names.html"
5
lang="he"
6
author="Igor Sysoev"
7
translator="מבזקים.נט">
8
9
<section>
10
11
<para>
12
שמות שרת מוגדרים על ידי המאפיין <literal>server_name</literal>
13
והם קובעים איזה בלוק תצורת שרת מקובץ התצורה יהיה בשימוש לכל בקשה ובקשה לשרת.
14
ראו גם &ldquo;<link doc="../../../en/docs/http/request_processing.xml" />&rdquo;.
15
ניתן להגדירם באמצעות שמות מדוייקים, שמות Wildcard, או באמצעות ביטויים רגולריים:
16
17
<programlisting>
18
server {
19
listen 80;
20
server_name example.org www.example.org;
21
...
22
}
23
24
server {
25
listen 80;
26
server_name *.example.org;
27
...
28
}
29
30
server {
31
listen 80;
32
server_name mail.*;
33
...
34
}
35
36
server {
37
listen 80;
38
server_name ~^(?&lt;user&gt;.+)\.example\.net$;
39
...
40
}
41
</programlisting>
42
43
השמות נבדקים בסדר הבא:
44
45
<list type="enum">
46
47
<listitem>
48
שמות מדוייקים;
49
</listitem>
50
51
<listitem>
52
שמות Wildcard המתחילים בכוכבית: <literal>*.example.org</literal>;
53
</listitem>
54
55
<listitem>
56
שמות Wildcard המסתיימים בכוכבית: <literal>mail.*</literal>;
57
</listitem>
58
59
<listitem>
60
ביטויים רגולריים לפי הסדר שבו הם מופיעים בקובץ התצורה.
61
</listitem>
62
63
</list>
64
ההתאמה הראשונה עוצרת את החיפוש.
65
</para>
66
67
</section>
68
69
70
<section id="wildcard_names"
71
name="שמות Wildcard">
72
73
<para>
74
שם wildcard יכול להכיל כוכבית רק בתחילת או בסוף השם, וחייב להיות בגבול של נקודה.
75
השמות <literal>www.*.example.org</literal>
76
ו <literal>w*.example.org</literal> הם שגויים.
77
למרות זאת, ניתן לציין שמות כאלה באמצעות ביטויים רגולריים,
78
לדוגמא, <literal>~^www\..+\.example\.org$</literal> ו
79
<literal>~^w.*\.example\.org$</literal>.
80
סימן הכוכבית יכול להחליף מספר חלקי שם.
81
השם <literal>*.example.org</literal> מתאים לא רק ל
82
<literal>www.example.org</literal> אלא גם ל <literal>www.sub.example.org</literal>.
83
</para>
84
85
<para>
86
ניתן להשתמש ב wildcard מיוחד בצורה של <literal>.example.org</literal>
87
כדי להתאים גם לשם המדוייק <literal>example.org</literal>
88
וגם לשם ה wildcard הבא: <literal>*.example.org</literal>.
89
</para>
90
91
</section>
92
93
94
<section id="regex_names"
95
name="שמות ביטויים רגולריים">
96
97
<para>
98
הביטויים הרגולריים ש nginx משתמש בהם, תואמים לאלה אשר נמצאים בשימוש
99
בשפת פרל (PCRE).
100
כדי להשתמש בביטוי רגולרי, על שם השרת להתחיל עם סימן הטילדה (~), כך:
101
102
<programlisting>
103
server_name ~^www\d+\.example\.net$;
104
</programlisting>
105
106
אחרת nginx יתייחס אליו כשם מדוייק, או אם הביטוי מכיל כוכבית, כשם wildcard (וסביר
107
להניח שיהיה שגוי).
108
אל תשכחו להגדיר עוגני
109
&ldquo;^&rdquo; ו &ldquo;$&rdquo;.
110
הם לא דרושים תחבירית, אם כי לוגית.
111
כמו כן שימו לב שהנקודות של שם המתלם צריכות להיות מוברחות (escaped) על ידי לוכסן הפוך (\).
112
ביטוי רגולרי המכיל את התווים &ldquo;{&rdquo;
113
ו &ldquo;}&rdquo; צריך להיות במרכאות:
114
115
<programlisting>
116
server_name "~^(?&lt;name&gt;\w\d<b>{</b>1,3<b>}</b>+)\.example\.net$";
117
</programlisting>
118
119
אחרת nginx יכשל בעלייה, ויציג את הודעת השגיאה הבאה:
120
121
<programlisting>
122
directive "server_name" is not terminated by ";" in ...
123
</programlisting>
124
125
ביטוי רגולרי שניתן לו שם ונלכד, ניתן לשימוש מאוחר יותר כמשתנה:
126
127
<programlisting>
128
server {
129
server_name ~^(www\.)?(<b>?&lt;domain&gt;</b>.+)$;
130
131
location / {
132
root /sites/<b>$domain</b>;
133
}
134
}
135
</programlisting>
136
137
ספריית PCRE תומכת בלכידות מבוססות שם לפי התחביר הבא:
138
139
<table note="yes">
140
141
<tr>
142
<td><literal>?&lt;<value>name</value>&gt;</literal></td>
143
<td>תחביר תואם פרל 5.10, נתמך החל מ PCRE-7.0</td>
144
</tr>
145
146
<tr>
147
<td><literal>?'<value>name</value>'</literal></td>
148
<td>תחביר תואם פרל 5.10, נתמך החל מ PCRE-7.0</td>
149
</tr>
150
151
<tr>
152
<td><literal>?P&lt;<value>name</value>&gt;</literal></td>
153
<td>תחביר תואם פייתון, נתמך החל מ PCRE-4.0</td>
154
</tr>
155
156
</table>
157
158
אם nginx נכשל בעלייה ומציג את הודעת השגיאה הבאה:
159
160
<programlisting>
161
pcre_compile() failed: unrecognized character after (?&lt; in ...
162
</programlisting>
163
164
פירוש הדבר שספריית ה PCRE היא ישנה, ועליכם לנסות את התחביר
165
<literal>?P&lt;<value>name</value>&gt;</literal>.
166
167
את הלכידה ניתן לבצע גם בצורה ספרתית:
168
169
<programlisting>
170
server {
171
server_name ~^(www\.)?(.+)$;
172
173
location / {
174
root /sites/<b>$2</b>;
175
}
176
}
177
</programlisting>
178
179
אך יש להשתמש בצורה זו במקרים פשוטים (כמו לעיל), כיוון שהייחוסים הספרתיים
180
יכולים להידרס בקלות
181
</para>
182
183
184
</section>
185
186
187
<section id="miscellaneous_names"
188
name="שמות כלליים">
189
190
<para>
191
אם אף <literal>server_name</literal> לא מוגדר בבלוג שרת,
192
אזי nginx משתמש ב <i>hostname</i> בתור שם השרת.
193
</para>
194
195
<para>
196
אם ברצונכם לעבד בקשות בלי שורת כותר &ldquo;Host&rdquo;
197
בבלוק שרת שאינו ברירת המחדל, עליכם לציין שם ריק:
198
199
<programlisting>
200
server {
201
listen 80;
202
server_name example.org www.example.org "";
203
...
204
}
205
</programlisting>
206
</para>
207
208
<para>
209
אם מישהו מבצע בקשה באמצעות כתובת IP במקום שם שרת, שורת הכותר
210
&ldquo;Host&rdquo; תכיל כתובת IP, ואפשר יהיה לטפל בבקשה על ידי
211
שימוש בכתובת IP בשם השרת:
212
213
<programlisting>
214
server {
215
listen 80;
216
server_name example.org
217
www.example.org
218
""
219
<b>192.168.1.1</b>
220
;
221
...
222
}
223
</programlisting>
224
</para>
225
226
<para>
227
בדוגמאות catch-all ייתכן ותראו את השם המוזר &ldquo;_&rdquo;:
228
229
<programlisting>
230
server {
231
listen 80 default_server;
232
server_name _;
233
return 444;
234
}
235
</programlisting>
236
237
אין שום דבר מוזר בשם הזה, הוא רק אחד משלל שמות מתחם שגויים שלעולם לא
238
תפגשו בהם בשם אמיתי.
239
ניתן להשתמש גם ב &ldquo;--&rdquo;, &ldquo;!@#&rdquo;, וכך הלאה.
240
</para>
241
242
<para>
243
nginx בגירסאות עד 0.6.25 תמך בשם המיוחד &ldquo;*&rdquo;
244
אשר יש שפירשו אותו בטעות כשם catch-all.
245
השם הזה מעולם לא תפקד כ catch-all ואף לא כשם wildcard.
246
בפועל, הוא סיפק את הפונקציונליות שהיום מסופקת על ידי
247
המאפיין <literal>server_name_in_redirect</literal>.
248
השם המיוחד &ldquo;*&rdquo; הוא כעת לא מומלץ לשימוש, ויש
249
להשתמש במאפיין <literal>server_name_in_redirect</literal> במקומו.
250
שימו לב שאין דרך לציין את שם ה catch-all או את שרת <i>ברירת המחדל</i>
251
על ידי שימוש במאפיין <literal>server_name</literal>.
252
זוהי תכונה של המאפיין <literal>listen</literal> ולא של המאפיין <literal>server_name</literal>.
253
ראו גם &ldquo;<link doc="../../../en/docs/http/request_processing.xml" />&rdquo;.
254
255
באפשרותכם להגדיר שרתים המאזינים על פורטים <literal>*:80</literal> ו <literal>*:8080</literal>,
256
ולהגדיר שרת אחת שהוא ברירת המחדל עבור פורט
257
<literal>*:8080</literal>, בעוד שהשני יהיה ברירת מחדל עבור פורט <literal>*:80</literal>:
258
259
<programlisting>
260
server {
261
listen 80;
262
listen 8080 default_server;
263
server_name example.net;
264
...
265
}
266
267
server {
268
listen 80 default_server;
269
listen 8080;
270
server_name example.org;
271
...
272
}
273
</programlisting>
274
</para>
275
276
277
</section>
278
279
280
<section id="optimization"
281
name="ייעול">
282
283
<para>
284
285
שמות מדוייקים ושמות wildcard מאוחסנים בגיבוב (hash).
286
הגיבובים מקושרים להאזנות לפורטים, ולכן פורט האזנה יכולים להיות
287
עד שלושה גיבויים: גיבוב שם מדוייק, גיבוי שמות wildcard שמתחילים
288
בכוכבית, וגיבוב שמות wildcard שמסתיימים בכוכבית.
289
הגודל של הגיבובים מיועל בשלב התצורה כך שניתן יהיה למצוא שם
290
עם הכי מעט פספוסי מטמון מעבד.
291
גיבוב השמות המדוייקים עובר חיפוש ראשון.
292
אם שם לא נמצא בגיבוב השמות המדוייק, מתחיל חיפוש בגיבוב השמות המתחילים
293
בכוכבית.
294
אם הוא לא נמצא גם שם, מתחיל חיפוש בגיבוב השמות המסתיימים בכוכבית.
295
חיפוש בגיבובי שמות wildcard הוא איטי יותר מחיפוש שם בגיבוב השמות המדוייקים
296
כיוון ששמות עוברים חיפוש על פי חלקי שם המתחם.
297
שימו לב שצורת ה wildcard המיוחדת <literal>.example.org</literal>
298
שמורה גם היא בגיבוב שמות ה wildcard ולא בגיבוב השמות המדוייקים.
299
ביטויים רגולריים נבדקים באופן סדרתי, ועל כן הם השיטה האיטית ביותר
300
ואינם סקאלאביליים.
301
</para>
302
303
<para>
304
בהתחשב בנסיבות אלה, הכי טוב להשתמש בשמות מדוייקים בכל מקום שהדבר אפשרי.
305
לדוגמה, אם השמות הנפוצים ביותר לשרת הם <literal>example.org</literal> ו <literal>www.example.org</literal>,
306
יותר יעיל להגדיר אותם באופן מפורש:
307
308
<programlisting>
309
server {
310
listen 80;
311
server_name example.org www.example.org *.example.org;
312
...
313
}
314
</programlisting>
315
316
מאשר להשתמש בשיטה המופשטת:
317
318
<programlisting>
319
server {
320
listen 80;
321
server_name .example.org;
322
...
323
}
324
</programlisting>
325
</para>
326
327
<para>
328
אם הגדרתם מספר גדול של שמות שרת, או שהגדרתם שמות שרת ארוכים מהרגיל,
329
ייתכן ויהיה עליכם לכוונן את המאפיינים <literal>server_names_hash_max_size</literal>
330
ו <literal>server_names_hash_bucket_size</literal> ברמת ה <i>http</i>.
331
ערך ברירת המחדל של <literal>server_names_hash_bucket_size</literal>
332
יכול להיות שווה ל 32, ל 64, או לערך אחר, בהתאם לגודל קו המטמון של המעבד שלכם.
333
אם ברירת המחדל היא 32 ותגדירו
334
&ldquo;too.long.server.name.example.org&rdquo; בתור שם שרת,
335
אזי nginx ייכשל בעלייה ויציג את הודעת השגיאה הבאה:
336
337
<programlisting>
338
could not build the server_names_hash,
339
you should increase server_names_hash_bucket_size: 32
340
</programlisting>
341
342
במקרה זה, עליכם להגדיר את ערך המאפיין לחזקה הבאה של 2:
343
344
<programlisting>
345
http {
346
server_names_hash_bucket_size 64;
347
...
348
</programlisting>
349
350
אם הגדרתם כמות גדולה של שמות שרת, אתם עלולים לקבל את הודעת השגיאה הבאה:
351
352
<programlisting>
353
could not build the server_names_hash,
354
you should increase either server_names_hash_max_size: 512
355
or server_names_hash_bucket_size: 32
356
</programlisting>
357
358
עליכם לנסות קודם להגדיל את <literal>server_names_hash_max_size</literal>
359
למספר קרוב למספר השרתים.
360
רק אם זה לא עזר, או שזמן העלייה של nginx הוא ארוך בצורה מוגזמת,
361
נסו להגדיל את <literal>server_names_hash_bucket_size</literal>.
362
</para>
363
364
<para>
365
אם שרת הוא השרת היחיד עבור פורט האזנה, אזי nginx לא יבדוק שמות שרת בכלל
366
(ולא יבנה גיבובים עבור פורט ההאזנה).
367
אך, יש יוצא דופן אחד.
368
אם <literal>server_name</literal> הוא ביטוי רגולרי עם לכידות,
369
nginx חייב לבצע את הביטוי כדי לקבל את מה שנלכד בהן.
370
</para>
371
372
</section>
373
374
375
<section id="compatibility"
376
name="תאימות">
377
378
<para>
379
<list type="bullet">
380
381
<listitem>
382
לכידת שמות בביטויים רגולריים נתמכה החל מגירסה 0.8.25.
383
</listitem>
384
385
<listitem>
386
לכידת ביטויים רגולריים נתמכה החל מגירסה 0.7.40.
387
388
</listitem>
389
390
<listitem>
391
שם שרת ריק &ldquo;&rdquo; נתמך החל מגירסה 0.7.12.
392
</listitem>
393
394
<listitem>
395
שם שרת מסוג wildcard או ביטוי רגולרי נתמכו לשימוש כשם שרת ראשון החל מגירסה 0.6.25.
396
</listitem>
397
398
<listitem>
399
שמות שרת כביטוי רגולרי נתמכו החל מגירסה 0.6.7.
400
</listitem>
401
402
<listitem>
403
צורות Wildcard מסוג <literal>example.*</literal> נתמכו החל מגירסה 0.6.0.
404
</listitem>
405
406
<listitem>
407
הצורה המיוחדת <literal>.example.org</literal> נתמכה החל מגירסה 0.3.18.
408
</listitem>
409
410
<listitem>
411
הצורה <literal>*.example.org</literal> נתמכה החל מגירסה 0.1.13.
412
</listitem>
413
414
</list>
415
</para>
416
417
</section>
418
419
</article>
420
421