17 पॉइंट द्वारा GN⁺ 2025-04-12 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • डेवलपमेंट के दौरान web app के लिए localhost:4333 जैसे पोर्ट याद रखे बिना, appname.localhost जैसे आसान address से access करने की सेटिंग का अनुभव साझा किया गया है
  • इस सिस्टम का उपयोग करने पर local web app access काफी अधिक intuitive और साफ-सुथरा हो जाता है
  • हर app अपने अलग पोर्ट पर launchd daemon के रूप में चलता है
  • /etc/hosts फ़ाइल में appname.localhost को 127.0.0.1 पर redirect किया जाता है
    • उदाहरण: 127.0.0.1 inclouds.localhost
  • Caddy के जरिए उस डोमेन को सही पोर्ट पर proxy किया जाता है

Caddy सेटिंग उदाहरण

  inclouds.localhost {  
    reverse_proxy localhost:5050  
    tls internal  
    encode gzip zstd  
  }  
  • हर .localhost डोमेन के लिए Caddyfile में संबंधित पोर्ट की proxy सेटिंग लिखी जाती है
  • इसमें internal TLS certificate और compression support भी शामिल है

आगे के सुधार के आइडिया

  • अभी तीन फ़ाइलें (/etc/hosts, Caddyfile, launchd plist) मैन्युअली edit करनी पड़ती हैं
  • आगे लक्ष्य एक ऐसा automation tool बनाना है जो एक ही command से app को .localhost डोमेन पर install/remove कर सके

अपडेट

  • Cristóbal ने dnsmasq आधारित command सुझाई, जिससे यह प्रक्रिया और आसान हो गई
  • मुख्य आइडिया इस प्रकार है:
    1. सभी *.localhost को 127.0.0.1 पर redirect करना
    2. 127.0.0.1 पर किसी खास पोर्ट तक reverse proxy करने वाला server सेट करना

dnsmasq से redirection सेट करना

  • सभी *.localhost डोमेन को 127.0.0.1 पर route करने के लिए dnsmasq का उपयोग
  • install के बाद सेटिंग:
    echo 'port=5353' | sudo tee -a /etc/dnsmasq.conf  
    echo 'address=/localhost/127.0.0.1' | sudo tee -a /etc/dnsmasq.conf  
    sudo systemctl restart dnsmasq  
    
  • dnsmasq का पोर्ट 5353 रखा गया है ताकि systemd-resolved के साथ conflict न हो
  • डिफ़ॉल्ट DNS resolver को dnsmasq बनाने के लिए /etc/resolv.conf के सबसे ऊपर यह जोड़ें:
    nameserver 127.0.0.1  
    

Caddy और localhost स्क्रिप्ट से reverse proxy सेट करना

  • अब caddy server की मदद से हर subdomain को किसी खास पोर्ट से जोड़ा जा सकता है
  • Caddyfile को मैन्युअली edit किया जा सकता है, लेकिन bash script (localhost) बनाकर इसे automate भी किया जा सकता है
  • इस bash script (localhost) को PATH में जोड़ें (उदाहरण के तौर पर .zshrc फ़ाइल में):
    export PATH="$PATH:$HOME/dev/localhost"  
    
  • इसे इस तरह उपयोग किया जा सकता है:
    localhost add hello 8000  
    localhost remove hello  
    

वास्तविक कामकाज का टेस्ट

  • local server चलाने का उदाहरण:
    echo 'hello.localhost!' > index.html  
    python3 -m http.server 1234  
    
  • डोमेन कनेक्शन सेटिंग:
    localhost add hello 1234  
    
  • अब browser में hello.localhost खोलने पर ऊपर वाले server की सामग्री दिखाई देगी

2 टिप्पणियां

 
dudlf016 2025-04-12

अगर बाहरी नेटवर्क एक्सेस पर रोक न हो, तो मैं NIP.IO जैसी Wildcard DNS इस्तेमाल करूंगा।

 
GN⁺ 2025-04-12
Hacker News राय
  • ब्राउज़र .localhost डोमेन के लिए secure context प्रदान करते हैं

    • HTTPS के लिए self-signed certificate की ज़रूरत नहीं होती
    • जब backend API और frontend SPA एक साथ चल रहे हों, तब यह उपयोगी है
    • हाल ही में स्वीकृत .internal डोमेन का उपयोग किया जा सकता है
  • nginx local development config snippet सरल है

    • यह Unix domain socket के माध्यम से local development server से जुड़ता है
    • host name resolution जोड़नी पड़ती है, लेकिन config file को प्रोग्रामेटिक तरीके से संपादित करने या proxy को restart करने की ज़रूरत नहीं होती
  • Chrome और Firefox डिफ़ॉल्ट रूप से सभी <name>.localhost डोमेनों को localhost के रूप में resolve करते हैं

    • Docker proxy सेट करके सभी requests को अपने-आप handle किया जा सकता है
  • Localias प्रोजेक्ट local web development के लिए उपयोगी है

    • यह Caddy पर आधारित है, और इसका CLI तथा config file format सुविधाजनक है
    • यह .local domain alias को नेटवर्क के दूसरे डिवाइसों पर भी इस्तेमाल करने देता है
    • /etc/hosts फ़ाइल को मैन्युअली संपादित करने की ज़रूरत नहीं होती
  • .localhost के subdomain Linux, OpenBSD आदि में डिफ़ॉल्ट रूप से काम करते हैं

    • macOS में /etc/hosts में subdomain को स्पष्ट रूप से जोड़ना पड़ता है
  • अगर आप Caddy का उपयोग कर रहे हैं, तो खरीदा हुआ domain और DNS-01 challenge इस्तेमाल करना बेहतर है

    • self-signed certificate को trust store में जोड़ने की ज़रूरत नहीं होती
    • Caddy certificate को अपने-आप renew करता है
  • कुछ लोग private network में vanity domain का भी उपयोग करते हैं

    • Smallstep CA, CoreDNS, Traefik का उपयोग करके SSL certificate अपने-आप जारी करवाते हैं
    • internal. zone को internal network setup में इस्तेमाल करना बेहतर है
  • हर local hosting app को अलग IP address दिया जा सकता है

    • 127.0.0/24 रेंज के IP address उपयोग किए जा सकते हैं
    • यह macOS में भी काम करता है, लेकिन loopback interface में इसे स्पष्ट रूप से जोड़ना पड़ सकता है
  • Linux systems में यह systemd-resolved के माध्यम से डिफ़ॉल्ट रूप से काम करता है

    • इसका फ़ायदा यह है कि CSRF को reverse proxy के रूप में block किया जा सकता है