Apache에서 일치하지 않는 도메인 / 하위 도메인에 대한 기본 처리


12

여러 VirtualHosts가있는 Apache2 구성이 있습니다. 내 DNS가 *.<domain>.<tld>여러 도메인 에서 허용 되도록 설정되어 있습니다. 모든 것이 올바르게 작동하지만 내가 가면 something-random-here.example.com유효하지 않은 VirtualHost가 선택되는 것 같습니다 (처음 찾거나 마지막 것으로 추측합니다). VirtualHost 항목이 도메인 또는 하위 도메인과 일치하지 않는 경우 Apache에 특정 규칙을 사용하도록 지시하는 방법이 있습니까? 404를 반환하고 싶습니다.

답변:


12

이름이 일치하지 않으면 Apache는 첫 번째 가상 호스트를 사용합니다. 임의의 이름으로 새 가상 호스트를 첫 번째 가상 호스트로 구성하기 만하면 원하는대로 표시하거나 404 페이지를 반환 할 수 있습니다.


고맙지 만 정교하게 부탁드립니다. 나는 이것을 작동시킬 수 없다.
Ryall

2
apache2 구성 파일은 어떻게 배치되어 있습니까? 아니면 어떤 운영 체제를 사용하십니까? Apache는 특정 순서로 구성을 읽으며 가장 먼저 보이는 VirtualHost가 기본 구성입니다. 알 수없는 호스트 이름에서 모든 트래픽을받습니다. 따라서 단일 구성 파일이있는 경우 첫 번째 VirtualHost가 해당 파일입니다. 대부분의 리눅스에서와 같이 여러 개의 것을 가지고 있다면 0default 정도의 이름 일 수 있습니다.
Moritz Both

에 기본 구성을 넣었습니다 ports.conf. 가상 호스트에서 <ip> : 80을 사용할 때 * : 80을 일치 시키려고 시도했지만 작동하지 않았습니다. 대신 각 IP에 대해 별도의 기본 항목을 만들어야했고 지금 작동합니다.
Ryall

첫 번째 또는 마지막 v-host 파일이 사용되지 않습니다. 아파치가 바뀌 었다고 생각합니다.
Cobolt 2016 년

4

와일드 카드에는 사이트 구성 파일이 포함됩니다.

Include path/to/site/confs/*httpd.conf

사이트 conf 파일을 구성하여 예상 순서대로로드하십시오. 예...

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

기타...

아파치는 이것을 순서대로 읽습니다. 그런 다음 일치하지 않는 가상 호스트를 잡아서 기본 사이트를로드하는 대신 404를 반환하기 위해 항상 마지막에로드 할 호스트를 생성하십시오.

99-catchall-httpd.conf

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

httpd가 수신하는 포트로 포트를 교체하십시오. 또는 특정 인터페이스에서 httpd를 듣는 경우 대신 다음과 같이 각 인터페이스에 대해 catchall을 추가해야합니다.

<VirtualHost 192.168.1.101:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

도움이 되었기를 바랍니다. 이 방법을 사용하여 지정한 순서대로 사이트를로드하고 일치하지 않는 가상 호스트가 예기치 않은 사이트를 실수로로드하지 못하게합니다.


모든 규칙에서 "ServerAlias ​​*"를 제거하지 않아야합니까?
Ahm3d

나는 그것이 중요하지 않을 것이라고 생각합니다. catchall 이전의 가상 호스트가 요청을 처리하지 않으면 404 응답을 반환합니다. ServerAlias ​​*를 제거해야하는 이유는 보이지 않지만 불필요하게 구체적 일 수 있습니다.
Jason Slobotski 19

0

Moritz Both언급 했듯이 Apache2는 사용자가 요청한 것과 일치하지 않으면 찾은 첫 번째 가상 호스트를 사용합니다.

Apache2를 처음 설치할 때 템플릿으로 사용하거나 수정 또는 삭제할 수있는 기본 웹 사이트 conf가 있으며 000-default.conf가 default.conf도 있었기 때문에 실제로 무엇을 원했는지 궁금했습니다. Moritz Both말한 내용을 읽은 후에 는 이제 모든 것이 더 의미가 있습니다.

서버에서 수행 한 작업은 기본 호스트 이름 (웹 사이트)의 구성을 000-default.conf 파일 및에 복사하는 것 a2ensite 000-default입니다.

이제 내 웹 사이트에 대한 도메인 요청이 일치하지 않을 때마다 실제 기본 페이지의 복사 본인 000- 기본 페이지를 제공합니다.


1
나는 동일하지만 일치하지 않는 / 기본 호스트는 표시된 최상위 URL로 올바른 최상위 사이트로 리디렉션을 보냅니다.
Ivanivan

정말 좋은 생각입니다! 나는 그것에 대해 생각하지 않았다. 나는 확실히 내 사이트를 다음과 같이 구현할 것입니다 :)
Newteq Developer

어떤 이유로 든 내 SSL (기본 페이지)을 리디렉션 할 수없는 것 같습니다. 나는 가지고 <VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> 있지만 URL은 동일하게 유지됩니다. 비 SSL 버전에 대해서도 동일한 작업을 수행했으며 올바르게 리디렉션되었습니다. 어떤 아이디어?
Newteq Developer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.