comparison xml/he/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="/he/docs/http/server_names.html"
5 lang="he"
6 author="Igor Sysoev"
7 translator="מבזקים.נט">
8
9 <section>
10
11 <para>
12 שמות שרת מוגדרים על ידי המאפיין <dirname>server_name</dirname>
13 והם קובעים איזה בלוק תצורת שרת מקובץ התצורה יהיה בשימוש לכל בקשה ובקשה לשרת.
14 ראו גם &ldquo;<a href="/en/docs/http/request_processing.xml" />&rdquo;.
15 ניתן להגדירם באמצעות שמות מדוייקים, שמות Wildcard, או באמצעות ביטויים רגולריים:
16
17 <programlisting>
18 server {
19 listen 80;
20 server_name nginx.org www.nginx.org;
21 ...
22 }
23
24 server {
25 listen 80;
26 server_name *.nginx.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;.+)\.nginx\.net$;
39 ...
40 }
41 </programlisting>
42
43 השמות נבדקים בסדר הבא:
44
45 <orderedlist>
46
47 <item>
48 שמות מדוייקים;
49 </item>
50
51 <item>
52 שמות Wildcard המתחילים בכוכבית: <url>*.nginx.org</url>;
53 </item>
54
55 <item>
56 שמות Wildcard המסתיימים בכוכבית: <url>mail.*</url>;
57 </item>
58
59 <item>
60 ביטויים רגולריים לפי הסדר שבו הם מופיעים בקובץ התצורה.
61 </item>
62
63 </orderedlist>
64 ההתאמה הראשונה עוצרת את החיפוש.
65 </para>
66
67 </section>
68
69
70 <section name="wildcard_names"
71 title="שמות Wildcard">
72
73 <para>
74 שם wildcard יכול להכיל כוכבית רק בתחילת או בסוף השם, וחייב להיות בגבול של נקודה.
75 השמות <dirname>www.*.nginx.org</dirname>
76 ו <dirname>w*.nginx.org</dirname> הם שגויים.
77 למרות זאת, ניתן לציין שמות כאלה באמצעות ביטויים רגולריים,
78 לדוגמא, <dirname>~^www\..+\.nginx\.org$</dirname> ו
79 <dirname>~^w.*\.nginx\.org$</dirname>.
80 סימן הכוכבית יכול להחליף מספר חלקי שם.
81 השם <dirname>*.nginx.org</dirname> מתאים לא רק ל
82 <url>www.nginx.org</url> אלא גם ל <url>www.sub.nginx.org</url>.
83 </para>
84
85 <para>
86 ניתן להשתמש ב wildcard מיוחד בצורה של <dirname>.nginx.org</dirname>
87 כדי להתאים גם לשם המדוייק <dirname>nginx.org</dirname>
88 וגם לשם ה wildcard הבא: <dirname>*.nginx.org</dirname>.
89 </para>
90
91 </section>
92
93
94 <section name="regex_names"
95 title="שמות ביטויים רגולריים">
96
97 <para>
98 הביטויים הרגולריים ש nginx משתמש בהם, תואמים לאלה אשר נמצאים בשימוש
99 בשפת פרל (PCRE).
100 כדי להשתמש בביטוי רגולרי, על שם השרת להתחיל עם סימן הטילדה (~), כך:
101
102 <programlisting>
103 server_name ~^www\d+\.nginx\.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>+)\.nginx\.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><code>?&lt;<i>name</i>&gt;</code></td>
143 <td>תחביר תואם פרל 5.10, נתמך החל מ PCRE-7.0</td>
144 </tr>
145
146 <tr>
147 <td><code>?'<i>name</i>'</code></td>
148 <td>תחביר תואם פרל 5.10, נתמך החל מ PCRE-7.0</td>
149 </tr>
150
151 <tr>
152 <td><code>?P&lt;<i>name</i>&gt;</code></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 <dirname>?P&lt;<i>name</i>&gt;</dirname>.
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 name="miscellaneous_names"
188 title="שמות כלליים">
189
190 <para>
191 אם אף <dirname>server_name</dirname> לא מוגדר בבלוג שרת,
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 nginx.org www.nginx.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 nginx.org
217 www.nginx.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 המאפיין <dirname>server_name_in_redirect</dirname>.
248 השם המיוחד &ldquo;*&rdquo; הוא כעת לא מומלץ לשימוש, ויש
249 להשתמש במאפיין <dirname>server_name_in_redirect</dirname> במקומו.
250 שימו לב שאין דרך לציין את שם ה catch-all או את שרת <i>ברירת המחדל</i>
251 על ידי שימוש במאפיין <dirname>server_name</dirname>.
252 זוהי תכונה של המאפיין <dirname>listen</dirname> ולא של המאפיין <dirname>server_name</dirname>.
253 ראו גם &ldquo;<a href="/en/docs/http/request_processing.xml" />&rdquo;.
254
255 באפשרותכם להגדיר שרתים המאזינים על פורטים <url>*:80</url> ו <url>*:8080</url>,
256 ולהגדיר שרת אחת שהוא ברירת המחדל עבור פורט
257 <url>*:8080</url>, בעוד שהשני יהיה ברירת מחדל עבור פורט <url>*:80</url>:
258
259 <programlisting>
260 server {
261 listen 80;
262 listen 8080 default_server;
263 server_name nginx.net;
264 ...
265 }
266
267 server {
268 listen 80 default_server;
269 listen 8080;
270 server_name nginx.org;
271 ...
272 }
273 </programlisting>
274 </para>
275
276
277 </section>
278
279
280 <section name="optimization"
281 title="ייעול">
282
283 <para>
284
285 שמות מדוייקים ושמות wildcard מאוחסנים בגיבוב (hash).
286 הגיבובים מקושרים להאזנות לפורטים, ולכן פורט האזנה יכולים להיות
287 עד שלושה גיבויים: גיבוב שם מדוייק, גיבוי שמות wildcard שמתחילים
288 בכוכבית, וגיבוב שמות wildcard שמסתיימים בכוכבית.
289 הגודל של הגיבובים מיועל בשלב התצורה כך שניתן יהיה למצוא שם
290 עם הכי מעט פספוסי מטמון מעבד.
291 גיבוב השמות המדוייקים עובר חיפוש ראשון.
292 אם שם לא נמצא בגיבוב השמות המדוייק, מתחיל חיפוש בגיבוב השמות המתחילים
293 בכוכבית.
294 אם הוא לא נמצא גם שם, מתחיל חיפוש בגיבוב השמות המסתיימים בכוכבית.
295 חיפוש בגיבובי שמות wildcard הוא איטי יותר מחיפוש שם בגיבוב השמות המדוייקים
296 כיוון ששמות עוברים חיפוש על פי חלקי שם המתחם.
297 שימו לב שצורת ה wildcard המיוחדת <dirname>.nginx.org</dirname>
298 שמורה גם היא בגיבוב שמות ה wildcard ולא בגיבוב השמות המדוייקים.
299 ביטויים רגולריים נבדקים באופן סדרתי, ועל כן הם השיטה האיטית ביותר
300 ואינם סקאלאביליים.
301 </para>
302
303 <para>
304 בהתחשב בנסיבות אלה, הכי טוב להשתמש בשמות מדוייקים בכל מקום שהדבר אפשרי.
305 לדוגמה, אם השמות הנפוצים ביותר לשרת הם <url>nginx.org</url> ו <url>www.nginx.org</url>,
306 יותר יעיל להגדיר אותם באופן מפורש:
307
308 <programlisting>
309 server {
310 listen 80;
311 server_name nginx.org www.nginx.org *.nginx.org;
312 ...
313 }
314 </programlisting>
315
316 מאשר להשתמש בשיטה המופשטת:
317
318 <programlisting>
319 server {
320 listen 80;
321 server_name .nginx.org;
322 ...
323 }
324 </programlisting>
325 </para>
326
327 <para>
328 אם הגדרתם מספר גדול של שמות שרת, או שהגדרתם שמות שרת ארוכים מהרגיל,
329 ייתכן ויהיה עליכם לכוונן את המאפיינים <dirname>server_names_hash_max_size</dirname>
330 ו <dirname>server_names_hash_bucket_size</dirname> ברמת ה <i>http</i>.
331 ערך ברירת המחדל של <dirname>server_names_hash_bucket_size</dirname>
332 יכול להיות שווה ל 32, ל 64, או לערך אחר, בהתאם לגודל קו המטמון של המעבד שלכם.
333 אם ברירת המחדל היא 32 ותגדירו
334 &ldquo;too.long.server.name.nginx.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 עליכם לנסות קודם להגדיל את <dirname>server_names_hash_max_size</dirname>
359 למספר קרוב למספר השרתים.
360 רק אם זה לא עזר, או שזמן העלייה של nginx הוא ארוך בצורה מוגזמת,
361 נסו להגדיל את <dirname>server_names_hash_bucket_size</dirname>.
362 </para>
363
364 <para>
365 אם שרת הוא השרת היחיד עבור פורט האזנה, אזי nginx לא יבדוק שמות שרת בכלל
366 (ולא יבנה גיבובים עבור פורט ההאזנה).
367 אך, יש יוצא דופן אחד.
368 אם <dirname>server_name</dirname> הוא ביטוי רגולרי עם לכידות,
369 nginx חייב לבצע את הביטוי כדי לקבל את מה שנלכד בהן.
370 </para>
371
372 </section>
373
374
375 <section name="compatibility"
376 title="תאימות">
377
378 <para>
379 <list>
380
381 <item>
382 לכידת שמות בביטויים רגולריים נתמכה החל מגירסה 0.8.25.
383 </item>
384
385 <item>
386 לכידת ביטויים רגולריים נתמכה החל מגירסה 0.7.40.
387
388 </item>
389
390 <item>
391 שם שרת ריק &ldquo;&rdquo; נתמך החל מגירסה 0.7.12.
392 </item>
393
394 <item>
395 שם שרת מסוג wildcard או ביטוי רגולרי נתמכו לשימוש כשם שרת ראשון החל מגירסה 0.6.25.
396 </item>
397
398 <item>
399 שמות שרת כביטוי רגולרי נתמכו החל מגירסה 0.6.7.
400 </item>
401
402 <item>
403 צורות Wildcard מסוג <url>nginx.*</url> נתמכו החל מגירסה 0.6.0.
404 </item>
405
406 <item>
407 הצורה המיוחדת <url>.nginx.org</url> נתמכה החל מגירסה 0.3.18.
408 </item>
409
410 <item>
411 הצורה <url>*.nginx.org</url> נתמכה החל מגירסה 0.1.13.
412 </item>
413
414 </list>
415 </para>
416
417 </section>
418
419 </article>