İçeriğe geç

Bir terminalden port yönlendirme

Bir konuşmanın terminalinde başlattığınız sunucu yalnızca o alan için yayımlanır. Portlar paneli, bu uygulamanın orada başlattığı dinleyicileri fark eder, onları eşler ve erişmek isteyebileceğiniz her yer için size bir adres verir. İki alan da aynı anda 5173 portunu dinleyebilir; haritaları asla karışmaz.

Buradaki hiçbir şey makineyi dışarı açmaz: her yol, sunucu tarafından istek üzerine oluşturulur ve terminalle ya da rig’le birlikte yok olur.

  1. Konuşmanın Terminal (VM) sekmesini ya da ana makine kabuğunu açın (bir alanda veya bir PR sayfasında).
  2. Sunucunuzu başlatın — pnpm dev, python -m http.server 8000, herhangi bir şey.
  3. Birkaç saniye içinde terminalin sağ üst köşesindeki fiş simgesi bir nokta alır. Üzerine tıklayın.

Panel, dinleyen her portu, sahibi olan süreçle birlikte 3000 → 3000 biçiminde listeler: solda sürecin bağlandığı port, sağda ise yerelde yanıt verdiği port (makinenizde boş olduğu sürece aynı numara). Her satır ayrıca ona masaüstündeki localhost üzerinden, Tarayıcı (VM) içinden ve Android’den erişilip erişilemediğini söyler.

Keşif yalıtılmıştır: bir Terminal (VM), o misafirin içinde yoklanır; bir ana makine kabuğu ise o oturumun PTY süreç ağacından yoklanır. Diğer alanlar ve Mac’inizdeki diğer süreçler listelenmez.

Bu terminaldeki yeni portlar otomatik olarak yönlendirilir. Yalnızca kendi eklediklerinizi istiyorsanız aynı panelden Portları otomatik yönlendir seçeneğini kapatın.

Satırdaki Yerel URL’yi kopyala seçeneğini kullanın — http://localhost:3000. Yönlendirme yalnızca loopback üzerinde dinler, bu yüzden ağınızdaki başka hiçbir şey onu göremez.

İki alan da misafirdeki 5173 portunu açığa çıkarıyorsa ve makinenizde 127.0.0.1:5173 zaten kullanılıyorsa, ikinci alan misafirdeki 5173 portunu korur ve geçici bir yerel port alır. Yerel URL’yi kopyalama sağdaki numarayı kullanır.

Bir ana makine kabuğunda süreç zaten makinenizde çalışır. Aynı yerel portu eşlemenin hiçbir etkisi olmaz; farklı bir yerel port seçtiğinizde ise seçtiğiniz porta bir loopback proxy’si bağlanır.

--host (ya da 0.0.0.0 adresine bağlanmak), yalıtılmış bir Tarayıcı (VM) içinden Mac’teki bir sunucuya erişilmesini sağlamaz. Misafirin kendi loopback’i vardır; sunucu, Tarayıcı sekmesi aynı alanda olduğunda o misafire bir tünel yerleştirir.

Yalıtılmış tarayıcıyı aynı konuşmada açın. localhost:<left-hand port> yazın — sürecin bağlandığı numara. Bir yeniden eşleme (5173 → 3000) o tarayıcıda sağdaki numaradan da yanıt verir, böylece Yerel URL’yi kopyalama orada da çalışır. Bir ajanın browser_use aracı ikisine de gidebilir. A alanındaki bir sunucu, B alanının tarayıcısında asla localhost:5173 olarak görünmez.

Bir LAN IP’si ya da --host değil, localhost kullanın. Misafirin kendi loopback’i vardır; tünel orada hem IPv4 hem IPv6 üzerinde dinler.

Aynı anda çok sayıda bağlantı açan sayfalar (düzinelerce varlık, bir canlı yenileme soketi) aynı tüneli paylaşır. Tarayıcı (VM) bunları tek bir kalıcı exec üzerinde çoğullar; böylece bir anda gelen istek patlaması her bağlantı için bir süreç doğurmaz ve beyaz sayfa olarak zaman aşımına uğramaz.

Tek bir alan içinde, aynı numarada bir Terminal (VM) yönlendirmesi ana makine kabuğunu yener. Alanlar arasında bir öncelik yoktur — haritalar ayrıdır.

O alanın Android sekmesini açın. Emülatörün localhost:<port> adresi, bu alanın yayımlanan portuna ters çevrilir (adb reverse). Bir emülatör cihaz genelindedir: B alanını bağlamak :5173 portunu B’ye yöneltir ve A’nınkini düşürür. Sekmeyi kapattığınızda bu rig’in yerleştirdiği ters çevirmeler kaldırılır.

iOS Simulator zaten Mac’in kendisidir — ters çevirme yok. Fiziksel bir iPhone yine de bir LAN paylaşımı gerektirir.

⋯ → Yerel ağda paylaş portu <server-ip>:<random port> adresinde yayımlar — sayfayı telefonunuzda açmak ya da sunucu başka bir makinede çalıştığında kullanışlıdır.

  • LAN portu her zaman işletim sistemi tarafından atanır, asla misafirin numarası değildir; böylece açığa çıkarma, tahmin edilebilir bir adres yerine bilinçli ve görünür bir adres olur.
  • Siz açana kadar özel kalır (yalnızca loopback) ve ⋯ → Yalnızca yerel onu yeniden ağdan çıkarır.

⋯ → Tarayıcı etki alanı ayarla (.test) porta myapp.test gibi bir geliştirme etki alanı atar. Ardından Tarayıcı (VM) içinde https://myapp.test, sunucunuzu geçerli bir kilit simgesiyle yükler — adlandırılmış bir kaynakta ya da güvenli bağlamda farklı davranan her şey için kullanışlıdır (çerezler, service worker’lar, OAuth geri çağrıları).

  • Etki alanları .test veya .localhost ile bitmelidir — geliştirme için ayrılmış iki TLD bunlardır, böylece bir geliştirme adı gerçek bir siteyi asla gölgeleyemez.
  • Etki alanı adları sunucuda benzersizdir; port numaraları değildir. İki alan da 5173 kullanabilir, ama ikisi birden myapp.test adını sahiplenemez.
  • Sertifika, ilk gerektiğinde sunucunuzda üretilen yerel bir otoriteden gelir. Anahtarları sunucunun veri dizininde yaşar ve hiçbir misafire girmez; yalıtılmış tarayıcı tam olarak o tek anahtara güvenir, böylece gerçek internete giden TLS yine normal şekilde doğrulanır.
  • Etki alanı yalnızca Tarayıcı (VM) içinde çözümlenir. Ana makinedeki kendi tarayıcınız bunun yerine localhost:<port> kullanır.
  • Düz http://myapp.test de çalışır.

Panelin altındaki Port ekle, üzerinde henüz bir şey dinlemese de — hatta dinlemeye başlamasından önce — bir portu eşler. Elle yapılan bir yönlendirme, sunucunuz yeniden başlarken adresini korur — geri gelene kadar satır dinlemiyor gösterir — oysa otomatik yönlendirmeler portları ortadan kalktığında kaybolur. Bir ana makine kabuğunda farklı bir yerel port da ayarlayabilirsiniz.

Portlar çalışma alanına ve alana göre anahtarlanır. Hipervizörün kendi port haritası, makine önyüklenirken sabitlenir; bu yüzden bir Terminal (VM), sunucunun denetlediği iki dar kanaldan geçer: misafirin gerçekte dinlemediği hiçbir porta bağlanmayı reddeden, önceden oluşturulmuş bir gelen hattı ve sunucunun Tarayıcı (VM) ile Android için açık tuttuğu ters tüneller. Bir ana makine kabuğu tüm makineyi asla taramaz. Bir misafirin içinde, sunucunun oraya koymadığı hiçbir dinleyici asla oluşturulmaz ve her şey terminalle ya da rig’le birlikte sökülür. Tasarım, Rig’ler ve yalıtılmış ortamlar sayfasında açıklanır; tam ayrılmış portlar ve etki alanı kuralları rig referansında yer alır.