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.