Apache는 특정 사이트에 대한 ServerName 지시문을 존중하지 않습니다


9

한동안 잘 작동했던 Apache를 사용하여 VirtualHosts로 구성된 몇 개의 사이트가 있습니다. 최근에 서버의 호스트 이름을 서비스중인 도메인 이름 중 하나로 변경하고 서버의 외부 IP 주소를 가리키는 / etc / hosts에 추가했습니다.

그렇게 한 후 랩톱에서 도메인에 액세스하면 Apache의 기본 "작동합니다!"로 이동합니다. 페이지. / etc / apache2 / sites-enabled /에서 000-default를 제거하면 올바른 사이트가 표시됩니다. 'www'로 사이트에 액세스하려고합니다. prefix는 000-default가 사이트 사용 가능인지 여부에 관계없이 올바른 사이트로 이동합니다.

이 모든 것을 기반으로, 호스트 이름 또는 / etc / hosts (또는 둘 다)를 구성한 방법으로 인해 기본 구성이 기본 페이지를 제공한다고 생각하지만 그 동안 비활성화하는 방법을 알 수는 없습니다. 해당 설정을 그대로 둡니다. 어떤 제안이라도 환영합니다!

편집-내 현재 VirtualHost 구성은 다음과 같습니다.

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin me@domain.com

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

요약하면 : 여러 개의 VirtualHosts가 설정되어 있으며 이것이 제대로 작동하지 않는 유일한 호스트입니다. http://www.domain.com에 액세스 할 수는 있지만 http://domain.com 은 Apache의 기본 "작동합니다!"로 이동합니다. 페이지. 000-default 구성을 비활성화하면 올바른 페이지가 표시됩니다. 이것은 서버의 호스트 이름을 domain.com으로 설정하고 domain.com을 서버의 외부 IP 주소로 가리키는 / etc / hosts에 행을 추가 한 후에 시작되었습니다. 가능하면 그런 식으로 남겨두고 싶습니다.

편집 : 내가 달릴 apache2ctl -S이후 /usr/sbin/apache2 -S"잘못된 사용자 이름 $ {APACHE_RUN_USER} 아파치"내게 준. 출력은 다음과 같습니다.

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK

http..conf 파일에서 domain.com이 ServerName으로 사용됩니까? 또는 apache2ctl.conf 당신은 우분투를 사용하는 것 같아서 이름이 다를 수 있습니다.
Prix

답변:


12

다른 날이 질문을 잃어 버렸습니다.

ServerName 구성 요소가없는 <VirtualHost> 컨테이너가 있으면 기본 호스트 이름을 사용합니다. 000-default에는 아마도 ServerName 구성 요소가 없으며 알파벳순으로 포함되는 첫 번째 문자이므로 hostname.com에 대한 응답이며 명시 적으로 선언 된 호스트 이름이 작동하지 않습니다.


나는 그것을 고칠 방법이 있습니까? 기본 구성이 처리되지 않은 도메인을 처리하기를 원하지만 특정 도메인을 처리하기를 원하지 않습니다.
John Debs

구성에 사용되는 도메인 이외의 도메인을 제공하거나 마지막으로 호출되도록 zzz-default로 이름을 바꿉니다.
karmawhore

알았어, 이제 다 이해 했어 zzz-default를 시도했지만 원하는 정확한 동작이 아닙니다. ServerName example.com그러나 기본 구성에서 설정하면 효과적입니다. 감사!
John Debs

4

NameVirtualHost * : 80 지시어가 있습니까?

시험:

/usr/sbin/apache2 -S

아파치가 구성 파일을 구문 분석하는 방법을 알려줍니다. 실제 IP가 있거나 *가있는 구성이 있습니까? : 80이 누락 되었습니까? 아파치는 그것들을 섞는 것을 좋아하지 않습니다.

기본적으로 ServerName domain.com 또는 ServerAlias ​​domain.com이 있습니까?


예, /etc/apache2/posts.conf에 있습니다. 더 명확하게 질문에 요약을 추가하겠습니다.
John Debs

내 000-default 구성은 변경되지 않으며 ServerName 또는 ServerAlias ​​지시문이 없습니다.
John Debs

NameVirtualHost는 더 이상 사용되지 않습니다.
Sam


0

이것은 효과가 있었다 :

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
</VirtualHost>

오타가있을 때 작동하지 않았습니다 (ServerName 지시문이 두 번).

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerName www.mydomain.com
</VirtualHost>

ServerName 지시문을 두 번 사용하면 나열된 첫 번째 사이트 (여기에 표시되지 않음)로 계속 확인됩니다.

이것이 누군가를 돕기를 바랍니다 ...


0

비슷한 문제가 있었고 아파치가 자동으로 알아 내지 못하게하기보다는 기본 httpd.conf 파일에서 ServerName을 명시 적으로 설정하여 문제를 해결했습니다. 아파치가 결정한 것은 내 호스트 (나중에 정의 됨)와 동일하다고 가정하므로 기본 호스트는 "호스트"이며 호스트 설정을 재정의합니다.

방금 httpd.conf ServerName을 컴퓨터가 가진 호스트 이름으로 설정하면 웹 페이지를 제공하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.