로컬 윈도우에서 Apache 가상호스트 설정 방법-포트, 서브도메인

watch_later 금요일, 11월 15, 2013

How to set up Apache VirtualHost on local windows?

작성시간 - 3시간 15분(01:20~04:43) 2013.11.15
웹 개발시 서브도메인별, 포트별 다른 서비스를 해주고 싶을 때가 있다. 이 기능이 안되면 도메인이나 서버장비를 새로 사서 늘리는 방법밖에 없기 때문이다. 또한 이것을 윈도우가 깔린 로컬호스트에서도 하고 싶다. 실제 도메인에 올렸을 때 설정을 바꿔주기가 너무 귀찮기도 하고 좀 더 실제 모습에 가까운 상태로 개발하고 싶기 때문이다.

테스트 환경

  • windows 8 pro 한글버전
  • localhost
  • xampp 서버
  • apache
  • mysql

기본지식

보통 브라우저에 아이피나 도메인 주소를 치면 이 신호는 광모뎀을 타고 외부로 날아간다. 그럼 그 외부서버가 주소에 설정된 위치로 우리 브라우저를 연결시켜준다.
즉 우리가 xampp 를 켜놓고 있어도 우리가 브라우저에 주소를 아무리 쳐도 신호는 외부로 나가서 xampp 가 컴퓨터 내의 특정한 장소로 연결하질 못한다.
그래서 우리가 여기서 알아야 할 것은 로컬에서 가상서버를 설정하려면 먼저 다음의 활동이 필요하다.
  1. 특정 주소나 글자를 입력했을 때 그 신호가 내부망(127.0.0.1)로 가도록 설정해야 한다는 것
  2. 내부망에 켜진 xampp 에서 주소요청과 특정 장소로 연결을 처리하는 아파치에 호스트 설정을 해줘야 한다는 것.
첫 번째, 브라우저 요청 주소를 내부망으로 연결시키는 것은 C:\Windows\System32\Drivers\etc\hosts 파일을 수정하면 된다.
enter image description here
두 번째, 내부서버인 아파치로 요청온 주소를 특정 디렉토리와 연결시키는 것은. D:\xampp\apache\conf\extra\httpd-vhosts 파일을 수정하면 된다.
enter image description here

Apache 설정 파일을 살펴보자.

httpd 파일에서 가상 호스트 부분 찾아보기

아파치 설정파일을 찾아봐야 하므로. d:/xampp/apache/conf/httpd.conf 파일을 열어본다. 콘트롤+F 를 눌러서 찾기 창을 띄운 다음 virtual hosts 를 검색하면 다음의 문장이 아주 아래쪽에 나온다.
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
enter image description here
모든 것을 직접 다 쓰지 않고 include … 즉 다른 파일에 기록한 내용을 읽어들이는 형태다. 즉 httpd-vhosts.conf 에 가상 호스트 실제 설정내용이 기록되어 있다는 말이고… 그 파일에 설정을 기록하면 아파치가 결국 httpd.conf를 읽을 때 설정값이 불러봐지고 아파치에 적용된다는 말이다.

가상호스트 실제 설정해보기

주소창에 이름을 입력하면.. 바꿔 말하면 아파치웹서버에게 특정 이름을 요청하면… 우리가 지정한 디렉토리에 문서를 보여주도록 해보자.
여기서 말하는 이름이란 ip 주소부터 영어소문자까지 되는 것 같다. 즉 “129.22.999.0” 요청을 하건 “domain.com” 식으로 요청하건 “hello” 요청하건 다 받아줄 수 있다는 말이다.

httpd 파일에서 가상 호스트 설정해보기

브라우저창에 naver.com 이라고 입력하면 “D:/xampp/htdocs/laravel/public”으 로 연결해주는 가상호스트를 설정해보자.
다음 파일을 메모장으로 연다. D:\xampp\apache\conf\extra\httpd-vhosts.conf
아래내용을 입력한다.
NameVirtualHost *:80
#이름가상호스트 받는데... 80포트로 모든 아이피 요청을 받는다.

<VirtualHost *:80>

    ServerAdmin webmaster@naver.com
    #서버 관리자.. 별거 아니다.

    DocumentRoot "D:/xampp/htdocs/laravel/public"
    #문서루트위치 즉. 아래 서버이름으로 요청이 들어오면 연결시킬 장소.
    ServerName naver.com
    #서버이름이다. 즉 naver.com 이라고 아파치에 요청이 들어가면 위로 연결.

    ServerAlias www.naver.com
    #별명인데.. 앞에 www 만 붙인거다.

    ErrorLog "logs/dummy-host.naver.com-error.log"
    CustomLog "logs/dummy-host.naver.com-access.log" common
    #이건 기록파일들..

    <Directory "D:/xampp/htdocs/laravel/public">
        Options Indexes Includes execCGI
        AllowOverride None
        Order Allow,Deny
        Allow From All
    </Directory>
    # 이건 디렉토리에 대한 허가해주는 거다.
    # Allow From All 모든 요청으로부터 허용이다.

</VirtualHost>

윈도우자체에서 요청이 컴퓨터 내부에 아파치로 요청될 수 있게 설정하기

메모장을 관리자 권한으로 실행한다. 아이콘을 오른쪽 클릭 후 나오는 메뉴중 관리자 권한으로 실행메뉴가 있다. 이후 윈도우 7,8 사용자는 “C:\Windows\System32\Drivers\etc” 로 이동한 후 파일종류를 모든 파일로 치면 hosts 라는 파일을 나온다. 이걸 연다.
여기 나오는 127.0.0.1 은 외부 인터넷이 아니라 컴퓨터 내부 인터넷을 뜻한다. 그리고 나와 있듯이 localhost 라는 호스트 요청이 들어오면 127.0.0.1 로 연결한다. 내부망에는 우리의 xampp 가 켜져있고 아파치 서버가 대기하고 있다가. 이 localhost 라는 요청을 처리한다.
위에서는 naver.com 을 아파치에 설정했으니까. 여기서도 naver.com 을 브라우저에 입력하면 외부망으로 전선타고 날아가는게 아니라 컴퓨터 내부망인 127.0.0.1 로 요청을 전달해주는 설정을 해주면 된다. 그럼 아파치가 미리 설정된 데로 “D:/xampp/htdocs/laravel/public”로 연결해줄 것이다.
127.0.0.1   naver.com
127.0.0.1   www.naver.com
이제 XAMPP 를 껐다가 다시 키고… 브라우저 주소창에 우리가 설정한 이름인 HTTP://naver.com 을 입력하면 이름가상호스트를 설정했으므로 설정한 “D:/xampp/htdocs/laravel/public”로 연결된다.

특정 포트로 들어온 요청을 특정위치로 연결해보기

이번에는 localhost 라는 동일한 이름에 포트만 다르게 해서 다른 위치에 접근하도록 해보자.

httpd 파일 수정해서 아파치가 새로운 포트에 귀를 기울이게 하기

포트는 외부에 열려있다. 즉 아파치 서버는 누가요청하는 소리를 들을(listen)려고 한다. 특정 포트에 대해서 말이다.
지금은 80포트에 귀를 기울이고(listen)있으니 우리가 90 포트도 귀를 기울이라고 해줘야 한다.
listen 80
listen 90
포트 뿐만 아니라 특정 아이피에 특정 포트식으로 대상을 좁힐 수도 있다. 예)listen 13.5.899.21:222

httpd-vhosts 파일 수정하기

90포트를 열어줬으니 90포트에 맞는 네임버추어호스트 설정해줘야한다.

NameVirtualHost *:90
#80, 90 포트로 모든 아이피 요청을 받는 이름가상호스트 시작.

<VirtualHost *:90>
#어떤 아이피요청이건 90포트로 들어오면 처리할 규칙 정의

    ServerAdmin webmaster@laravel
    DocumentRoot "D:/xampp/htdocs/laravel/public"
    ServerName laravel
    #즉 90포트로 laravel 이라는 요청이 들어오면 "D:/xampp/htdocs/laravel/public" 디렉토리로 연결

    ServerAlias laravel
    ErrorLog "logs/dummy-host.laravel-error.log"
    CustomLog "logs/dummy-host.laravel-access.log" common

    <Directory "D:/xampp/htdocs/laravel/public">
    Options Indexes Includes execCGI
    AllowOverride None
    Order Allow,Deny
    Allow From All
    </Directory>
    #디렉토리는 꼭 허가를 해줘야함. 그래야 접근할 때 에러가 안남. 
</VirtualHost>
NameVirtualHost *:80

<VirtualHost *:80>
    DocumentRoot "D:/xampp/htdocs"
    ServerName localhost
    ServerAlias localhost
    ErrorLog "logs/dummy-host.localhost.com-error.log"
    CustomLog "logs/dummy-host.localhost.com-access.log" common
</VirtualHost>

#80포트는 localhost 로 연결됨. 여기서 디렉토리를 허용하는 작업을 안한 이유는 "D:/xampp/htdocs" 는 이미 httpd 파일에서 허용설정이 되어 있기 때문이다.

윈도우의 hosts 파일 수정하기

수정할 필요가 없다. 이미 127.0.0.1 localhost 로 연결이 되어 있다. 브라우저에서 localhot 라고 입력하면 내부망인 127.0.0.1로 연결이 된다. 그럼 아파치가 처리할 수 있다.
추가할 것은 laravel 이름요청에 127.0.0.1 내부망을 연결시키는 부분이다.
127.0.0.1   localhost
127.0.0.1   laravel

서브도메인은 바로 위와 같다.

localhost 와 laravel 을 각기다른 서브도메인으로 이름만 바꿔주면 작동한다.

참고문헌

아파치재단(접근:2013.11.15).
”가상호스트 예”



sentiment_satisfied Emoticon