Apache가 요청 된 URL과 일치하는 ServerName을 가진 가상 호스트를 무시할 수있는 이유는 무엇입니까?


26

아파치 구성에 두 번째 가상 호스트를 추가하려고하는데 새 가상 호스트를 사용할 수없는 것 같습니다.

httpd.conf방금 다음 줄이 포함되어 있습니다.

ServerName radiofreebrighton.org.uk

또한 ports.conf다음을 포함 하는 파일이 있습니다.

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

sites-availablesites-enabled의해 심볼릭 링크 된 두 개의 파일 이 있습니다 a2ensite.

  • radiofreebrighton.org.uk
  • trafalgararches.co.uk

첫 번째 내용은 다음과 같습니다.

<VirtualHost _default_:80>
    DocumentRoot /home/tom/www

    ServerAdmin tom@radiofreebrighton.org.uk
    ServerName radiofreebrighton.org.uk
    ServerAlias www.radiofreebrighton.org.uk

    <Directory /home/tom/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    LogLevel error
    CustomLog /var/log/apache2/access.log combined

    Alias /wiki /home/tom/www/mediawiki/index.php
</VirtualHost>

후자의 내용은 다음과 같습니다.

<VirtualHost *:80>
    DocumentRoot /home/tom/tata-www

    ServerAdmin admin@trafalgararches.co.uk
    ServerName trafalgararches.co.uk
    ServerAlias www.trafalgararches.co.uk

    <Directory /home/tom/tata-www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    logLevel error
    ErrorLog /var/log/apache2/error.log
</VirtualHost>

그러나 trafalgararches.co.uk에서 페이지를 요청할 때마다 radiofreebrighton.org.uk에서 페이지가 제공됩니다. 왜 이런 일이 일어날 수 있습니까? 어떻게 고칠 수 있습니까?


편집하다:

아파치가 이해하는 가상 호스트 구성 :

tom@rfb:/usr/local$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost trafalgararches.co.uk (/etc/apache2/sites-enabled/trafalgararches.co.uk:1)
Syntax OK

( apache2ctl -S일명을 통해 수집 httpd -S)


1
이것이 원인인지 확실하지 않지만 ServerName, ServerAlias줄 끝에서 슬래시를 제거해야합니다 . 또한 아파치를 다시 시작했는지 확인하십시오.
EEAA

그게 원인이라고 거의 긍정적입니다. 요청의 호스트 이름이 해당 가상 호스트의 ServerName과 절대 일치하지 않음을 의미합니다.
larsks

1
@ErikA, @larsks-너희들은 내 희망을 얻었다! 나는 슬래시를 제거하고 아파치를 다시 시작했지만 아무것도 변경하지 않았습니다.
Tom Wright

1
당신이 있습니까 NameVirtualHost *:80구성 어딘가?
larsks

1
위에서 언급 한 사이트가 프로덕션 또는 개발인지 확실하지 않지만 실제로 해당 URL로 이동하면 두 가지 다른 페이지가 표시됩니다 (외형에 따라 올바른 페이지). 위의 호스트가 개발 서버에있는 경우이 주석을 무시하십시오. 그렇지 않으면 도중에 문제가 해결되어 캐시 된 사본이 여전히 남아있을 수 있습니다.
cyberx86

답변:


15

글쎄,이 질문은 1 년이 넘었지만 비슷한 "문제"를 우연히 발견했습니다. 이것은 명백 할 수도 있지만 추가 가상 호스트를 활성화 한 후 아파치 서비스를 다시 시작하는 것을 잊지 마십시오. a2ensite두 번째 가상 호스트를 실행 한 후에 apache2ctl -S는 아파치를 다시로드하지 않더라도 두 개의 사이트를 모두 사용할 수 있으며 두 사이트 중 하나가 기본 사이트 라는 결과가 출력 됩니다.

site1과 site2라는 두 개의 가상 호스트가 있다고 가정합니다. a2ensite site1아파치 서비스를 실행 한 다음 다시로드합니다. 이제 액세스 할 수 http://site1있으며 기본값입니다. 이제 당신은 실행 a2ensite site2하지만 아파치를 다시 시작하는 것을 잊지 마십시오. 출력 apache2ctl -S은 다음과 같습니다.

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site2 (/etc/apache2/sites-enabled/site2:1)
Syntax OK

그러나 load을 시도 http://site2하면 구성이로드되지 않기 때문에 실제로 기본 사이트 (site1)를로드합니다.


나는 동일한 출력을 얻지 만 두 번째 웹 사이트를로드하지 않습니다.
arqam

15

포트 443 (SSL / HTTPS)의 추가 가상 호스트가 모두 나열된 첫 번째 가상 호스트의 디렉토리로 연결되는 것과 비슷한 문제가있었습니다. 아파치는 본질적으로 servername 속성을 무시하고 ip : port에서만 일치합니다.

포트 443에 대해 명명 된 가상 호스팅을 활성화하는 'NameVirtualHost * : 443'명령이 누락 된 것으로 나타났습니다.

'NameVirtualHost * : 443'은 한 번만 호출하면되며 포트 443에 대해 가상 호스트 위에 정의되어야합니다.

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

변경 후 아파치를 다시 시작하는 것을 잊지 마십시오.


1
가치가있는 것은 ... Apache 2.4.18에서 다음을 사용 NameVirtualHost하면 시작 AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf
시이

4

내 2 센트 : IP를 고수해야하기 때문에 (설치 된 모든 네트워크에서 사이트를 제공하고 싶지는 않습니다) 서버의 로컬 개인 IP가 변경된 후 여기에서 변경하는 것을 잊었습니다.

NameVirtualHost 192.168.100.20:80 <VirtualHost 192.168.100.20:80>

물론 IP가 로컬에 존재하지 않는다는 것을 아는 것은 아파치 문제가 아닙니다.


2

톰, 여기를 참조하십시오 http://httpd.apache.org/docs/2.0/en/mod/core.html#namevirtualhost

노트

참고 "메인 서버"어떤 것을 기본 서버가됩니다 결코제공되지 NameVirtualHost에서 IP 주소로 요청 (어떤 이유로 당신이 다음 NameVirtualHost에서는 지정하지 않는 한 해당 주소의 어떤에서 VirtualHost를 정의하지 않습니다).

따라서 기본값 을 서버의 ip-adress로 변경해도 괜찮습니다 .


나는 그것을 시도했지만 아무것도 변경하지 않았다. 또한 특정 IP에 자신을 묶지 않기를 원하므로 다시 변경하겠습니다. 또한 기본 호스트가 작동하는 호스트임을 지적해야합니다.
Tom Wright

1

나는 여기에서 대답을 찾습니다 : http://alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host

아래와 같이 1 개의 VirtualHost 태그에 2 개의 서버 이름을 입력하십시오.

<VirtualHost *:80>
ServerName beta-site-1.com
DocumentRoot "/Library/WebServer/beta-site-1"

ServerName beta-site-2.com
DocumentRoot "/Library/WebServer/beta-site-2"
</VirtualHost>

두 개의 VirtualHost 태그 블록이 있었기 때문에 두 번째 사이트에 문제가 발생했습니다.


0

사이트를 새로운 Ubuntu 16 서버로 마이그레이션하는 데이 문제가 발생했습니다. 약간의 헤드 스크래칭 후 SSL 모듈이 기본적으로 활성화되어 있지 않다는 것을 알았으므로 <IfModule mod_ssl.c>블록 내부의 모든 내용 은 자동으로 무시됩니다.

몇 년 전이 조건에 따라 모든 SSL 가상 호스트를 래핑했으며 이번에는 구성 파일을 새 서버로 복사했습니다.

모듈을 활성화하여 수정했습니다.

sudo a2enmod ssl

0

이 문제의 원인은 서버의 외부 IP를 가리키는 URL이있는 서버의 / etc / hosts 항목이라는 것을 알았습니다.

어느 시점에서 DNS가 준비되기 전에 설정해야 했으므로 서버에서 자체 외부 IP를 가리키는 / etc / hosts 항목을 입력했습니다.

1.2.3.4 vhost.example.com

그런 다음 "vhost.example.com"에 대한 기존 사이트에 ServerAlias를 설정했습니다.

그러나 내가 할 수있는 일은 Apache가 vhost.example.com에 대한 SSL 요청에 대한 default-ssl.conf 사이트를 제공하는 것을 막을 수는 없습니다. 포트 80 HTTP는 정상적으로 작동했지만 SSL은 항상 기본 사이트를 대신 표시했습니다. 결국이 SO 스레드로 인해 사이트를 보여주는 "apachectl -S"를 사용해 보았고 마침내 그것을 알아낼 수있었습니다.

따라서 원하는 사이트 대신 기본 SSL 사이트를 얻는다면 / etc / hosts 항목에 서버의 외부 IP 주소를 추가하지 않았는지 확인하십시오! 가혹한 짓을 한 이상한 일이지만 다른 사람에게 도움이되기를 바랍니다.

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