VirtualHost 컨텍스트에서 _default_:*와 *:*의 차이점

VirtualHost 컨텍스트에서 _default_:*와 *:*의 차이점

차이점을 알고 싶습니다."기본:*" 그리고 "*:*"VirtualHost 컨텍스트에서.

<VirtualHost _default_:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

<VirtualHost *:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

차이점과 용도를 잘 모르겠습니다.

고마워요

답변1

솔루션은 Apache 2.2 문서에 있습니다.Virtualhost 지시문에:

구문: ... (...) Addr은 다음과 같을 수 있습니다:

  • 가상 호스트의 IP 주소입니다.
  • 가상 호스트의 IP 주소에 대한 정규화된 도메인 이름(권장되지 않음)
  • 캐릭터 *, 와 조합해서만 사용됩니다.이름VirtualHost* 모든 IP 주소와 일치합니다. 또는
  • 문자열 _default_, 이는 다음과 같은 경우에만 사용됩니다.IP 가상 호스팅일치하지 않는 IP 주소를 포착합니다.

가상호스트를 처리하는 방법에는 이름 기반 가상호스팅과 IP 기반 가상호스팅이라는 두 가지 방법이 있습니다.

이름 기반 가상 호스트를 사용하면 가상 호스트 목록이 있으며, 각각은 하나 이상의 도메인 이름을 관리하고 각각은 몇 개의 listening IP:port. *의미하는 특별한 값입니다.이 호스트의 모든 IP. 기본 virtualHost는 주어진 각 수신 주소에 대해 이 목록에서 처음으로 선언된 호스트입니다.

IP 기반 VirtualHosts에서는 ServerNameVirtualHost의 지시문이 사용되지 않으며 중요한 정보는 수신 IP(및 포트)이며 기본 VirtualHost는 들어오는 요청을 처리하는 IP와 일치하는 첫 번째 정보입니다.

따라서 명명된 기반 가상 호스팅 구성을 사용하면 다음과 같습니다.

  • <Virtualhost *:80> with ServerName foo.com"이 호스트에서 관리되는 모든 IP에서", "포트 80에서", "요청 호스트 헤더가 foo.com인 경우"를 의미합니다. 이 가상 호스트를 사용하겠습니다.
  • <Virtualhost *:*> with Servername foo.com"이 호스트에서 관리되는 모든 IP에서", "모든 포트에서", "요청 호스트 헤더가 foo.com인 경우"를 의미합니다. 이 가상 호스트를 사용하겠습니다.
  • <Virtualhost 10.0.0.2:*> with Servername foo.com"내 네트워크 인터페이스 10.0.0.2에서 들어오는 요청용", "모든 포트에서", "요청 호스트 헤더가 foo.com인 경우"를 의미합니다. 이 가상 호스트를 사용하겠습니다.
  • <Virtualhost _default_:*> with Servername foo.com: 이름 기반 가상 호스팅과 함께 사용하면 안 됩니다.

그리고 IP 기반 가상 호스팅에서는:

  • <Virtualhost 10.0.0.2:*>"10.0.0.2 인터페이스에서 들어오는 요청에 이 가상 호스트를 사용하겠습니다"를 의미합니다.
  • <Virtualhost _default_:443>"포트 443에서 들어오는 요청을 위해 내 호스트의 다른 모든 네트워크 인터페이스에 이 가상 호스트를 사용하겠습니다"를 의미합니다.
  • <Virtualhost _default_:*>"이전 규칙과 일치하지 않고 요청 호스트 헤더가 명명된 기반 가상 호스트와 일치하지 않는 경우 내 호스트의 다른 모든 네트워크 인터페이스에 이 가상 호스트를 사용합니다"를 의미합니다.

따라서 포괄적인 가상 호스트를 정의하는 것이 전부입니다. 설명서에 다음이 추가됩니다.

_default_IP 기반 가상 호스팅을 사용할 때 이 가상 호스트가 다른 가상 호스트에 명시적으로 나열되지 않은 모든 IP 주소와 일치하는 경우 특수 이름을 지정할 수 있습니다. 가상 호스트 가 없는 경우 _default_IP 일치가 발생하지 않으면 VirtualHost 섹션 외부의 모든 정의로 구성된 "기본" 서버 구성이 사용됩니다. (그러나 NameVirtualHost 지시문과 일치하는 IP 주소는 "기본" 서버 구성이나 _default_가상 호스트를 모두 사용하지 않습니다. 자세한 내용은 이름 기반 가상 호스팅 설명서를 참조하세요.)

따라서 이러한 모든 것 후에는 IP 기반과 이름 기반 가상 호스팅을 혼합하는 것이 혼란스러울 수 있다는 것이 매우 "명확해졌습니다". Apache 2.2에서는 이름 기반 가상 호스팅이 사용된 경우에만 사용되었습니다 NameVirtualhost <something>.

하지만새로운 것과 함께아파치 2.4버전이런 것들은 정말 이해하기 쉽고, NameVirtualhost선언도 없습니다.NameVirtualHost 지시문은 경고를 내보내는 것 외에는 더 이상 효과가 없습니다. 여러 가상 호스트에 나타나는 모든 주소/포트 조합은 암시적으로 이름 기반 가상 호스트로 처리됩니다.. 더 이상 복잡하지 않으며 문서도 이제 더 간단해졌습니다.

  • 와일드카드 역할을 하며 모든 IP 주소와 일치하는 문자 *입니다.
  • _default_*의 별칭인 문자열

따라서 Apache 2.4의 대답은 다음과 같습니다.그건 같은거야.

답변2

_default_모든 포트에 대한 가상 호스트

지정되지 않은 IP 주소 및 포트, 즉 다른 가상 호스트에 사용되지 않는 주소/포트 조합에 대한 모든 요청을 포착합니다.

http://httpd.apache.org/docs/2.2/vhosts/examples.html#default

관련 정보