DNS / 호스트 이름 또는 다른 방법으로 특정 IP를 확인하는 방법 : 서비스를 실행하고

이것은 IP / 포트에 대한 DNS / 호스트 이름 확인에 대한 정식 질문입니다

실시 예 1

포트 80에서 웹 서버를 실행하고 포트 87에서 웹 서버를 실행하고 있습니다. www.example.com이 포트 87로 이동하도록 DNS를 사용하고 싶습니다. DNS 만 사용하여이 작업을 수행하려면 어떻게해야합니까?

실시 예 2

비표준 포트의 서버에서 서비스를 실행하고 있습니다. 클라이언트가이 비표준 포트에 자동으로 연결되도록하려면 어떻게해야합니까? DNS를 사용할 수 있습니까? DNS가 IP 및 포트를 표시 할 수있는 응용 프로그램 별 지원이 있습니까?

실시 예 3

일부 응용 프로그램 프로토콜은 특히 호스트 이름 인식을 지원하고이 정보를 기반으로 특별한 조치를 취할 수 있습니까? 서버 결함에 대한 다른 질문이 있습니까?

Commandeering:이 질문은 원래 동일한 서버에서 IIS와 Apache를 실행하는 것에 대한 질문이지만 클라이언트로부터 연결을받는 모든 서버 소프트웨어에 동일한 개념을 적용 할 수 있습니다. 아래 답변은 DNS 및 응용 프로그램 프로토콜 지원을 사용하여 클라이언트가 연결할 포트 번호를 지정하는 데 따른 기술적 문제와 해결 방법을 설명합니다.



답변

클라이언트가 SRV 레코드를 지원하지 않는 한 DNS를 사용하여 포트를 가리킬 수 없습니다.

호스트 헤더가있는 웹 사이트 및 프로토콜

이렇게하려면 프런트 엔드 방법을 사용해야합니다. 일반적으로 프런트 엔드 웹 서버 또는 전용 프록시 소프트웨어를 사용하여 헤더에서 요청되는 서버 이름에 따라 포트 80에서 포트! 80으로 연결을 전달합니다. 일부 방화벽은 호스트 헤더를 기반으로 전달할 수도 있습니다.

SRV 레코드

일부 클라이언트는 지정된 서비스에 대한 서버의 호스트 이름 및 포트 번호를 나타내는 SRV 레코드 조회를 지원합니다 (예 : 사용자가 “example.com”을 지정하면 클라이언트는 SRV 레코드를 찾아 포트 “255에서”server101.example.com “을 얻습니다. “; 그런 다음 연결합니다). 일부 클라이언트는 필요하지 않은 곳에서도이를 구현합니다 (예 : 마지막 스마트 폰은 새 전자 메일 계정을 설정할 때 SRV 레코드를 조회합니다).

불행히도 SRV 레코드에 대한 지원은 흔하지 않습니다. 주목할만한 프로토콜 중 일부만이 지원 (Jabber / XMPP, Kerberos, LDAP, SIP)을 요구하며, 모든 클라이언트가 위임 된 경우에도 지원하지는 않습니다.


답변

브라우저에 http://www.domain.com 을 입력 하면 HTTP 포트가 80임을 알 수 있습니다. 따라서 이미 서비스가있는 경우 www.domain.com을 포트 87로 지정할 수있는 직접적인 방법은 없습니다 IIS의 해당 포트에서 실행 중입니다.

그러나 몇 가지 “해결 방법”이 있습니다.

  • 그냥 사용 http://www.domain.com:87/ 이 서버에 포트 87 (아파치)에 연결됩니다 -.
  • http://www.domain.com/apache 가 www.domain.com:87로 전달되도록 (또는 프록시를 사용하려는 경우 프록시) 리디렉션을 설정할 수 있습니다 .
  • www.domain2.com이 여전히 포트 80에 있고 www.domain.com과 공유되도록 “VirtualHost”를 설정할 수 있습니다. IIS를 수정하지 않고는 설정할 수 없습니다.

Sam은 옳습니다. DNS는 포트와 관련하여 불가지론합니다. 모든 종류의 포트 리디렉션은 해당 포트에서 실행되는 서비스에 의해 발생합니다. 따라서 포트 80에 그대로 둘 수밖에없는 경우 IIS를 사용하여이 작업을 수행해야합니다.

또한 Apache에서 mod_proxy를 사용하여 상황을 극복했습니다 .IIS 로이 작업을 수행하는 방법이 있는지 확실하지 않습니다.


답변

도메인 이름은 포트가 아닌 IP 주소에만 연결할 수 있습니다.

대부분의 웹 서버 (예 : Apache, IIS 등)에서는 웹 요청에 요청 자체에서 도메인을 식별하는 호스트 헤더 필드가 포함되어 있다는 사실을 사용하여 동일한 IP 주소에서 두 개의 도메인을 호스팅 할 수 있습니다.

웹 서버가 무엇을 사용하고 있는지 말하면 사람들이 원하는대로 서버를 설정하기 위해 관련 문서를 가리킬 수 있습니다.


답변

기술적 으로 RFC 2782
에 정의 된 대로 DNS 서버에서 SRV 레코드 를 사용 하여 브라우저에 (서브) 도메인의 포트를 http로 처리하는 서버를 알려줄 수 있습니다.

_http._tcp.www.example.com.  IN      SRV 0    5      80   www.example.com.
_http._tcp.www2.example.com. IN      SRV 0    5      87   www.example.com.

이는 특히 프로토콜 사양에 SRV 레코드 사용이 정의되어있는 경우 많은 프로토콜 / 서비스에 적합합니다.

그러나이 ” Hall of Shame “상태에서는 대부분의 웹 브라우저 / 클라이언트가이를 지원하지 않습니다 (HTTP의 경우). why-do-browsers-not-use-srv-records 도 참조하십시오 .

기본적으로 SRV는 http 프로토콜에 필수 항목으로 포함되지 않으므로이를 구현하는 모든 브라우저는 URL을 그렇지 않은 브라우저와 다르게 해석합니다.

따라서이 옵션을 선택적인로드 밸런싱으로 만 사용해야합니다. 여기서 컨텐츠 측면에서 어떤 서버를 선택하는지는 관련이 없습니다. “선택 사항”은 클라이언트가이 기능을 구현하는 경우가 거의없는 경우 많은 부하를 분산시키지 않기 때문입니다.


답변

DNS에는 특정 포트로 리디렉션 할 수있는 기능이 없으며 모든 DNS 관리는 이름의 IP 주소 확인이며 그 반대도 마찬가지입니다.

NO-IP 와 같은 동적 IP DNS 공급자와 같은 일부 서비스 는 가정용 DNS 서비스에서 IP의 라운드 차단과 유사한 작업을 수행하는 데 도움이되는 서비스를 제공합니다.


답변

사용하기 위해서는 어떤 표준이 아닌 포트 (TBT) 서비스를하고 URI의 포트를 작성하지 않는, 모두가 RFC 2782에 정의 된 SRV 레코드를 사용할 수 있습니다.

_http._tcp.www.example.com. IN      SRV 0    5      87   www.example.com.

영역의 다른 모든 http 호스트는 여전히 기본 포트 80에서 제공됩니다.


답변

가장 간단한 방법은 리버스 프록시를 사용하여 웹 프록시로 설정하는 것입니다. 당신은 구성 할 수 있습니다 nginx또는 apache그것을 위해. 나는 과거에 기본적으로 같은 문제가 있었고 간단한 구성으로 그러한 구성을 달성하는 도구를 만들었습니다. 에르고 : https://github.com/cristianoliveira/ergo

나는 이것을 사용하고 기본적으로 매력처럼 작동합니다 🙂