Server & OS

[Ubuntu] 우분투 Apache VirtualHost 예제 - 가상호스트

페이지 정보

본문

우분투 Apache의 VirtualHost 의 일례를 소개한다.

이 글은 DigitalOcean  에 소개된 내용을 토대로 몇가지 살을 붙여 작성하고 있다.

 

※ VirtualHost(가상호스트)를 사용하는 방법에는 세가지 방법이 있으나 그 중에서 NameVirtualHost(이름기반 가상호스트)를 많이 사용한다. 우분투에서도 기본값으로 이름기반 가상호스트에 대한 설정이 되어 있다.

 

이 름기반 가상호스트를 사용하게 됨으로써, 주호스트가 사라지게 되는데 우분투의 아파치 설정파일인 /etc/apache2/apache2.conf 에 ServerName 이나 DocumentRoot 가 지정되어 있지 않은 이유가 이때문이다.

 

이름기반 호스트를 사용하게 되면 가장 첫번째로 등장하는 가상호스트설정을 주호스트로 인식하게되고 우분투에서는 이 가상호스트가 /etc/apache2/sites-available/default 파일이다.

 

그러므로 이 파일에 지정되어 있는 ServerName 과 DocumentRoot 지시자가 주호스트를 가리키게 되므로 기존에 사용하던 주호스트가 있다면 이 파일에 그 내용을 작성하면 된다.

 

이 파일은 또한 요청된 적절한 가상호스트를 찾지 못하게 되면 대신 보여주게될 페이지 작성의 용도로도 사용된다.   

1.VirtualHost용

디렉토리

생성

아파치의 가상호스트로 사용할 디렉토리를 생성한다.

example.com 이라는 도메인의 이름으로 디렉토리를 생성하고 있다.

게다가 log들이 저장될 디렉토리를 생성한다.

$ sudo mkdir -p /var/www/example.com/public_html

$ sudo mkdir /var/www/example.com/logs

2.디렉토리

권한

변경

가상호스트의 파일들이 들어갈 public_html 의 소유권한을 사용자ID와 사용자그룹으로 변경한다.

$USER에 가상호스트를 사용할 사용자ID와 사용자그룹으로 변경하면 된다.

$ sudo chown -R $USER.$USER /var/www/example.com/public_html 

 

누구나 접근해서 읽을수 있게 접근권한을 변경한다.

$ sudo chmod -R 755 /var/www

3.인덱스

파일

생성

사이트 확인을 위해서 index.html 파일을 생성합니다.

$ sudo vi /var/www/example.com/public_html/index.html

<html>

<body>

<h1>Hellow, World!</h1>

<h2>Here is example.com</h2>

</body>

</html>

4.VirtualHost

파일

생성

우분투에서 기본값으로 제공하는 가상호스트 파일을 복사합니다. 

$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/example.com

5.VirtualHost

설정

가상호스트 파일을 수정하기 위해 파일을 연다.

$ sudo vi /etc/apache2/sites-available/example.com

 

ServerAdmin 에 에러발생시 이메일 연락처 등록

ServerName 이 누락되어 있는데 이 곳에 가상호스트에서 사용할 도메인명 입력

ServerAlias 는 별칭, www.example.com 으로 접속해도 example.com 으로 접속된다.

( 네임서버에 관련사항이 등록되어 있어야 한다. )

DocumentRoot 는 가상호스트로 사용될 주소입력 

찾는 문서가 없을경우 보여지게 될 에러문서를 직접 정할 수도 있다.

 

ErrorDocument 에러 발생시 참조

에러 발생시 표시할 파일의 최소 용량이 있습니다. 만약 지정된 페이지가 최소 용량에 미치지 못 할 경우 브라우저의 기본 에러 구문을 출력하게 됩니다. 각 에러의 최소 용량은 아래와 같습니다.
400 Bad Request > 512 bytes 
403 Forbidden > 256 bytes 
404 Not Found > 512 bytes 
405 Method Not Allowed > 256 bytes 
406 Not Acceptable > 512 bytes 
408 Request Time-out > 512 bytes 
409 Conflict > 512 bytes 
410 Gone > 256 bytes 
500 Internal Server Error > 512 bytes 
501 Not Implemented > 512 bytes 
505 HTTP Version Not Supported > 512 bytes


 

ServerAdmin webmaster@example.com

ServerName example.com

ServerAlias www.example.com

DocumentRoot /var/www/example.com/public_html

ErrorDocument 404 /404.html

 

디렉토리 지시자중에 /var/www 에 대한 내용을 사용할 가상호스트 디렉토리 주소로 변경

Options 값중에 Indexes 제거

( 이 값이 존재하면 가상호스트로 사용될 주소의 파일이 리스팅되어 보안상 위험하다 )

AllowOverride 는 워드프레스처럼 .htaccess 파일을 사용하는 경우 값을 All로 변경 

 

<Directory /var/www/example.com/public_html>

Options FollowSymLinks

AllowOverride All

Order allow,deny

allow from all 

</Directory>

 

로그가 작성될 위치를 지정한다.

( 이를 따로 분리하지 않으면 /var/log/apache2 디렉토리 이하에 모든 가상호스트의 로그가 기록되니 분리하도록 한다 )

 

ErrorLog /var/www/example.com/logs/error.log

CustomLog /var/www/example.com/logs/access.log combined

VirtualHost

활성화

생성하고 수정한 파일을 등록한다. 

$ sudo a2ensite example.com

$ sudo service apache2 restart

가상호스트

default

DNS에 등록되지 않은 주소의 사이트는 각각의 브라우저에서 제공하는 '찾을 수 없는 페이지'를 보여주게 된다. DNS에 등록되어 있으나 이 페이지를 찾을 수 없는 경우 default 설정에 따른다. 

( 나의 경우 아파치에서 기본적으로 제공해 주고 있는 default 설정파일을 복사해두고, default 파일을 수정해서 사용한다.)

$ sudo vi /etc/apache2/sites-available/default

<VirtualHost _default_:80>

...

<Directory /var/www/>

Options에서 Indexes제거

</Directory>

 

ErrorLog /dev/null    // 에러로그를 남기지 않음

# CustomLog   ...    // 주석처리하여 access 로그를 남기지 않음

...

</VirtualHost>

TroubleShooting

우분투의 Apache2 에 대한 기본설정이 이름기반 가상호스트를 염두에 두고 작성되어 있다. 

그런 연유로 아파치를 재시작하다보면 아래와 같은 에러메세지를 볼 수 있다.

 

apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

 ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

 

이 에러메시지가 거슬린다면 /etc/apache2/httpd.conf 에 적당한 NameServer 값을 입력하면 된다.

/etc/apache2/sites-available/default 파일을 사용할 것이라면 ServerName을 같은 값으로 지정하는것도 좋다.

 

 

 

 

관련자료

등록된 댓글이 없습니다.
Today's proverb
나는 모든 작품마다 넘어졌다. 발레는 최선을 다하면 넘어지게 되어 있다. 인간이니까. (강수진, 발레리나)