लिनक्स / ओएसएक्स पर मेरे / आदि / मेजबानों / फाइल में, मैं वाइल्डकार्ड सबडोमेन कैसे कर सकता हूं?


168

मुझे अपने लोकलहोस्ट पर उप-डोमेन का परीक्षण करने की आवश्यकता है। मैं *.localhost.comअपनी /etc/hosts/फ़ाइल में जोड़ने का यह परिणाम कैसे प्रभावी रूप से दे सकता हूं ?

यदि यह संभव नहीं है, तो मैं इस समस्या को कैसे हल करूं? मुझे अपने स्थानीय पर्यवेक्षक पर वाइल्डकार्ड उप-डोमेन का परीक्षण करने की आवश्यकता है। यह एक Django devserver है, क्या Django देव सर्वर उप-डोमेन को संभाल सकता है? क्या सॉफ्टवेयर / राउटिंग का कोई अन्य टुकड़ा मुझे अंतिम परिणाम दे सकता है जो मैं चाहता हूं?


1
सुपरयुजर पर भरोसा करता है?
पॉल आर

मुझे पता है कि लोग कहते हैं कि यह संभव नहीं है! लेकिन मैं इसे वैसे भी कैसे करूं! / Etc / host / I के बाहर क्या कुछ है प्रभाव प्राप्त करने के लिए उपयोग कर सकते हैं। मैं एक विकास सर्वर का परीक्षण कर रहा हूं।
माइकएन


जैसा कि अधिकांश उत्तर आपके पहले प्रश्न (लोकलहोस्ट सबडोमेन वाइल्डकार्ड्स) पर ध्यान केंद्रित कर रहे हैं, मैं आपके द्वितीयक प्रश्न का उत्तर एक टिप्पणी के रूप में दूंगा: हां, Django देव सर्वर लोकलहोस्ट सबडोमेन को संभालने में पूरी तरह से सक्षम है, आपको बस अपने ब्राउज़र और अपने ओएस को समझाना होगा ट्रैफ़िक भेजने का अपना तरीका (नीचे दिए गए विभिन्न समाधानों में से एक का उपयोग करके)!
हिम्हेबर्गर

जवाबों:


43

मैंने पायथन में एक डीएनएस प्रॉक्सी लिखा है। यह वाइल्डकार्ड प्रविष्टियों को / etc / मेजबान में पढ़ेगा। यहां देखें: https://github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py


यह पूर्ण है! मैं लंबे समय से इस तरह का एक सरल समाधान ढूंढ रहा हूं (OSX Mavericks BTW पर काम कर रहा हूं)
बिली मून

2
अब, अगर हम केवल pip installयह कर सकते हैं :)
मेटाकेरमिट

1
मैंने इसे स्थापित किया, सब कुछ किया और इसे चलाया, लेकिन यह साइटों को अवरुद्ध नहीं करता है।
डिस्प्लेनाम

इसको पर्याप्त नहीं बढ़ा सकते। मुझे इसकी हमेशा ज़रूरत है, एक सवाल और जवाब के इस मणि पर ठोकर खाई, और मैं पायथन हैकर का एक सा हूँ, और यह एक साफ-सुथरा टिडबिट है। साझा करने के लिए धन्यवाद!
फार्ले

152

Dnsmasq स्थापित करें (मैं DNS कैश के रूप में मेरे सभी लिनक्स डेस्कटॉप पर ऐसा करता हूं)। में dnsmasq.confपंक्ति जोड़ें:

address=/localhost.com/127.0.0.1

7
प्रतिभाशाली! मैक उपयोगकर्ताओं के लिए ध्यान दें, यह वास्तव में यह सरल है: 1. sudo port install dnsmasq2. संपादित करें /opt/local/etc/dnsmasq.conf3.sudo port load dnsmasq
11

17
काढ़ा के साथ OSX: ऊपर के रूप में, लेकिन काढ़ा स्थापित dnsmasq
मैट हम्फ्री

1
fyi brew> पोर्ट (पुनः @ मट्टुम्फ्रे सुझाव)
इलेक्टेकलेक

1
यह उदाहरण मेरे लिए काम नहीं करता है, संभवतः क्योंकि मैं स्थानीय सेवा के लिए vagrantup.com का उपयोग कर रहा हूं । चिंता न करें, मैंने पहले ही आईपी को सही में बदल दिया है 192.168.50.11लेकिन DNS हल नहीं कर रहा है। किसी भी विचार, क्या यह उदाहरण "गैर-127.0.0.1" आईपी के लिए सही है?
ब्रायन

6
महान टिप। उबंटू 14.04 डेस्कटॉप (जो डिफ़ॉल्ट रूप से dnsmasq चलाता है) के लिए, नामक एक फाइल बनाएं /etc/NetworkManager/dnsmasq.d/dnsmasq-localhost.confऔर उसमें लाइन डालें address=/localhost.com/127.0.0.1, फिर पुनरारंभ करें।
user38397

60

/etc/hostsफ़ाइल में वाइल्डकार्ड निर्दिष्ट करना संभव नहीं है । या तो आवश्यक होस्टनाम स्पष्ट रूप से निर्दिष्ट करें या वैकल्पिक रूप से उपयुक्त नियमों के साथ एक स्थानीय नाम सर्वर स्थापित करें।


15

आपको एक DNS सर्वर सेट करने की आवश्यकता है और प्रत्येक क्लाइंट इसे रिज़ॉल्यूशन के लिए उपयोग करता है। सर्वर स्वयं "लाइट" के रूप में dnsmasq या BIND के समान भारी हो सकता है ।


Dnsmasq के लिए +1, जो वास्तव में अच्छी तरह से प्रलेखित और उपयोग में आसान है
डेविड श्मिट

dnsmasq ऐसा करने में सक्षम नहीं है।
DisplayName

--address=Dnsmasq.conf मैन पेज के अनुभाग में वर्णित व्यवहार का कौन सा भाग ऊपर वर्णित उपयोग मामले को कवर नहीं करता है?
जेराल्ड

11

सरल वर्कफ़्लो (कुछ भी स्थापित करने की आवश्यकता नहीं)

मैं व्यक्तिगत रूप से उसके लिए एक पीएसी फ़ाइल बनाना पसंद करता हूं और अपने ब्राउज़र का उपयोग करता हूं।

चरण 1: एक फ़ाइल बनाएं जैसे: *.proxy.pac*कहीं (मैं अपने $homeफ़ोल्डर का उपयोग करता हूं )

चरण 2: इस कोड को पेस्ट करें (उदाहरण पोर्ट 8000 के साथ है):

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*localhost")) {
    return "PROXY localhost:8000";
  }
  return "DIRECT";
}

चरण 3 : अपने ब्राउज़र को इस PAC फ़ाइल का उपयोग करें।

पीएसी और फ़ायरफ़ॉक्स के लिए यूट्यूब वीडियो

चरण 4 : अब आप अपने ऐप को एक्सेस करके परीक्षण कर सकते हैं:http://mysubdomain.localhost/

चरण 5: आनंद लें :)


3
शायद यह ध्यान देने योग्य है कि यह केवल आपके ब्राउज़र को प्रभावित करेगा। अन्य कार्यक्रम (जैसे wget, इससे प्रभावित नहीं होंगे)। यह एक समस्या के अनुसार नहीं है, लेकिन शायद यह उल्लेख करना बेहतर है।
विलेम वैन ओन्सेम

यदि आप .pac मार्ग पर जाते हैं और आप एक नोड .js सर्वर को लागू कर रहे हैं, तो आप यह देखकर आश्चर्यचकित होंगे कि req.urlअब यह एक पूर्ण URL है। ऐसा इसलिए किया जाता है क्योंकि यह धारणा है कि आप एक वास्तविक प्रॉक्सी सर्वर लिखना चाहते हैं, लेकिन यह आश्चर्य की बात है कि अगर आप इस तकनीक में आए तो डीबगिंग के लिए / etc / मेजबान प्रविष्टियों को रोकने का एक तरीका है। FYI करें उन लोगों के लिए जो उसी सड़क पर जा सकते हैं जो मैंने किया था।
टॉम बॉटल

5

मैंने अपना एक पुराना प्रोजेक्ट टाइड किया है:

https://github.com/airtonix/avahi-aliases

आवश्यकताएँ:

  • linux जहां avahi और python-avahi इंस्टॉल करने योग्य हैं
  • आप .local डोमेन के साथ ठीक हैं (avahi किसी अन्य प्रकार का समर्थन नहीं करता है)

Dnsmasq या अजगर dns प्रॉक्सी का उपयोग करने पर लाभ:

  • आपके स्थानीय नेटवर्क पर अन्य अवहि / बॉनजोर उपयोगकर्ता आपके द्वारा बनाई गई उपनामों को हल कर सकते हैं और नेटवर्क की घोषणा कर सकते हैं (बशर्ते आप पोर्ट 5353 तक पहुंच की अनुमति दे रहे हों)

4

इस डीएनएस आधारित समाधान ने मेरे मामले में पूरी तरह से काम किया, कुछ भी स्थापित करने की आवश्यकता के बिना: https://gist.github.com/fedir/04e60d679d5657d1f9f9aa10b3168282 (Mac OSX 10.9)


मैक OSX के लिए इस तरह के एक अद्भुत समाधान।
25देव २४ i

डेड लिंक, कृपया अपना लिंक, अपना समाधान, या किसी तरह से इस उत्तर को अपदस्थ करें। चीयर्स।
एरिक होडोंस्की

हो गया (बैकअप जोड़ा गया)
फेडिर RYKHTIK

3

आप वाइल्डकार्ड का उपयोग नहीं कर सकते /etc/hosts

BIND, बिल्ट-इन इनएक्टिव डीएनएस सर्वर और अपाचे का उपयोग करके OS X को पूरा करने के तरीके के बारे में अच्छे पूर्वाभास के लिए यहाँ एक नज़र डालें ।


5
Apache का उप-डोमेन से कोई लेना-देना नहीं है।
बेनामी

3

आप उपयोग करना चाहते हैं dnsmasqके साथ NetworkManagerआप (या यहाँ तक? चाहिए) शुरू कर सकते हैं dnsmasqसे NetworkManagerजोड़कर

dns=dnsmasq

को /etc/NetworkManager/NetworkManager.conf। फिर dnsmasq config /etc/NetworkManager/dnsmasq.confया सम्मान के लिए जाता है /etc/NetworkManager/dnsmasq.d/


2

संक्षिप्त जवाब:

आपकी / etc / मेजबान / फ़ाइल आपको वाइल्डकार्ड या पोर्ट नंबर का उपयोग नहीं करने देगी। आपको अपने प्रत्येक उपडोमेन के लिए एक प्रविष्टि बनाने की आवश्यकता होगी


2
आप पोर्ट नंबर को क्या निर्दिष्ट करेंगे? DNS AFAIK नहीं।
पीटीमैन

2

संक्षिप्त उत्तर है आप नहीं। लंबे समय तक उत्तर देने के लिए आपको स्पष्ट होना चाहिए कि आप वास्तव में क्या हासिल करना चाहते हैं, क्योंकि शायद एक बेहतर तरीका है, और इसे प्राप्त करने का एक अलग तरीका है।

वेब-होस्टिंग के लिए (मैंने इसका उपयोग कभी नहीं देखा है अन्यथा) एक वर्चुअल होस्टिंग जागरूक वेब सर्वर के साथ संयोजन में DNS में किया जाता है। वाइल्डकार्ड डीएनएस रिकॉर्ड (विकिपीडिया) के बारे में अधिक जानकारी के लिए , और बाइंड और अपाचे का उपयोग करके लिनक्स के लिए अपाचे और बिंद के साथ एक लेख वाइल्डकार्ड होस्टिंग

सबसे खराब रूप से, आप एक स्थानीय डीएनएस सर्वर का उपयोग कर सकते हैं जो मुझे लगता है।


2

इस विषय का एक सामान्य कार्य निर्देशिकाओं को उपडोमेन में मैप करना है। इसके लिए एक बहुत ही सरल तरीका है कि निर्देशिका-आधारित प्रविष्टियों को मेजबानों की फ़ाइल में स्वचालित रूप से जोड़ा जाए:

#! / Usr / bin / अजगर

आयात os

HostFile = open ("/ etc / मेजबान", "a +");

तर्ज = HostFile.readlines ()

os.listdir में फ़ाइलनाम के लिए ('/ ऑप्ट / सबडोमेनडायर'):

    entryExists = गलत
    लाइनों में लाइन के लिए:
        यदि फ़ाइल लाइन में है:
            entryExists = सत्य  

    यदि प्रविष्टि नहीं है:
        HostFile.write ("127.0.0.1" + फ़ाइलनाम + ".localhost \ n");

2

शुक्रिया tschundeee, जो मैं इस मुद्दे का अंतिम उत्तर मानता हूं, काश मैं सिर्फ टिप्पणी कर सकता हूं लेकिन यहां मूल लक्ष्य को पूरा करने की कोशिश करने वालों के लिए कुल कॉन्फ़िगरेशन है (सभी एक ही कोडबेस को इंगित करने वाले वाइल्डकार्ड - कुछ भी नहीं स्थापित करें, देव वातावरण अर्थात , XAMPP)

होस्ट फ़ाइल (एक प्रविष्टि जोड़ें)

फ़ाइल: / etc / होस्ट (गैर-विंडोज़)

127.0.0.1   example.local

httpd.conf कॉन्फ़िगरेशन (vhosts सक्षम करें)

फ़ाइल: /XAMPP/etc/httpd.conf

# Virtual hosts
Include etc/extra/httpd-vhosts.conf

httpd-vhosts.conf कॉन्फ़िगरेशन

फ़ाइल: XAMPP / etc / extra / httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin admin@example.local
    DocumentRoot "/path_to_XAMPP/htdocs"
    ServerName example.local
    ServerAlias *.example.local
#    SetEnv APP_ENVIRONMENT development
#    ErrorLog "logs/example.local-error_log"
#    CustomLog "logs/example.local-access_log" common
</VirtualHost>

फिर से शुरू करें

pac फ़ाइल बनाएँ:

जहाँ भी आप चाहते हैं के रूप में save.pac सहेजें और फिर ब्राउज़र के नेटवर्क में फ़ाइल लोड करें> प्रॉक्सी> auto_configuration सेटिंग्स (यदि आप इसे बदलते हैं तो पुनः लोड करें)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}

2

dnsmasq ने मेरे लिए काम किया, सिवाय इसके कि मुझे कुछ अतिरिक्त कदम उठाने पड़े।

यहाँ पूरी प्रक्रिया है:

  1. /etc/resolv.confनिम्नलिखित पंक्ति के साथ प्रस्तुत करें

    nameserver 127.0.0.1
    
  2. निम्न पंक्तियों को इसमें जोड़ें /etc/dnsmasq.conf

    listen-address=127.0.0.1
    address=/localhost.localdomain/127.0.0.1
    address=/localhost/127.0.0.1
    
  3. Dnsmasq पुनरारंभ करें


यह काम नहीं करेगा अगर आपका डिस्ट्रो नेटप्लान उपयोग करता है (ubuntu 18.04 मैं आपको देख रहा हूं)
MrMeses
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.