본문 바로가기

Web Server(APM)

웹 호스팅 Virtual Host setting

virtual host란? Web Server에는 기본적으로 존재하는 Host가 있으며, 이를 Main Host라고 한다. 하나의 Web Server에는 Main Host 외에 별도의 디렉토리를 가진 여러 개의 Host를 설정하여 사용할 수 있다. Virtual hostmain host를 제외한 나머지 host를 말한다. 이를 이용해 하나의 computer에서 여러 개의 website를 동시에 service 할 수 있다. , virtual host란 하나의 물리적인 server에서 하나 이상의 website를 구동시키기 위한 기술을 말한다.

virtual host의 종류는 여러가지가 있다. apache에서는 Name-based Virtual Host, IP-based virtual host를 제공한다name-based virtual host는 서버가 하나의 IP 주소를 가지고 있고, 여러 주소가 이 serverIP를 가리킨다IP-based virtual host는 website마다 다른 IP address또는 다른 port를 가지는 방식이다. 이 글은 name-based virtual host을 구현하는 내용이다.

 

1.  virtual host의 사용자 계정 생성 (root 계정의 권한에서 실행)

ubuntu에서 사용자 계정을 만드는 명령어는 2가지가 있다. user add라는 명령어와 addser라는 명령어이다. 사용자 계정 변경은 su - [username]으로 실행하면 된다.

방법 1) useradd 명령어 사용

useradd [option] [username] : -m은 사용자의 home directory도 함께 만드는 option이다. 그 외에도 -g 그룹지정, -d 디렉토리 지정, -s 쉘지정, -p 패스워드 지정 등 다양한 옵션이있다.

passwd [username] : user의 passowrd를 지정하는 명령어이다. 사용자 생성 후 꼭 비밀번호를 설정해주어야 한다.

useradd 명령어로 user account 만들기

방법 2) adduser 명령어 사용

adduser [username] : adduser는 useradd명령어보다 더 간단한 명령어이다. 이 명령어를 사용하면 비밀번호 설정, 홈 디렉토리 생성을 자동으로 해 줄 수 있다. 후에 사용자의 정보를 변경하고 싶으면 usermod 명령어를 사용하면 된다.

adduser 명령어로 user account 만들기
su - [username]

이제 만들어진 user account를 확인해보자. 사용자정보는 /etc/passwd의 파일에서 확인할 수 있다. 사용자 이름, 암수, 사용자ID, 그룹ID, homedirectory, shell 순서대로 정보가 나열되어 있다. (tail -n 3은 /etc/passwd/ 파일의 아래쪽에 있는 3줄을 확인하기 위해 사용된 명령어이다.) 

 tail -n 3 /etc/passwd

+) 사용자 계정 삭제 : userdel [option] [username] : -r은 useraccount와 관련된 모든 내용을 삭제해준다.

userdel -r user02

2. 각 계정 홈페이지용 directory setting (user01 계정 사용)

1) 계정의 website directory 생성

user01에서 관리하는 homepage directory를 setting하기 위해서는 su  - user01 명령어를 사용하여 user01로 계정으로 directory를 만들어야 한다.  

su - uesr01

2) 결과 확인 위한 sameple page 생성

앞선 블로그 글에서 (https://ssudalim.tistory.com/9) /etc/apache2/apache2.conf 파일을 수정하여 /home/[user account id]/html의 directory에 대해서도 default root와 같은 권한을 주었다. user01계정에서 html을 directory를 만들어 /home/user01/html에서 webpage에 보내질 파일을 만들 것이다. 

apache2.conf 수정 정보
mkdir html & vim index.php
index.php file 내용

3. apache의 virtua host setting (domain name으로 구분) (root 계정)

1) virtual host 설정

user01계정의 virtual host setting을 할 것이다. /etc/apache2/sites-available/000-default.conf 파일을 /etc/apache2/sites-available/[filename].conf 이름으로 복사하여 virtualhost01.conf 의 document root를 user01가 설정하는 webpage root인 /home/user01/html로 변경해 주었다. 또한 사용할 domain name의 ServerName으로 설정해주자. [filename].conf를 apache2에서 사용하는 설정파일로 만들어주기 위해 a2ensite [filename].conf 명령어를 사용하여 [filename].conf의 파일의 symbolic link를 /etc/apache2/sites-enable에 추가해주었다.

000-default.conf 파일 복사해서 virtualhost01.conf 파일 생성
virtualhost01.conf 파일 수정 
virtualhost01.conf 파일 수정

 

000-default.conf 파일
  /etc/apache2/sites-enable로 symbolic link 만들어주기

2) apache virtual host 적용

apache에 virtual host를 적용해주는 게 가장 중요한 작업이다.  /etc/apache2/apache2.conf에 virtual host를 생성할 수 있게 명령어를 추가해주어야 한다. apache2.conf의 문서에 바로 추가하는 방법과 외부에서 파일을 만들어 Include 명령어로 추가해주는 방법이 있다. virtual host의 설정과 관련된 부분을 따로 생성하고 Include 명령어를 통해 apache2.conf에 추가하는게 더 code를 수정할때 더 명확해서 후자의 방법을 택했다.

cd /etc/apache2로 directory를 만들고, 여기에 virtualhost.conf라는 파일을 만들어 virtual host을 설정하는 code를 입력해주었다. 이름기반 가상호스트를 사용하려면 서버는 연결을 받을 IP 주소를 (포트도) 정해야 한다.

이는 NameVirtualHost 지시어로 가능하다. NameVirtualHost에서 가상호스팅할 IP 영역을 지정하고, VirtualHost의 tag에서 세부사항을 설정한다. NameVirtualHost *:80은 아파치가 포트 80번으로 들어오는 모든 IP주소에 대해 가상호스트 요청을 기다린다는 것을 의미한다. * 대신 현재 이 서버가 가지고 있는 IP를 줄 수 도 있지만, DHCP에 의해 동적할당된다면 IP가 수시로 변경될 수 있기 때문에, 위와 같이 * 를 쓰는것이 유용하다. VirtualHost tag에는 세부사항 설정을 한다. ServerName에는 사용할 domain을 적고, Server Alias는 추가적인 별칭을 적고, DocumentRoot는 해당 domain으로 불렀을 경우 파일을 불러올 web root를 지정후 저장해준다.

위에서 설정한 virtualhost.conf파일을 apache2.conf의 기본 설정 파일로 추가시키기위해 vim /etc/apache2/apache2.conf 명령어로 apache2.conf 파일로 들어가 Include virtualhost.conf 을 추가해준다. 그러면 이제 apache2 server는 start나 restart를 할때 해당 apache2.conf 파일을 읽으며 자동적으로 virtaulhost.conf파일도 읽어와 apache2 server에 설정이 적용된다. 

/etc/hosts 파일에  virtual host의 domain과 ip주소의 matching을 추가시켜준다. 바꾼 설정파일들을 apache2 server에 적용해주기 위해서 service apache2 restart를 하여 web server를 재시작해준다.

 

virtaulhost.conf 파일 만들기
virtualhost.conf 파일 수정
virtualhost.conf파일을 apache2.conf파일에 추가해주기

3) hosts 파일에 주소 추가

4. 계정별 wordpress setting & 작동 test

wordpress설정을 user01 account에서 해주면된다. wordpress 설정 방법은 이전 포스팅  (https://ssudalim.tistory.com/11) 에서의 방법을 동일하게 user01에서 적용하면 된다. wordpress의 설정이 끝나고 domain에 따라 같은 IP주소 내에서 동작하고 있는 다른 wordpress의 page로 들어가지는 것을 볼 수 있다. 

user01.com/wordpress
ssudalin.com/wordpress

 

 

※참고 사이트

https://m.blog.naver.com/PostView.nhn?blogId=carrotcarrot&logNo=220718768757&proxyReferer=https%3A%2F%2Fwww.google.com%2F (사용자 계정 추가 및 홈 디렉토리 설정)
https://withcoding.com/101 (리눅스 사용자 관리 명령어)
https://webdir.tistory.com/213 (우분투 Apache(아파치) VirtualHost 예제 - 가상호스트 )
https://blog.embian.com/46 (apache virtual host란?)
https://httpd.apache.org/docs/2.2/ko/vhosts/name-based.html (apache2.2 - virtual host)
https://joont.tistory.com/46 (아파치 virtual host 설정)