mirror of
https://github.com/apache/httpd.git
synced 2025-06-04 21:42:15 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@103107 13f79535-47bb-0310-9956-ffa450edef68
252 lines
9.7 KiB
XML
252 lines
9.7 KiB
XML
<?xml version='1.0' encoding='EUC-KR' ?>
|
|
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
|
|
<!-- English Revision: 1.8 (outdated: 1.14) -->
|
|
|
|
<!--
|
|
Copyright 2003-2004 The Apache Software Foundation
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<manualpage metafile="name-based.xml.meta">
|
|
<parentdocument href="./">가상호스트</parentdocument>
|
|
<title>이름기반 가상호스트 지원</title>
|
|
|
|
<summary>
|
|
|
|
<p>이 문서는 이름기반 가상호스트를 사용하는 경우와 방법을
|
|
설명한다.</p>
|
|
|
|
</summary>
|
|
|
|
<seealso><a href="ip-based.html">IP기반 가상호스트 지원</a></seealso>
|
|
<seealso><a href="details.html">가상호스트 찾기에 대한 자세한 설명</a></seealso>
|
|
<seealso><a href="mass.html">대량의 가상호스트를 동적으로 설정하기</a></seealso>
|
|
<seealso><a href="examples.html">일반적인 가상호스트 예</a></seealso>
|
|
<seealso><a href="examples.html#serverpath">ServerPath 설정 예</a></seealso>
|
|
|
|
<section id="namevip"><title>이름기반 대 IP기반 가상호스트</title>
|
|
|
|
<p>IP기반 가상호스트는 연결한 IP 주소를 가지고 서비스할
|
|
가상호스트를 결정한다. 그래서 각 호스트는 서로 다른 IP 주소를
|
|
가져야 한다. 이름기반 가상호스트의 경우 서버는 클라이언트가
|
|
HTTP 헤더로 호스트명을 알려주길 바란다. 이런 방법으로 한
|
|
IP 주소로 여러 다른 호스트를 서비스할 수 있다.</p>
|
|
|
|
<p>이름기반 가상호스트는 DNS 서버가 각 호스트명이 올바른
|
|
IP 주소로 대응하도록 가상호스트를 설정하고, 다른 호스트명을 구별할
|
|
수 있도록 아파치 웹서버를 설정하기만 하면되므로 더 간단하다. 이름기반
|
|
가상호스트는 또 여러 IP 주소가 필요없다. 그러므로 특별히
|
|
IP기반 가상호스트를 선택할 이유가 없다면 이름기반 가상호스트를
|
|
사용해야 한다. IP기반 가상호스트를 사용해야할 이유로는:</p>
|
|
|
|
<ul>
|
|
<li>이름기반 가상호스트를 지원하지않는 오래된
|
|
클라이언트들이 있다. 이름기반 가상호스트를 사용하려면
|
|
클라이언트가 HTTP Host 헤더를 보내야 한다. 이는
|
|
HTTP/1.1에서는 필수이고, 최근 모든 HTTP/1.0 브라우저들도
|
|
확장으로 지원한다. 만약 이름기반 가상호스트를 사용하면서
|
|
오래된 클라이언트를 지원해야 한다면 이 문서 끝에 있는
|
|
방법을 살펴봐라.</li>
|
|
|
|
<li>SSL 프로토콜의 성격상 SSL 보안서버에서 이름기반
|
|
가상호스트를 사용할 수 없다.</li>
|
|
|
|
<li>어떤 운영체제나 네트웍 장치는 다른 IP 주소를 사용하지
|
|
않으면 호스트를 구별하지 못하는 네트웍 사용량(bandwidth)
|
|
관리기술을 사용한다.</li>
|
|
</ul>
|
|
|
|
</section>
|
|
|
|
<section id="using"><title>이름기반 가상호스트 사용하기</title>
|
|
|
|
<related>
|
|
<modulelist>
|
|
<module>core</module>
|
|
</modulelist>
|
|
|
|
<directivelist>
|
|
<directive module="core">DocumentRoot</directive>
|
|
<directive module="core">NameVirtualHost</directive>
|
|
<directive module="core">ServerAlias</directive>
|
|
<directive module="core">ServerName</directive>
|
|
<directive module="core">ServerPath</directive>
|
|
<directive module="core">VirtualHost</directive>
|
|
</directivelist>
|
|
</related>
|
|
|
|
<p>이름기반 가상호스트를 사용하려면 서버는 연결을 받을
|
|
IP 주소를 (아마 포트도) 정해야 한다. 이는 <directive
|
|
module="core">NameVirtualHost</directive> 지시어로 가능하다.
|
|
일반적으로 서버의 모든 IP 주소를 사용한다면
|
|
<code>NameVirtualHost</code>의 아규먼트로 <code>*</code>를
|
|
사용한다. <code>NameVirtualHost</code> 지시어에 IP 주소를
|
|
적어주었다고 서버가 자동으로 그 IP 주소를 기다리지 않음을
|
|
주의하라. 자세한 내용은 <a href="../bind.html">아파치가
|
|
사용할 주소와 포트 설정하기</a>를 참고하라. 또, 여기서
|
|
지정한 IP 주소는 서버의 네트웍 인터페이스이어야 한다.</p>
|
|
|
|
<p>다음 단계는 서비스하려는 호스트별로 <directive
|
|
type="section" module="core">VirtualHost</directive> 블록을
|
|
만드는 일이다. <code><VirtualHost></code> 지시어의
|
|
아규먼트는 <code>NameVirtualHost</code> 지시어의 아규먼트(예를
|
|
들어, IP 주소나 모든 주소를 뜻하는 <code>*</code>)와
|
|
같아야 한다. <code><VirtualHost></code> 블록 안에는
|
|
최소한 서비스할 호스트를 지정하는 <directive
|
|
module="core">ServerName</directive> 지시어와 호스트의
|
|
내용이 파일시스템 어디에 있는지를 지정하는 <directive
|
|
module="core">DocumentRoot</directive> 지시어가 필요하다.</p>
|
|
|
|
<note><title>주 호스트가 없어진다</title>
|
|
기존에 사용하던 웹서버에 가상호스트를 추가한다면 기존에
|
|
사용하던 호스트에 대한 <VirtualHost> 블록도 추가해야
|
|
한다. 이 블록에 포함하는 <code>ServerName</code>과
|
|
<code>DocumentRoot</code>는 전체 <code>ServerName</code>과
|
|
<code>DocumentRoot</code>와 같아야 한다. 설정파일에서 이
|
|
가상호스트를 가장 먼저 적으면 기본 호스트가 된다.
|
|
</note>
|
|
|
|
<p>예를 들어 <code>www.domain.tld</code> 도메인을 서비스하고
|
|
있었는데 같은 IP 주소에
|
|
<code>www.otherdomain.tld</code>란 가상호스트를 추가하고
|
|
싶다고 가정하자. <code>httpd.conf</code>에 다음과 같이
|
|
추가하면 된다:</p>
|
|
|
|
<example>
|
|
NameVirtualHost *<br />
|
|
<br />
|
|
<VirtualHost *><br />
|
|
<indent>
|
|
ServerName www.domain.tld<br />
|
|
ServerAlias domain.tld *.domain.tld<br />
|
|
DocumentRoot /www/domain<br />
|
|
</indent>
|
|
</VirtualHost><br />
|
|
<br />
|
|
<VirtualHost *><br />
|
|
<indent>ServerName www.otherdomain.tld<br />
|
|
DocumentRoot /www/otherdomain<br />
|
|
</indent>
|
|
</VirtualHost><br />
|
|
</example>
|
|
|
|
<p><code>NameVirtualHost</code>와
|
|
<code><VirtualHost></code> 지시어 둘 모두 * 대신
|
|
직접 IP 주소를 지정할 수도 있다. 예를 들어, 이런식으로 한
|
|
IP 주소에 여러 이름기반 가상호스트들을 돌리고, 다른 주소에
|
|
IP기반 혹은 이름기반 가상호스트들을 돌릴 수 있다.</p>
|
|
|
|
<p>어떤 서버는 여러 이름으로 접속할 수 있길 바란다. 이는
|
|
<VirtualHost> 섹션 안에 <directive
|
|
module="core">ServerAlias</directive> 지시어를 사용하여
|
|
가능하다. 예를 들어 위의 첫번째 <VirtualHost> 블록에서
|
|
<directive module="core">ServerAlias</directive> 지시어를 사용하면
|
|
열거한 이름으로 같은 웹사이트를 볼 수 있다:</p>
|
|
|
|
<example>
|
|
ServerAlias domain.tld *.domain.tld
|
|
</example>
|
|
|
|
<p><code>domain.tld</code> 도메인에 있는 모든 호스트에 대한
|
|
요청을 <code>www.domain.tld</code> 가상호스트가 서비스한다.
|
|
이름을 줄때 와일드카드 문자 *와 ?를 사용할 수 있다. 물론
|
|
<code>ServerName</code>이나 <code>ServerAlias</code>에 이름을
|
|
적어주었다고 끝이 아니다. 먼저 이 이름들이 서버의 IP 주소로
|
|
대응하도록 DNS 서버를 알맞게 설정해야 한다.</p>
|
|
|
|
<p>마지막으로 <code><VirtualHost></code> 안에 다른
|
|
지시어들을 사용하여 가상호스트를 자세히 설정할 수 있다.
|
|
대부분의 지시어를 사용할 수 있으며, 관련된 가상호스트의 설정만을
|
|
변경한다. 어떤 지시어가 사용가능한지 알려면 지시어의 <a
|
|
href="../mod/directive-dict.html#Context">사용장소</a>를
|
|
확인하라. (<code><VirtualHost></code> 안이 아닌)
|
|
<em>주서버설정</em>에서 지정한 설정 지시어는 가상호스트에
|
|
같은 설정 지시어가 없는 경우에만 사용된다.</p>
|
|
|
|
<p>요청을 받으면 서버는 먼저 <code>NameVirtualHost</code>에서
|
|
지정한 IP 주소인지 검사한다. 그렇다면 그 IP 주소를
|
|
가진 <code><VirtualHost></code> 섹션들에서 요청한
|
|
호스트명과 일치하는 <code>ServerName</code>이나
|
|
<code>ServerAlias</code>를 찾는다. 찾으면 그 설정을 사용한다.
|
|
적절한 가상호스트를 찾지못하면, IP 주소에 해당하는
|
|
<strong>가상호스트들중 첫번째 것</strong>을 사용한다.</p>
|
|
|
|
<p>결과적으로 처음에 나온 가상호스트가 <em>기본</em>
|
|
가상호스트가 된다. IP 주소가 <code>NameVirtualHost</code>
|
|
지시어에 해당하면, <em>주서버</em>의 <code>DocumentRoot</code>는
|
|
<strong>절대로</strong> 사용하지 않는다. 특정 가상호스트에
|
|
해당하지않는 요청을 설정하려면
|
|
설정을 <code><VirtualHost></code>에 담고 설정파일에서
|
|
먼저 나오도록 하면 된다.</p>
|
|
|
|
</section>
|
|
|
|
<section id="compat"><title>오래된 브라우저와 호환</title>
|
|
|
|
<p>이미 적었듯이 이름기반 가상호스트가 올바로 동작하기위해
|
|
필요한 정보를 보내지않는 클라이언트가 있다. 이런 클라이언트는
|
|
항상 요청한 IP 주소에 대해 첫번째로 나오는 가상호스트
|
|
(<cite>최초의</cite> 이름기반 가상호스트)가
|
|
서비스한다.</p>
|
|
|
|
<note><title>얼마나 오래된 것을 말하는가?</title>
|
|
여기서 오래되었음은 실제로 상당히 오래된 것을 뜻한다.
|
|
오늘날 이런 브라우저를 사용할 일은 거의없다. 요즘
|
|
브라우저는 모두 이름기반 가상호스트에 필요한 <code>Host</code>
|
|
헤더를 보낸다.
|
|
</note>
|
|
|
|
<p>이 문제는 약간 거추장스럽지만 <directive
|
|
module="core">ServerPath</directive> 지시어로 해결할 수 있다:</p>
|
|
|
|
<p>설정 예:</p>
|
|
|
|
<example>
|
|
NameVirtualHost 111.22.33.44<br />
|
|
<br />
|
|
<VirtualHost 111.22.33.44><br />
|
|
<indent>
|
|
ServerName www.domain.tld<br />
|
|
ServerPath /domain<br />
|
|
DocumentRoot /web/domain<br />
|
|
</indent>
|
|
</VirtualHost><br />
|
|
</example>
|
|
|
|
<p>이게 무슨 뜻인가? "<code>/domain</code>"로 시작하는
|
|
URI에 대한 요청은 가상호스트 <code>www.domain.tld</code>가
|
|
서비스한다. 즉, <code>Host:</code> 헤더를 보내는 클라이언트는
|
|
<code>http://www.domain.tld/</code>만으로도 접근할 수 있지만,
|
|
<code>http://www.domain.tld/domain/</code>으로는 모든
|
|
클라이언트가 페이지에 접근할 수 있다.</p>
|
|
|
|
<p>이를 위해 최초의 가상호스트에 있는 페이지에
|
|
<code>http://www.domain.tld/domain/</code>으로 가는 링크를
|
|
넣는다. 그리고 가상호스트 페이지에서는 상대링크만을
|
|
사용한다. (예를 들어, "<code>file.html</code>",
|
|
"<code>../icons/image.gif</code>",
|
|
"<code>http://www.domain.tld/domain/misc/file.html</code>"이나
|
|
"<code>/domain/misc/file.html</code>"과 같이 앞에
|
|
<code>/domain/</code>이 붙은 링크)</p>
|
|
|
|
<p>조금 규칙이 필요하지만 이 규칙을 따르면 대부분의 경우
|
|
요즘 것이나 오래된 것이나 관계없이 모든 브라우저로 페이지를
|
|
볼 수 있다.</p>
|
|
|
|
</section>
|
|
</manualpage>
|
|
|
|
|