Linux / OSX의 / etc / hosts / 파일에서 와일드 카드 하위 도메인을 어떻게 수행합니까?


169

로컬 호스트에서 하위 도메인을 테스트해야합니다. 파일 에이 결과를 효과적으로 추가 *.localhost.com하려면 /etc/hosts/어떻게해야합니까?

가능하지 않은 경우이 문제를 어떻게 해결합니까? 로컬 서버에서 와일드 카드 하위 도메인을 테스트해야합니다. Django devserver입니다. Django dev 서버가 하위 도메인을 처리 할 수 ​​있습니까? 다른 소프트웨어 / 라우팅을 통해 원하는 결과를 얻을 수 있습니까?


1
수퍼 유저에 속합니까?
— Paul R

나는 사람들이 불가능하다고 말합니다. 그러나 어쨌든 어떻게해야합니까! / etc / hosts / 외부에있는 것이 효과를 얻는 데 사용할 수있는 것입니다. 개발 서버를 테스트하고 있습니다.
— MikeN


대부분의 답변이 첫 번째 질문 (로컬 호스트 하위 도메인 와일드 카드)에 초점을 맞추고 있으므로 보조 질문에 대한 의견으로 의견을 보내 드리겠습니다. 예, Django dev 서버는 로컬 호스트 하위 도메인을 완벽하게 처리 할 수 ​​있습니다. 브라우저와 OS를 설득해야합니다. 아래의 다양한 솔루션 중 하나를 사용하여 트래픽을 전달하십시오!
— hheimbuerger

답변:


43

파이썬으로 DNS 프록시를 작성했습니다. / etc / hosts에서 와일드 카드 항목을 읽습니다. 여기를 참조하십시오 : https://github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py


이것은 완벽 해요! 나는 이와 같은 간단한 해결책을 오랫동안 찾고 있었다 (OSX Mavericks BTW 작업)
— Billy Moon

2
지금, 우리가 단지 그것만 할 수 pip install있다면 :)
— metakermit

1
나는 이것을 설치하고 모든 것을하고 실행했지만 사이트를 차단하지는 않습니다.
— DisplayName

이것을 충분히 찬성 할 수 없습니다. 나는 이것을 영원히 필요로했고,이 질문과 대답의 보석을 우연히 발견했으며, 나는 약간의 파이썬 해커이며, 이것은 깔끔한 깔끔합니다. 공유해 주셔서 감사합니다!
— Farley

152

dnsmasq를 설치 하십시오 (어쨌든 모든 Linux 데스크톱에서 DNS 캐시 로이 작업을 수행합니다). 에서하는 dnsmasq.conf줄을 추가 :

address=/localhost.com/127.0.0.1

7
훌륭한! Mac 사용자를위한 참고 사항은 다음과 같습니다. 1. sudo port install dnsmasq2. 편집 /opt/local/etc/dnsmasq.conf3.sudo port load dnsmasq
— tomc

17
brew가있는 OSX : 위와 동일하지만 brew install dnsmasq
— Matt Humphrey

1
fyi brew> port (@MattHumphrey 제안)
— electblake

1
이 예제는 저에게 효과적이지 않습니다. 아마 로컬 서비스에 vagrantup.com 을 사용하고 있기 때문일 수 있습니다 . 걱정하지 마십시오. 이미 IP를 올바른 것으로 변경 192.168.50.11했지만 DNS가 해결되지 않습니다. 어떤 아이디어라도,이 예는 "non-127.0.0.1"IP에 맞습니까?
— Brian

6
좋은 팁. 기본적으로 dnsmasq를 실행하는 Ubuntu 14.04 데스크탑의 경우, 파일을 작성 /etc/NetworkManager/dnsmasq.d/dnsmasq-localhost.conf하고 그 안에 줄 address=/localhost.com/127.0.0.1을 넣은 다음 다시 시작하십시오.
— user38397

60

/etc/hosts파일 에서 와일드 카드를 지정할 수 없습니다 . 필요한 호스트 이름을 명시 적으로 지정하거나 적절한 규칙으로 로컬 이름 서버를 설정하십시오.


15

DNS 서버를 설정하고 각 클라이언트 가 DNS 서버를 사용하여 해결하도록해야합니다. 서버 자체는 dnsmasq 와 같은 "가벼운" 또는 BIND 와 같은 무거운 것일 수 있습니다 .


정말 잘 문서화하고 사용하기 쉽게하는 dnsmasq, +1
— 데이비드 슈미트를

dnsmasq는이 작업을 수행 할 수 없습니다.
— DisplayName

--address=dnsmasq.conf 매뉴얼 페이지 섹션에 설명 된 동작 중 어떤 부분이 위에서 설명한 사용 사례를 다루지 않습니까?
— Gerald Combs

11

간단한 워크 플로우 (설치 필요 없음)

개인적으로 PAC 파일을 만들고 브라우저에서 사용하도록하십시오.

1 단계 : 파일 작성 예 : *.proxy.pac*어딘가 (내 $home폴더 사용 )

2 단계 : 이 코드를 붙여 넣습니다 (예 : 포트 8000).

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

3 단계 : 브라우저가이 PAC 파일을 사용하도록합니다.

PAC 및 Firefox 용 YouTube 비디오

4 단계 : 이제 다음에 액세스하여 앱을 테스트 할 수 있습니다.http://mysubdomain.localhost/

5 단계 : 즐기십시오 :)


3
아마도 이것은 브라우저에만 영향을 줄 것입니다. 다른 프로그램 ( wget등은 이에 영향을받지 않습니다). 그것은 그 자체로는 문제가 아니지만 아마도 이것을 언급하는 것이 좋습니다.
— Willem Van Onsem

.pac 경로로 가서 node.js 서버를 구현하고 있다면 이것이 req.url절대 URL 이라는 사실에 놀랄 것 입니다. 이는 실제 프록시 서버를 작성한다고 가정하기 때문에 수행되지만 디버깅을 위해 / etc / hosts 항목 추가를 중지하는 방법으로이 기술을 사용했다는 것은 놀라운 일입니다. 같은 길을 갈 사람들에게 참고하십시오.
— Tom Boutell

5

나는 내 오래된 프로젝트를 정리했다.

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

요구 사항 :

  • avahi 및 python-avahi를 설치할 수있는 Linux
  • .local 도메인에 문제가 없습니다 (avahi는 다른 종류를 지원하지 않습니다)

dnsmasq 또는 python dns 프록시를 사용하는 것의 장점 :

  • 로컬 네트워크의 다른 avahi / bonjour 사용자는 사용자가 작성하고 네트워크에 알리는 별명을 분석 할 수 있습니다 (포트 5353에 대한 액세스를 허용 함)


3

에서 와일드 카드를 사용할 수 없습니다 /etc/hosts.

BIND, 내장 된 비활성 DNS 서버 및 Apache를 사용하여 OS X에서 수행하는 방법에 대한 유용한 연습을 보려면 여기 를 살펴보십시오 .


5
Apache는 하위 도메인과 관련이 없습니다.
— Anonymous

3

dnsmasq함께 사용하려면 NetworkManager다음 을 추가하여 시작할 수 dnsmasq있습니다.NetworkManager

dns=dnsmasq

에 /etc/NetworkManager/NetworkManager.conf. 그런 다음 dnsmasq 구성은 /etc/NetworkManager/dnsmasq.conf또는 /etc/NetworkManager/dnsmasq.d/resp 로 이동 합니다.


2

짧은 답변:

/ etc / hosts / 파일에서는 와일드 카드 나 포트 번호를 사용할 수 없습니다. 각 하위 도메인마다 하나의 항목을 작성해야합니다.


2
포트 번호를 지정할 수있는 것은 무엇입니까? DNS AFAIK가 아닙니다.
— ptman

2

짧은 대답은 당신이하지 않는 것입니다. 더 긴 대답은 더 나은 방법과 다른 방법이있을 수 있기 때문에 실제로 달성하고자하는 것에 대해 더 명확해야합니다.

웹 호스팅의 경우 (다른 방법으로는 본 적이 없습니다) 가상 호스팅 인식 웹 서버와 함께 DNS에서 수행됩니다. 와일드 카드 DNS 레코드 (Wikipedia) 에 대한 자세한 내용 과 bind 및 Apache를 사용하여 Linux 용 Apache 및 Bind 를 사용한 Wildcard 호스팅 기사를 참조하십시오 .

최악의 경우, 내가 생각한 로컬 DNS 서버를 사용할 수 있습니다.


2

이 주제의 공통 태스크는 디렉토리를 서브 도메인에 맵핑하는 것입니다. 이를위한 가장 간단한 방법은 디렉토리 기반 항목을 호스트 파일에 자동으로 추가하는 것입니다.

#! / usr / bin / python

수입 OS

hostsFile = open ( "/ etc / hosts", "a +");

lines = hostsFile.readlines ()

os.listdir ( '/ opt / subdomainDirs')의 fileName :

    entryExists = 거짓
    줄에서 줄을 위해 :
        만약 fileName이 줄에 있다면 :
            entryExists = True  

    입력하지 않은 경우
        hostsFile.write ( "127.0.0.1"+ fileName + ".localhost \ n");

2

내가이 문제에 대한 궁극적 인 답변이라고 생각하는 것에 대해 tschundeee에게 감사드립니다. 단지 의견을 제시 할 수 있기를 바랍니다.하지만 원래 목표를 달성하려는 사람들을위한 전체 구성은 다음과 같습니다 (와일드 카드는 모두 동일한 코드베이스를 가리키고 있습니다. , XAMPP)

호스트 파일 (항목 추가)

파일 : / etc / hosts (비 Windows)

127.0.0.1   example.local

httpd.conf 구성 (vhost 활성화)

파일 : /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 파일 만들기 :

원하는 위치에 whatever.pac로 저장 한 다음 브라우저의 네트워크> 프록시> 자동 구성 설정에서 파일을로드합니다 (변경 한 경우 다시로드).

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 내가 당신을보고 있습니다)
— MrMesees
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.