Apache는 특정 사이트에 대한 ServerName 지시문을 존중하지 않습니다 액세스하면 Apache의 기본 “작동합니다!”로

한동안 잘 작동했던 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


답변

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

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


답변

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

시험:

/usr/sbin/apache2 -S

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

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


답변

VirtualHost 지시문에서 ServerName 및 ServerAlias를 확인하십시오.

<VirtualHost *:80>
ServerName domain
ServerAlias www.domain.com
ServerAlias *.domain.com
</VirtualHost>

읽기 : http://httpd.apache.org/docs/2.2/mod/core.html#serveralias , http://httpd.apache.org/docs/2.2/vhosts/


답변

이것은 효과가 있었다 :

<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 지시문을 두 번 사용하면 나열된 첫 번째 사이트 (여기에 표시되지 않음)로 계속 확인됩니다.

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


답변

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

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