
차이점을 알고 싶습니다."기본:*" 그리고 "*:*"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에서는 ServerName
VirtualHost의 지시문이 사용되지 않으며 중요한 정보는 수신 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