דלגו לתוכן

העברת פורטים ממסוף

שרת שאתם מפעילים בטרמינל של שיחה מפורסם רק עבור המרחב הזה. לוח הפורטים מזהה מאזינים שהאפליקציה הזאת הפעילה שם, ממפה אותם, ונותן לכם כתובת לכל מקום שממנו תרצו להגיע אליהם. שני מרחבים יכולים להאזין שניהם על 5173; המפות שלהם לעולם לא מתערבבות.

שום דבר כאן לא פותח את המכונה: כל נתיב נוצר על ידי השרת, לפי בקשה, ומת יחד עם הטרמינל או התחנה.

  1. פתחו את הטרמינל (VM) של השיחה או מעטפת מארח (במרחב או בעמוד PR).
  2. הפעילו את השרת שלכם — pnpm dev, python -m http.server 8000, כל דבר.
  3. תוך שניות אחדות סמל התקע בפינה הימנית העליונה של הטרמינל מקבל נקודה. לחצו עליו.

הלוח מפרט כל פורט מאזין עם התהליך שבבעלותו, כ-3000 → 3000: הפורט שהתהליך נקשר אליו משמאל, הפורט שהוא עונה עליו מקומית מימין (אותו מספר בכל פעם שהוא היה פנוי במכונה שלכם). כל שורה גם מציינת אם localhost בשולחן העבודה, הדפדפן (VM) ו-Android יכולים להגיע אליו.

הגילוי תחום: טרמינל (VM) נסרק בתוך האורח הזה; מעטפת מארח נסרקת מתוך עץ התהליכים של ה-PTY של אותה שיחה. מרחבים אחרים, ותהליכים אחרים ב-Mac שלכם, אינם מופיעים ברשימה.

פורטים חדשים בטרמינל הזה מועברים אוטומטית. כבו את העברת פורטים אוטומטית באותו לוח אם אתם רוצים רק את אלה שאתם מוסיפים בעצמכם.

השתמשו בהעתק URL מקומי בשורה — http://localhost:3000. ההעברה מאזינה על loopback בלבד, ולכן שום דבר אחר ברשת שלכם לא יכול לראות אותה.

אם שני מרחבים חושפים את האורח 5173 והמכונה שלכם כבר תופסת את 127.0.0.1:5173, המרחב השני שומר על האורח 5173 ומקבל פורט מקומי זמני. העתקת URL משתמשת במספר הימני.

במעטפת מארח, התהליך כבר נמצא במכונה שלכם. מיפוי של אותו פורט מקומי אינו משנה דבר; בחירה של פורט מקומי אחר קושרת פרוקסי loopback לזה שבחרתם.

--host (או קשירה ל-0.0.0.0) לא מאפשר לדפדפן (VM) מבודד להגיע לשרת על ה-Mac. לאורח יש loopback משלו; השרת נוטע מנהרה לתוך האורח הזה כשהלשונית של הדפדפן נמצאת באותו מרחב.

פתחו את הדפדפן המבודד באותה שיחה. הקלידו localhost:<left-hand port> — המספר שהתהליך נקשר אליו. מיפוי מחדש (5173 → 3000) עונה גם הוא במספר הימני באותו דפדפן, כך שהעתקת URL עובדת גם שם. ה-browser_use של סוכן יכול לנווט לאחד מהם. שרת במרחב A לעולם לא מופיע כ-localhost:5173 בדפדפן של מרחב B.

השתמשו ב-localhost, ולא בכתובת IP של LAN ולא ב---host. לאורח יש loopback משלו; המנהרה מאזינה שם גם ב-IPv4 וגם ב-IPv6.

דפים שפותחים חיבורים רבים בבת אחת (עשרות נכסים, שקע רענון חי) חולקים את אותה מנהרה. הדפדפן (VM) מרבב אותם על exec מתמשך אחד, כך שפרץ של בקשות אינו הפעלת תהליך לכל חיבור ואינו מסתיים בפסק זמן כדף לבן.

בתוך מרחב אחד, העברה של טרמינל (VM) גוברת על מעטפת מארח באותו מספר. בין מרחבים אין קדימות — אלה מפות נפרדות.

פתחו את הלשונית Android של אותו מרחב. ה-localhost:<port> של האמולטור מופנה אז לאחור אל הפורט המפורסם של המרחב הזה (adb reverse). אמולטור אחד הוא גלובלי למכשיר: חיבור של מרחב B מכוון מחדש את :5173 ל-B ומפיל את זה של A. סגרו את הלשונית וההפניות לאחור שהתחנה הזאת נטעה מוסרות.

סימולטור iOS הוא ממילא ה-Mac — בלי הפניה לאחור. iPhone פיזי עדיין זקוק לשיתוף ברשת המקומית.

⋯ → שתף ברשת המקומית מפרסם את הפורט ב-<server-ip>:<random port> — שימושי לפתיחת הדף בטלפון שלכם, או כשהשרת רץ על מכונה אחרת.

  • פורט ה-LAN מוקצה תמיד על ידי מערכת ההפעלה, אף פעם לא המספר של האורח, כך שהחשיפה היא כתובת מכוונת וגלויה ולא כתובת שאפשר לנחש.
  • הוא נשאר פרטי (loopback בלבד) עד שתהפכו אותו, ו**⋯ → מקומי בלבד** מוציא אותו בחזרה מהרשת.

⋯ → הגדר דומיין דפדפן (.test) מקצה לפורט דומיין פיתוח כגון myapp.test. בתוך הדפדפן (VM), https://myapp.test טוען אז את השרת שלכם עם מנעול תקף — שימושי לכל דבר שמתנהג אחרת במקור בעל שם או בהקשר מאובטח (עוגיות, service workers, callbacks של OAuth).

  • דומיינים חייבים להסתיים ב-.test או ב-.localhost — שני ה-TLD-ים השמורים לפיתוח, כך ששם פיתוח לעולם לא יסתיר אתר אמיתי.
  • שמות דומיין ייחודיים בשרת; מספרי פורט לא. שני מרחבים יכולים להשתמש שניהם ב-5173, אבל הם לא יכולים לתבוע שניהם את myapp.test.
  • האישור מגיע מרשות מקומית שהונפקה בשרת שלכם בפעם הראשונה שנדרש. המפתחות שלה נמצאים תחת ספריית הנתונים של השרת ולעולם לא נכנסים לשום אורח; הדפדפן המבודד נותן אמון בדיוק במפתח הזה, כך ש-TLS לאינטרנט האמיתי עדיין מאומת כרגיל.
  • הדומיין נפתר בתוך הדפדפן (VM) בלבד. הדפדפן שלכם במארח משתמש ב-localhost:<port> במקום.
  • גם http://myapp.test פשוט עובד.

הוסף פורט בתחתית הלוח ממפה פורט לפני שמשהו מאזין עליו (או בלי קשר לכך). העברה ידנית שומרת על הכתובת שלה בזמן שהשרת שלכם מופעל מחדש — השורה מציגה לא מאזין עד שהוא חוזר — בעוד שהעברות אוטומטיות נעלמות כשהפורט שלהן נעלם. במעטפת מארח אפשר גם להגדיר פורט מקומי אחר.

פורטים נקבעים לפי סביבת עבודה ומרחב. מפת הפורטים של ההיפרוויזר קבועה כשמכונה מאותחלת, ולכן טרמינל (VM) נסמך על שני ערוצים צרים שהשרת שולט בהם: נתיב נכנס אחד שנוצר מראש לתוך האורח, שמסרב להתחבר לכל פורט שהאורח לא באמת מאזין לו, ומנהרות הפוכות שהשרת מחזיק פתוחות עבור הדפדפן (VM) ו-Android. מעטפת מארח לעולם לא סורקת את כל המכונה. שום מאזין לא נוצר אי פעם בתוך אורח שהשרת לא הציב אותו שם, והכול מפורק יחד עם הטרמינל או התחנה. התכנון מוסבר ב תחנות ומתחמים מבודדים; הפורטים השמורים המדויקים וכללי הדומיין נמצאים ב מדריך העזר לתחנות.