שמות שרת | english русский 简体中文 עברית 日本語 türkçe חדשות [אנגלית] אודות הורדה [אנגלית] דיווחי אבטחה [אנגלית] תיעוד שאלות נפוצות [אנגלית] קישורים [אנגלית] תמיכה [אנגלית] trac wiki nginx.com | |||||||
This translation may be out of date. Check the English version for recent changes.
שמות שרת מוגדרים על ידי המאפיין server { listen 80; server_name example.org www.example.org; ... } server { listen 80; server_name *.example.org; ... } server { listen 80; server_name mail.*; ... } server { listen 80; server_name ~^(?<user>.+)\.example\.net$; ... } השמות נבדקים בסדר הבא:
ההתאמה הראשונה עוצרת את החיפוש. שמות Wildcard
שם wildcard יכול להכיל כוכבית רק בתחילת או בסוף השם, וחייב להיות בגבול של נקודה.
השמות
ניתן להשתמש ב wildcard מיוחד בצורה של שמות ביטויים רגולרייםהביטויים הרגולריים ש nginx משתמש בהם, תואמים לאלה אשר נמצאים בשימוש בשפת פרל (PCRE). כדי להשתמש בביטוי רגולרי, על שם השרת להתחיל עם סימן הטילדה (~), כך: server_name ~^www\d+\.example\.net$; אחרת nginx יתייחס אליו כשם מדוייק, או אם הביטוי מכיל כוכבית, כשם wildcard (וסביר להניח שיהיה שגוי). אל תשכחו להגדיר עוגני “^” ו “$”. הם לא דרושים תחבירית, אם כי לוגית. כמו כן שימו לב שהנקודות של שם המתלם צריכות להיות מוברחות (escaped) על ידי לוכסן הפוך (\). ביטוי רגולרי המכיל את התווים “{” ו “}” צריך להיות במרכאות: server_name "~^(?<name>\w\d{1,3}+)\.example\.net$"; אחרת nginx יכשל בעלייה, ויציג את הודעת השגיאה הבאה: directive "server_name" is not terminated by ";" in ... ביטוי רגולרי שניתן לו שם ונלכד, ניתן לשימוש מאוחר יותר כמשתנה: server { server_name ~^(www\.)?(?<domain>.+)$; location / { root /sites/$domain; } } ספריית PCRE תומכת בלכידות מבוססות שם לפי התחביר הבא: אם nginx נכשל בעלייה ומציג את הודעת השגיאה הבאה: pcre_compile() failed: unrecognized character after (?< in ...
פירוש הדבר שספריית ה PCRE היא ישנה, ועליכם לנסות את התחביר
server { server_name ~^(www\.)?(.+)$; location / { root /sites/$2; } } אך יש להשתמש בצורה זו במקרים פשוטים (כמו לעיל), כיוון שהייחוסים הספרתיים יכולים להידרס בקלות שמות כלליים
אם אף אם ברצונכם לעבד בקשות בלי שורת כותר “Host” בבלוק שרת שאינו ברירת המחדל, עליכם לציין שם ריק: server { listen 80; server_name example.org www.example.org ""; ... }
אם מישהו מבצע בקשה באמצעות כתובת IP במקום שם שרת, שורת הכותר “Host” תכיל כתובת IP, ואפשר יהיה לטפל בבקשה על ידי שימוש בכתובת IP בשם השרת: server { listen 80; server_name example.org www.example.org "" 192.168.1.1 ; ... }
בדוגמאות catch-all ייתכן ותראו את השם המוזר “_”: server { listen 80 default_server; server_name _; return 444; } אין שום דבר מוזר בשם הזה, הוא רק אחד משלל שמות מתחם שגויים שלעולם לא תפגשו בהם בשם אמיתי. ניתן להשתמש גם ב “--”, “!@#”, וכך הלאה.
nginx בגירסאות עד 0.6.25 תמך בשם המיוחד “*”
אשר יש שפירשו אותו בטעות כשם catch-all.
השם הזה מעולם לא תפקד כ catch-all ואף לא כשם wildcard.
בפועל, הוא סיפק את הפונקציונליות שהיום מסופקת על ידי
המאפיין server { listen 80; listen 8080 default_server; server_name example.net; ... } server { listen 80 default_server; listen 8080; server_name example.org; ... }
ייעול
שמות מדוייקים ושמות wildcard מאוחסנים בגיבוב (hash).
הגיבובים מקושרים להאזנות לפורטים, ולכן פורט האזנה יכולים להיות
עד שלושה גיבויים: גיבוב שם מדוייק, גיבוי שמות wildcard שמתחילים
בכוכבית, וגיבוב שמות wildcard שמסתיימים בכוכבית.
הגודל של הגיבובים מיועל בשלב התצורה כך שניתן יהיה למצוא שם
עם הכי מעט פספוסי מטמון מעבד.
גיבוב השמות המדוייקים עובר חיפוש ראשון.
אם שם לא נמצא בגיבוב השמות המדוייק, מתחיל חיפוש בגיבוב השמות המתחילים
בכוכבית.
אם הוא לא נמצא גם שם, מתחיל חיפוש בגיבוב השמות המסתיימים בכוכבית.
חיפוש בגיבובי שמות wildcard הוא איטי יותר מחיפוש שם בגיבוב השמות המדוייקים
כיוון ששמות עוברים חיפוש על פי חלקי שם המתחם.
שימו לב שצורת ה wildcard המיוחדת
בהתחשב בנסיבות אלה, הכי טוב להשתמש בשמות מדוייקים בכל מקום שהדבר אפשרי.
לדוגמה, אם השמות הנפוצים ביותר לשרת הם server { listen 80; server_name example.org www.example.org *.example.org; ... } מאשר להשתמש בשיטה המופשטת: server { listen 80; server_name .example.org; ... }
אם הגדרתם מספר גדול של שמות שרת, או שהגדרתם שמות שרת ארוכים מהרגיל,
ייתכן ויהיה עליכם לכוונן את המאפיינים could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32 במקרה זה, עליכם להגדיר את ערך המאפיין לחזקה הבאה של 2: http { server_names_hash_bucket_size 64; ... אם הגדרתם כמות גדולה של שמות שרת, אתם עלולים לקבל את הודעת השגיאה הבאה: could not build the server_names_hash, you should increase either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 32
עליכם לנסות קודם להגדיל את
אם שרת הוא השרת היחיד עבור פורט האזנה, אזי nginx לא יבדוק שמות שרת בכלל
(ולא יבנה גיבובים עבור פורט ההאזנה).
אך, יש יוצא דופן אחד.
אם תאימות
|