내가 아래에서 구현한 것은 일반적으로도 도움이 될 것이다. 그러나 내가 쓴 설명은 포트번호로 가상호스트를 구현하는 것이다. mydomain.local 형식으로 도메인을 통해 가상호스트를 구축하려면 [apache] 로컬 컴퓨터에 가상호스트 만들기를 참고하는 편이 도움이 된다.
이 설명은 윈도우에서 APM_SETUP을 바탕으로 작성한 것이다.
두 파일을 건드려야 한다.
하나는 기본 설정 파일, 하나는 가상 호스트 설정 파일.
가상 호스트 설명을 보면 종종 어떤 파일을 건드려야 하는지 안 나와 있는데, 그게 문제인 듯하다.
다음 두 파일을 건드려야 한다. 메모장에서 열면 된다. txt파일이니까.
{아파치 루트}/conf/httpd.conf 와 {아파치 루트}/conf/extra/httpd-vhosts.conf 다.
(위에서 {아파치 루트}는 아파치가 설치돼 있는 폴더를 의미한다.)
* httpd.conf에서 설정해야 하는 것.
1.
Listen이라고 써 있는 부분을 찾는다.
이 부분은 포트를 설정하는 부분이다. 포트가 뭔지까지 설명하지는 않겠다.
아파치가 사용하는 기본 포트는 80이다.
가상 호스트 각각 다른 포트로 사용할 생각이라면 여기에 포트번호를 적어 줘야 한다.
한 포트에서 다 사용할 생각이라면 굳이 여기를 건드릴 필요는 없다.
어쨌든, 나는 82번 포트는 기본 포트로, 83번 포트는 가상 호스트 포트로 사용할 계획이다.
따라서 이렇게 적어 줬다.
Listen 82
Listen 83
2.
다음 부분을 찾는다. 거의 맨 뒤에 있다.
# Virtual hosts
#
Include conf/extra/httpd-vhosts.conf
주석을 해제한다.(빨간 색 #을 지운다. #은 아파치 설정 파일에서 주석이다. 윗 줄은 말 그대로 설명이므로 주석을 해제하면 안 된다. 아랫 줄은 가상 호스트 설정 파일을 가리키는 부분이다. 주석을 해제하면 가상 호스트를 작동시킨다는 뜻이다. 그래서 가상 호스트를 사용하려면 이 주석을 해제하는 것이다.)
주석을 해제하고 아래처럼 됐으면 끝이다.
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
* extra/httpd-vhosts.conf에서 설정해야 하는 것.
1.
아래 부분을 찾는다. 기본은 80으로 돼 있다.
NameVirtualHost *:80
아까 나는 82번 포트는 기본으로 사용하고 83번 포트를 가상 호스트로 사용하기로 했었다.
따라서 이 부분을 83으로 고친다.
NameVirtualHost *:83
2.
이제 가상 호스트 실제 설정을 해 주는 부분이다.
메모장으로 맨 아래부분으로 내려가서 새로 작성해 줘야 한다.
<VirtualHost
127.0.0.1:83
>
ServerName
127.0.0.1:83
ServerAdmin webmaster@localhost
DocumentRoot “
C:/APM_Setup6/htdocs/word
”
</VirtualHost>
위와 같은 형식으로 작성한다.
주황색으로 칠한 부분 : 가상 호스트의 IP주소, 혹은 http주소다. www.address.com 형식으로 적어 주거나, IP주소로 적어 준다.
파랑색으로 칠한 부분 : 웹마스터 메일 주소인데, 난 뭔지 잘 모른다. 알아서 잘 적으면 된다. 나는 로컬에서 사용할 용도로 가상호스트를 설정한 것이므로 별 걍 저대로 놔뒀다.
초록색으로 칠한 부분 : 가상 호스트의 주소가 실제로 가리키게 할 디렉토리(절대 주소)를 적어 준다. ip주소나 http주소를 적으면 바로 이 디렉토리에 있는 index 파일을 찾아서 웹브라우저에 보여 주게 된다.
3.
가상 호스트를 추가하려면 저 부분을 여러 개 적어 주면 된다.
테스트를 위해 작성해 봤다.
<VirtualHost 127.0.0.
2
:83>
ServerName 127.0.0.
2
:83
ServerAdmin webmaster@localhost
DocumentRoot “C:/APM_Setup6/htdocs”
</VirtualHost>
주소를 127.0.0.2로 하고 디렉토리를 다르게 적어 줬다.
이렇게 하면 설정 끝이다.
그런데도, 동작하지 않을때,
영어로 돼 있지만 여기가 잘 설명돼 있다 : Apache: [warn] _default_ VirtualHost overlap on port 80, the first has precedence Error and Solution
요지는, 가상 호스트를 매길 때 가상호스트 설정을 적어 준 부분에 NameVirtualHost 라고 적어 줘야 한다는 건데, 이 때 제대로 적어 줘야 한다는 거다. 예를 보자.(출처는 위 링크)
# My Virtual Hosts Config File for Two Domains NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin webmaster@theos.in DocumentRoot "/usr/local/docs/theos.in" ServerName www.theos.in ServerAlias theos.in ErrorLog "/var/log/theos.in-error_log" CustomLog "/var/log/theos.in-access_log" common </VirtualHost> <DIV style="MARGIN: 1em 0px"><SCRIPT type=text/javascript><!-- google_ad_client = "ca-pub-4085781408395472"; /* 키워드 링크 나열 */ google_ad_slot = "3110428491"; google_ad_width = 728; google_ad_height = 15; //--> </SCRIPT><SCRIPT type=text/javascript src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </SCRIPT><SCRIPT src="http://pagead2.googlesyndication.com/pagead/js/r20110921/r20110914/show_ads_impl.js"></SCRIPT><SCRIPT>google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);</SCRIPT><INS style="BORDER-BOTTOM: medium none; POSITION: relative; BORDER-LEFT: medium none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; WIDTH: 728px; PADDING-RIGHT: 0px; DISPLAY: inline-table; HEIGHT: 15px; VISIBILITY: visible; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0px"><INS style="BORDER-BOTTOM: medium none; POSITION: relative; BORDER-LEFT: medium none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; WIDTH: 728px; PADDING-RIGHT: 0px; DISPLAY: block; HEIGHT: 15px; VISIBILITY: visible; BORDER-TOP: medium none; BORDER-RIGHT: medium none; PADDING-TOP: 0px" id=google_ads_frame3_anchor><IFRAME style="POSITION: absolute; TOP: 0px; LEFT: 0px" id=google_ads_frame3 vspace=0 height=15 marginHeight=0 src="http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-4085781408395472&output=html&h=15&slotname=3110428491&w=728&lmt=1317475106&flash=10.0.42.34&url=http%3A%2F%2Fmytory.co.kr%2Farchives%2F825&dt=1317475106093&shv=r20110921&jsv=r20110914&saldr=1&prev_slotnames=1732325096%2C6433767654&correlator=1317475105010&frm=4&adk=1116408870&ga_vid=465412242.1317444933&ga_sid=1317474711&ga_hid=982700803&ga_fc=1&u_tz=540&u_his=3&u_java=1&u_h=1050&u_w=1400&u_ah=1010&u_aw=1400&u_cd=32&u_nplug=0&u_nmime=0&dff=%EB%A7%91%EC%9D%80%20%EA%B3%A0%EB%94%95&dfs=14&adx=127&ady=1265&biw=995&bih=746&oid=2&ref=http%3A%2F%2Fwww.google.co.kr%2Furl%3Fsa%3Dt%26source%3Dweb%26cd%3D4%26ved%3D0CEgQFjAD%26url%3Dhttp%253A%252F%252Fmytory.co.kr%252Farchives%252F825%26rct%3Dj%26q%3D%25EC%259A%25B0%25EB%25B6%2584%25ED%2588%25AC%2520%25ED%258F%25AC%25ED%258A%25B8%2520%25EA%25B0%259C%25EB%2585%2590%26ei%3DMJ2GTqqbPKukiAes5ty5Dw%26usg%3DAFQjCNFbTBn3agZ6z3CCuw5PtgOhV3-CWw%26cad%3Drjt&prodhost=googleads.g.doubleclick.net&fu=0&ifi=3&dtd=16&xpc=id2vpT1IJZ&p=http%3A//mytory.co.kr" frameBorder=0 width=728 allowTransparency name=google_ads_frame3 marginWidth=0 scrolling=no hspace=0></IFRAME></INS></INS></DIV> <VirtualHost *:80> ServerAdmin webmaster@nixcraft.com DocumentRoot "/usr/local/docs/nixcraft.com" ServerName www.nixcraft.com ServerAlias nixcraft.com ErrorLog "/var/log/nixcraft.com-error_log" CustomLog "/var/log/nixcraft.com-access_log" common </VirtualHost> |
여기서 주목할 부분은 바로 *:80이다. 가상 호스트의 포트와 NameVirtualHost의 포트를 맞춰 줘야 한다.
만약 IP로 구분을 했다면 *가 아니라 IP를 적어 줘야 한다고 한다.
NameVirtualHost 192.168.0.99:80
하는 식으로 말이다.
응용!
자, 그런데 나의 경우에는 저렇게 해도 작동이 안 됐다. 왜였을까?
virtualHost 정의 파일이 여러 개 있었던 게 원인이다. 나 같은 경우는 우분투를 사용한다. 우분투는
/etc/apache2/sites-enabled
폴더에 있는 심볼릭 링크(링크를 지우면 원본까지 지워지는 무서운 링크!)가 바로 가상 호스트를 정의하는 파일인데, 아래 그림을 보라.
default 외에도 dekiwiki 라는 놈이 보인다. 이놈도 바로 가상호스트를 정의하고 있었던 것이다! 이놈은 dekiwiki를 설치하면 자동으로 생성되는 놈이기 때문에 눈치채지 못했던 것이다. OTL;;
자, 이 파일을 까 보면 이 가상호스트는 아래처럼 시작한다.
?1 <VirtualHost *>
즉, 그러므로 다른 가상 호스트들도 시작 부분을
<VirtualHost *:80> 이 아니라 <VirtualHost *>로 설정을 해 주고, 가상호스트 정의 파일 맨 앞에다
?12 NameVirtualHost *
<VirtualHost *>
라고 적어 줘야 하는 것이다.
내가 권장하는 것은 가상 호스트 서정 파일 말고 httpd.conf 에 적어 주는 것이다. 가상 호스트 설정파일을 아파치가 읽기 전에 저 NameVirtualHost * 를 읽어야 하기 때문이다.
이렇게 모든 걸 끝내면 모든 가상호스트가 제대로 돌아가기 시작했다.
만약 고쳤는데도 [warn] NameVirtualHost *:80 has no VirtualHosts 따위 에러가 나오면 어딘가에 NameVirtualHost를 적어 둔 것이다. 찾아 내서 지워 주자.
댓글