가상 호스트란

가상 호스트(Virtual Host)는 하나의 웹 서버에서 다중의 도메인을 처리하는 기술입니다. 예로 IP 가 10.10.10.10 인 웹 서버에서 blog.com 와 news.com 두 개의 웹 서비스를 제공할 수 있습니다.

 

웹 브라우저가 blog.com 에 연결하여 컨턴츠를 요청할 때 다음 절차를 거치게 됩니다.

  1. 도메인 이름 서버(DNS) 에 blog.com 의 IP 를 문의
  2. DNS 는 10.10.10.10 이라는 응답을 전송
  3. 웹 브라우저는 blog.com 웹 서버(10.10.10.10) 에 연결
  4. 웹 브라우저는 컨텐츠 요청을 보내며 HTTP 의 Host: 헤더에 blog.com 설정
  5. 웹 서버는 Host: 헤더 값을 얻은 후에 가상 호스트 설정을 확인하여 요청 컨텐츠 읽기
  6. 웹 서버는 읽은 컨텐츠를 웹 브라우저에 전송

 

전절에서 피들러로 살펴본 HTTP 요청 헤더중 브라우저가 Host 헤더에 요청하는 서버의 도메인과 포트를 전송하는 것을 확인했으므로 쉽게 이해할 수 있을겁니다.

 

홈스테드에 가상 호스트 설정

홈스테드에서는 다음과 같이 2 가지 방법으로 간단하게 새로운 가상 호스트를 추가할 수 있습니다.

추가할 가상 호스트의 도메인은 todolog.app 이고 라라벨 어플리케이션 소스는 가상 머신내의 ~/Code/todolog.app 에 위치할 경우 가상 호스트를 추가하는 예제이며 웹 브라우저에서 연결할 수 있도록 사전에 c:\Windows\system32\drivers\etc\hosts 파일에 다음과 같이 도메인을 등록해 두어야 합니다.

192.168.10.10 todolog.app
CODE

 

serve 명령어 사용

homestead 에 ssh 로 연결한 후에 쉘 상에서 serve 명령어로 새로운 가상 호스트를 추가할 수 있습니다. serve 의 사용법은 다음과 같으며 http/https 로 서비스를 제공하는 가상 호스트를 추가하므로 서비스 포트는 기술할 필요가 없습니다.

serve 도메인 어플리케이션경로
CODE

 

이제 다음 serve 명령어로 가상 호스트를 추가해 봅시다. 주의할 점은 nginx 에 등록할 root 디렉터리는 todolog.app 가 아니라 todolog.app/public 이어야 합니다.

$ serve todolog.app /home/vagrant/Code/todolog.app/public
 
dos2unix: converting file /vagrant/scripts/serve.sh to Unix format ...
 * Restarting nginx nginx                                                                                        [ OK ] 
php5-fpm stop/waiting
php5-fpm start/running, process 1946
CODE

성공적으로 실행되면 자동으로 nginx 와 php5-fpm 서비스가 재구동됩니다. nginx 의 가상 호스트 설정 폴더를 확인해 보면 todolog.app 라는 가상 호스트 설정 파일이 추가된 것을 알 수 있습니다.

$ ls -l /etc/nginx/sites-enabled/


total 0
lrwxrwxrwx 1 root root 46 Apr 29 16:23 todolog.app -> /etc/nginx/sites-available/todolog.app
lrwxrwxrwx 1 root root 40 Apr 29 16:23 homestead.app -> /etc/nginx/sites-available/homestead.app
CODE

 

이제 웹 브라우저로 연결하여 정상 동작 여부를 확인하면 됩니다.

 

vagrant provision 사용

vagrant 는 가상 머신의 설정이 변경되면 provision 명령어를 통해 가상 머신에 반영할 수 있습니다. 다음 절차를 통해 sites 설정을 추가하고 가상 머신에 반영해 봅시다.

  1. 에디터로 윈도의 사용자 홈 디렉터리에서 .homestead/Homestead.yaml 파일을 엽니다.
  2. sites 항목에 새로운 가상 호스트를 추가합니다. 

    sites:
        - map: homestead.app
          to: /home/vagrant/Code/Laravel/public
        - map: todolog.app
          to: /home/vagrant/Code/todolog.app/public
    CODE
  3. DNS 에 등록된 호스트 이름이 아니라면 hosts 파일에 추가해 줍니다. (전 절 homestead 설정 참조)
  4. cmd.exe 를 열고 Homestead 가 설치된 경로로 이동한 후에 vagrant provision 명령어를 실행하여 설정을 반영합니다.

    vagrant provision 
    CODE
  5. 가상 머신에 접속하여 ls 를 쳐 보면 가상 호스트가 추가된 것을 확인할 수 있습니다.

    $ ls -l /etc/nginx/sites-enabled/
    
    
    total 0
    lrwxrwxrwx 1 root root 46 Apr 29 16:23 todolog.app -> /etc/nginx/sites-available/todolog.app
    lrwxrwxrwx 1 root root 40 Apr 29 16:23 homestead.app -> /etc/nginx/sites-available/homestead.app
    CODE

Homestead 2.1.5(15년 7월 23일) 이전 버전까지는 provision 명령어를 실행하면 데이타 베이스의 스키마와 데이타가 초기화 되어 버리니 중요한 데이타는 개발용 가상 머신밖에서 별도로 관리해야 합니다.

(소스 코드같은 파일 시스템에 있는 파일은 삭제되지 않습니다.)