설계 상 apache2에서 알 수없는 호스트에 대한 http 요청은 처음로드 된 VirtualHost로 보내집니다. 이 기능을 비활성화하는 방법이 있습니까? 다르게 말하면, 사용자가 명시 적으로 명명 된 VirtualHost 정의에만 도달 할 수있는 웹 서버를 갖고 싶습니다. ServerName 또는 ServerAlias 행에 명시 적으로 언급되지 않은 다른 호스트 이름은 자동으로 무시해야합니다.
이것이 가능한가?
Listen 80
NameVirtualHost *
<VirtualHost _default_:*>
# Anything matching this host should be silently ignored.
</VirtualHost>
<VirtualHost *>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>
<VirtualHost *>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>
업데이트 : 아래 및 다른 곳에서 제안한 것처럼 요청을 자동으로 무시하는 것은 좋은 생각이 아니며 HTTP의 RFC를 손상시킬 수 있습니다. 그러나 가상 호스트는 여러 개의 별도의 물리적 HTTP 서버가 있음을 시뮬레이트하도록 설계되었으므로 자동 무시 접근 방식은 나에게 적합하지 않습니다. IP 기반 가상 호스팅 및 일부 IP를 방화벽으로 차단하는 것과 동일합니다 (아마도 모든 클라이언트에 해당되지는 않음).
답변
“조용히 실패”가 좋은 아이디어인지 확실하지 않습니다. 당신은 클라이언트에게 적어도 줘야 일부 무슨 일이 있었는지의 표시. 아마도 http 410 “gone”오류를 보낼 수 있습니다. 이와 같은 것이 트릭을 수행해야합니다.
RewriteRule ^.*$ - [G]
또한 빈 html 페이지 일 수있는 사용자 정의 410 오류 문서를 지정할 수 있어야합니다.
답변
다시 쓰기 규칙을 포함하지 않는 다른 방법은 다음과 같습니다.
<VirtualHost _default_:*>
<Location />
Deny from all
Options None
ErrorDocument 403 Forbidden.
</Location>
</VirtualHost>
답변
이것은 나를 위해 일했다
<VirtualHost x.x.x.x:80 [x:x::x:x:x:x]:80>
ServerName myactualservername.com
ServerAlias *
<Location />
Deny from all
Options None
ErrorDocument 403 Forbidden.
</Location>
</VirtualHost>
xxxx를 실제 ipv4로 바꾸고 ipv6을
myactualservername.com을 기계가 제공하는 실제 웹 사이트로 바꾸십시오.
이름 기반 가상 호스트를 사용하고 있습니다.
이 솔루션에 대한 크레딧은 https://serverfault.com/a/82309/459796 로 이동
하십시오.