Ubuntu 12.04를 사용하여“이름 기반”가상 호스트를 어떻게 설정합니까?


7

Ubuntu 12.04를 사용하여“이름 기반”가상 호스트를 어떻게 설정합니까?

https://help.ubuntu.com/12.04/serverguide/httpd.html#http-configuration에 제공된 지침을 따랐습니다 .

나는 다음을 수행했다 ...

  1. cp default newsite
  2. newsite에서 "/ var / www"를 "/ var / www / newsite"로 교체
  3. “ServerName newsite.example.com”을 newsite에 추가하십시오

조사한 결과을 사용하여 기본 사이트를 비활성화해야한다는 블로그 항목이 발견되었습니다 a2dissite default. 내가 그렇게 한 후에 효과가있었습니다. 그 맞습니까? 이것은 Ubuntu 서버 안내서에서 언급되지 않았습니다. 가이드는 또한이 라인을 포함 ...

"기본 가상 호스트에는 ServerName 지시문이 지정되어 있지 않으므로 다른 가상 호스트의 ServerName 지시문과 일치하지 않는 모든 요청에 ​​응답합니다."

기본 사이트와 다른 사이트가 공존 할 수 있음을 의미하는 것 같습니다.

12.04 Server를 새로 설치하고 조정할 때마다 아파치 구성을 다시로드했습니다.

요약하면 ... / etc / apache2 / sites-available (ServerName 지시문이 추가 된 "기본"파일의 변경된 사본) 아래에 새 파일을 추가하고 / etc / apache2 / sites-enabled 아래의 해당 심볼릭 링크는 다음과 같습니다. 새 사이트가 작동하려면 기본 사이트 심볼릭 링크를 비활성화하거나 이름을 바꿔야합니까? 아래의 문서와 하나의 대답은 그렇게 할 필요가 없다고 추측하는 것 같습니다. 그렇다면 내가 잘못한 것은 무엇입니까? newsite.example.com에 액세스하려고 할 때 아래 구성을 사용하여 기본 사이트를 얻습니다.

/ etc / apache2 / sites-available $ 고양이 기본값

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

/ etc / apache2 / sites-available $ cat newsite

<VirtualHost *:80>

        DocumentRoot /var/www/newsite
        ServerName newsite.example.com
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/newsite/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

/ etc / apache2 / sites-enabled # ls -l

root@sandbox:/etc/apache2/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 26 Mar 18 09:56 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root 26 Mar  7 13:36 newsite -> ../sites-available/newsite

아래에있는 내용을 표시하고 있기 때문에 아래에있는 sites-available내용이 명확하지 않습니다 sites-enabled. 아파치가 실제로로드 하는 cat파일 sites-enabled이므로 파일을 제안 합니다.
arielf

@arielf 마지막 편집을 참조하십시오
Corey

이것에 대해 매우 혼란스러워 새로 설치하여 VM을 설정하고 동일한 단계를 수행했으며 정상적으로 작동했습니다. 구성 파일이 일치하는 것을 볼 수 있지만 동작은 일치하지 않습니다.
Corey

새 사이트 파일 / 섹션에 ServerName이 있지만 기본 사이트가 없으므로 ServerName 과 일치 합니다 . 그리고 기본값이 1로로드되기 때문에 ( 'd'는 'n'앞에옵니다) 승리합니다. 지금 더 명확 해?
arielf

나는 그것이 옳지 않다고 생각합니다.
Corey

답변:


5

이것은 우분투 질문보다 아파치 구성 질문입니다.

예, 하나의 호스트에서 여러 개의 가상 서버를 실행할 수 있습니다. 각 호스트는 (예 : DNS를 통해) 동일한 서버에 매핑되는 경우 각각 별도의 콘텐츠를 제공합니다.

가상 서버를 만드는 방법에 대한 공식 문서 (버전 2.2이지만이 기능은 버전간에 근본적으로 변경되지 않았습니다)는 다음에서 찾을 수 있습니다.

httpd.apache.org/docs/2.2/vhosts/

짧은 대답은 다음과 같습니다.

  • 가상 호스트를 정의하십시오
  • 호스트 이름과 그들이 제공하는 컨텐츠 사이의 매핑을 포함

예를 들어 / etc / apache2 / sites-available / 000-add-my-virtual-hosts 아래에서 가상 호스트 절을 일부 아파치 구성 파일에 추가 하면됩니다.

NameVirtualHost *:80

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

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

필요한 사이트가 이미 후자에 있지만 전자가 아닌 경우 / etc / apache2 / sites-enabled / 에서 / etc / apache2 / sites-available 로의 링크를 추가해야 할 수도 있습니다 .

편집 1 : a2dissite 설명서
페이지를 읽은 후에는 / etc / apache2 / sites-enabled / 에서 심볼릭 링크를 제거하는 것이 분명합니다. 핵심은이러한 구성이 처리되는 순서 가 최종 결과에 영향을 줄 수있음을 이해하는것입니다. 먼저로드하기 위해기본 사이트를 000-default 라고합니다. 모든 사이트와 일치하는 경우, 즉 '다른 것'와일드 카드 역할을하는 경우 다른 사이트는 표시되지 않습니다. 링크의 이름을 999-default 와 같이 더 높은 숫자로 바꾸어마지막에로드되도록하십시오 (다른 사이트가 일치 한 후).

편집 2 : 업데이트 된 질문 : 예, 구성 파일 이름이 '000'으로 시작하여 와일드 카드 일치로 인해 먼저로드되고 '인계'되므로 기본 사이트의 이름을 바꾸거나 삭제해야합니다. 이 시점에서 문서를 개선 할 수 있다고 생각합니다.

편집 3 : 서버 이름이 나타나는 순서, 중요성 및 그 이상은이 아파치 페이지 이름 기반 vhost 섹션에 설명되어 있습니다. 관련 문장 중 하나는 다음과 같습니다.

The first vhost on this list (the first vhost in the config file with the
specified IP address) has the highest priority and catches any request to
an unknown server name or a request without a Host: header field.

나중에 관찰에서 :

... the ordering of name-based vhosts for a specific address set is significant.
The one name-based vhosts that comes first in the configuration file has the
highest priority for its corresponding address set.

3
내 질문은 우분투 기반 서버에만 해당됩니다. 공식 우분투 가이드를 따른 후, 이름 기반 가상 호스트를 실행할 수 없었습니다. 기본 사이트 만 표시되었습니다. 새 사이트가 작동하려면 기본 사이트를 순서대로 비활성화해야합니다. 그것은 가이드에서 언급되지 않았습니다. 가이드에 결함이 있거나 물러나있는 것처럼 보이지만, 확인하거나 수정 할 사람을 찾고 있습니다.
Corey

그래서 우분투 가이드가 약간의 발걸음
Corey

@Corey 웹 사이트의 지침에 아무런 문제가 없습니다. 이와 같은 일반적인 작업을 수행 할 때 가장 좋은 방법은 문서 페이지로 시작하는 대신 "ubuntu apache virtual host"와 같은 Google을 검색하는 것입니다.
David

@David 나는 질문을 업데이트하고 나의 진정한 질문을 해결하기 위해 요약을 추가했습니다
Corey

@David 세 번째 편집에서 첫 번째 인용문은 새 호스트 파일에 ServerName 지시문이 포함 된 경우 기본 호스트 파일의 파일 이름을 삭제하거나 변경할 필요가 없다는 사실을 지원하는 것으로 보입니다. 새 사이트 구성에는 "ServerName newsite.example.com"지시문이 포함되어 있으므로 해당 웹 사이트에 대한 요청에 응답해야합니다.
Corey

2

이것이 왜 자주 광택이 나는지 모르겠지만 사이트 conf 파일의 중요한 키워드는 "ServerAlias"입니다. 여기에 해당 세트가있는 conf 파일의 예가 있습니다.

NameVirtualHost *:80

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

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>

2

데비안 기반 시스템의 경우 우분투를 사용하여 아파치를 호스팅하는 호스트 정의 웹 사이트의 정의는

/etc/apache2/sites-enabled/*.conf

여기서 * conf는

internal1.conf internal2.conf internal3.conf internal4.conf

각 사이트의 가상 호스트 정의는 다음과 같습니다.

/etc/apache2/sites-enabled/internal1.example.conf

당신이 말할 때

The default virtual host has no ServerName directive specified, so it will 

다른 가상 호스트의 ServerName 지시문과 일치하지 않는 모든 요청에 ​​응답합니다.

그것의 의미는

아파치가 많은 vhost에서 웹 사이트를 제공 할 때 파일 이름을 알파벳 순서로 읽습니다. 왜냐하면 언급 한 기본 파일의 수가 000-default이므로 호스트 이름 지정이 실제로 중요하기 때문입니다.

/ etc / apache2 / sites-enabled /에서 알파벳 순서로 호스트 파일을 읽는 경우

사이트 활성화 디렉토리에서 필요한 구성 파일을 찾지 못합니다
(apache2)는 알파벳순으로 첫 번째 vhost 파일을 제공하므로 항상 기본 000-default 파일을 비워 두거나 오류 페이지를 가리 키는 것이 좋습니다. 결핍, 필요

이제 internal1.example.com에 대해 다음과 같이 구성 할 수 있습니다.

<virtualhost *:80>

    ServerAdmin webmaster@yoursite
    DocumentRoot /var/www/yoursite <--this is an important place should be there
    ServerName yourservername
    ServerAlias www.mydomain.com  <-- if you do not need this do not put it
    ErrorLog /var/logs/apache2/yoursite/error_log  <--logs can be customized 
    CustomLog /var/logs/apache2/yoursite/access_log common
</VirtualHost>

위의 예와 같이 internal2.example.conf, internal3.example.conf를 만들 수 있으므로 설정에서 필요하지 않은 경우 태그에 다른 줄이 필요하지 않습니다.이 링크를 볼 수 있습니다 http : / /www.debian-administration.org/articles/18


1

David의 게시물에 추가하기 위해 Ubuntu를 실행하지는 않지만 Apache를 실행 중이며 전체 www.domain.com을 사용하여 사이트에 액세스 할 수 있지만 www없이 사용하면 처음으로 사용됩니다. 정의 된 사이트 (기본값) www가 @ (호스트 이름)으로 설정되어 있으므로 DNS가 올바르게 설정되어 있습니다.

따라서 ServerAlias ​​지시문을 추가하여 문제를 해결했습니다. 나는 여전히 문서를 검토하고 있으므로 다른 방법으로 해결할 수도 있습니다.

내 설정 파일은 (부분적으로)

ServerName www.domain.com

ServerAlias ​​줄 추가로 변경했을 때 :

ServerName domain.com ServerAlias ​​www.domain.com

문제를 해결했습니다. David의 구성 옵션을 테스트하고 * .domain.com 만 사용하여 ftp.domain.com 또는 smtp.domain.com과 같은 기능을 사용할 계획입니다.


0

Core

아파치 구성 파일을 다루는 것처럼 들립니다. 또한 설명서를 어디에서 찾아야하는지 알고 있습니다. a2ensite 유틸리티 사용에 대한 확신이 제대로 이해되지 않으면 a2ensite매뉴얼 페이지에 따르면 :

a2ensite는 apache2 구성 내에서 지정된 사이트 (블록 포함)를 활성화하는 스크립트로, / etc / apache2 / sites-enabled 내에 심볼릭 링크를 만들어이를 수행합니다. 마찬가지로 a2dissite는 해당 심볼릭 링크를 제거하여 사이트를 비활성화합니다. 이미 활성화 된 사이트를 활성화하거나 이미 비활성화 된 사이트를 비활성화하는 것은 오류가 아닙니다

.

필요한 도움은 Apache 웹 사이트 에서 찾을 수 있습니다 . 매우 간결하고 건조한 문서이지만 자신을 숙지 할 가치가 있습니다.


질문을 업데이트하고 내 실제 질문을 정리하기 위해 요약을 추가했습니다
Corey

0

글쎄, 나는이 문제가 있었고 다른 답변이 제안한 것을했다. 내 경우는 개발 환경에서 여러 프로젝트를 실행하고 여기에 설명대로 각 프로젝트에 액세스하고 싶다는 *.dev것입니다.

위의 답변을 보완하기 위해 저에게 문제 는 다음 조각을 foo.dev방해 bar.dev하고 추가하는 것이 해결되었습니다.

<VirtualHost foo.dev:80> #<---- you can filter the requests here
ServerName foo.dev
ServerAlias *.foo.dev
DocumentRoot /home/dev/foo
</VirtualHost>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.