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

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

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 년이 넘었지만 비슷한 “문제”를 우연히 발견했습니다. 이것은 명백 할 수도 있지만 추가 가상 호스트를 활성화 한 후 아파치 서비스를 다시 시작하는 것을 잊지 마십시오. 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)를로드합니다.


답변

포트 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>

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


답변

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

NameVirtualHost 192.168.100.20:80
<VirtualHost 192.168.100.20:80>

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


답변

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

노트

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

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


답변

나는 여기에서 대답을 찾습니다 : 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 태그 블록이 있었기 때문에 두 번째 사이트에 문제가 발생했습니다.


답변

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

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

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

sudo a2enmod ssl

답변

이 문제의 원인은 서버의 외부 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 주소를 추가하지 않았는지 확인하십시오! 가혹한 짓을 한 이상한 일이지만 다른 사람에게 도움이되기를 바랍니다.