David's Technical Note
[WebServer Plug-In] About Apache Http Server Virtual host 본문
[WebServer Plug-In] About Apache Http Server Virtual host
David Joo 2012. 6. 10. 22:11DNS 기반, 포트기반, IP주소 기반하여 요청을 웹로직 서버로 분기 하고 싶다면 VirtualHost를 사용해야 한다.
더 많은 분기 방법과 자세한 내용은 아래 URL에서 확인하면 된다.
Apache 가상호스트 사용방법에 관한 문서참조 URL http://httpd.apache.org/docs/2.2/vhosts/examples.html
1. DNS 기반 분기 방법
IP 주소 192.168.0.1에 각각 examples.com과 examples.org DNS 기반으로 분기한다
*** NameVirtaulHost 명시해 주기 <--- 하나의 IP:PORT로 여러 도메인 이름에 따라 분기할땐 반드시 정의해 주어야 한다. ****
######################################################################################
Listen 80
....생략......
NameVirtualHost 192.168.0.1:80
....생략......
# ***************** Weblogic Module*******************
LoadModule weblogic_module modules/mod_wl_22.so
<VirtualHost 192.168.0.1:80>
ServerName examples.com
DocumentRoot "/apache/apache22/htdocs”
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.1
WebLogicPort 7001
MatchExpression *.css
MatchExpression *.jsp
DebugConfigInfo On
Idempotent OFF
DynamicServerList ON
KeepAliveEnabled ON
ConnectRetrySecs 2
WLTempDir /apache/apache22/logs/proxy.log
ConnectTimeoutSecs 20
</IfModule>
</VirtualHost>
<VirtualHost 192.168.0.1:80>
ServerName examples.org
DocumentRoot "/apache/apache22/htdocs”
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.10
WebLogicPort 7010
MatchExpression *.css
MatchExpression *.jsp
DebugConfigInfo On
Idempotent OFF
DynamicServerList ON
KeepAliveEnabled ON
ConnectRetrySecs 2
WLTempDir /apache/apache22/logs/proxy.log
ConnectTimeoutSecs 20
</IfModule>
</VirtualHost>
# ***************** Weblogic Module*******************
################################################################################
2. IP주소 기반 분기 방법
192.168.0.1은 examples.com으로 192.168.0.10은 examples.org로 분기한다.
#################################################################################
Listen 80
# ***************** Weblogic Module*******************
LoadModule weblogic_module modules/mod_wl_22.so
<VirtualHost 192.168.0.1:80>
ServerName examples.com
DocumentRoot "/apache/apache22/htdocs”
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.1
WebLogicPort 7001
MatchExpression *.css
MatchExpression *.jsp
DebugConfigInfo On
Idempotent OFF
DynamicServerList ON
KeepAliveEnabled ON
ConnectRetrySecs 2
WLTempDir /apache/apache22/logs/proxy.log
ConnectTimeoutSecs 20
</IfModule>
</VirtualHost>
<VirtualHost 192.168.0.10:80>
ServerName examples.org
DocumentRoot "/apache/apache22/htdocs”
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.10
WebLogicPort 7010
MatchExpression *.css
MatchExpression *.jsp
DebugConfigInfo On
Idempotent OFF
DynamicServerList ON
KeepAliveEnabled ON
ConnectRetrySecs 2
WLTempDir /apache/apache22/logs/proxy.log
ConnectTimeoutSecs 20
</IfModule>
</VirtualHost>
# ***************** Weblogic Module*******************
##################################################################################
3. Port 기반 분기 방법
같은 DNS를 사용하고 context-root가 같은 경우 port 기반으로 분기하는 방법이 있다.
###################################################################################
Listen 80
Listen 8080
# ***************** Weblogic Module*******************
LoadModule weblogic_module modules/mod_wl_22.so
<VirtualHost 192.168.0.1:80>
ServerName examples.com
DocumentRoot "/apache/apache22/htdocs”
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.1
WebLogicPort 7001
MatchExpression *.css
MatchExpression *.jsp
DebugConfigInfo On
Idempotent OFF
DynamicServerList ON
KeepAliveEnabled ON
ConnectRetrySecs 2
WLTempDir /apache/apache22/logs/proxy.log
ConnectTimeoutSecs 20
</IfModule>
</VirtualHost>
<VirtualHost 192.168.0.1:8080>
ServerName examples.com
DocumentRoot "/apache/apache22/htdocs”
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.10
WebLogicPort 7010
MatchExpression *.css
MatchExpression *.jsp
DebugConfigInfo On
Idempotent OFF
DynamicServerList ON
KeepAliveEnabled ON
ConnectRetrySecs 2
WLTempDir /apache/apache22/logs/proxy.log
ConnectTimeoutSecs 20
</IfModule>
</VirtualHost>
# ***************** Weblogic Module*******************
###############################################################################
4. Tips
4.1. LoadModule weblogic_module modules/mod_wl_22.so는 반드시 <IfModule mod_weblogic.c>
파라미터 위에 정의해준다.
4.2
<Location / >
SetHandler weblogic-handler
</Location>
/를 만나면 정적컨텐츠(Js, html jpg) 포함 모든 Request 를 웹로직 서버에 넘겨 처리한다.
Location 파라미터를 사용할 때는 SetHandler weblogic-handler 옵션을 함께 사용한다.
4.3
Apache의 경우 여러 포트를 Listen 하는 것이 가능하다.
Listen 80
Listen 8080
5. 고객사 적용 사례
5.1 요청사항
192.168.0.1:80 IP 주소는 각각 examples.com과 examples.org DNS 이름과 80포트를 이용하여 127.0.0.1으로 요청을 보내고 있다.
여기에 examples.com DNS를 사용하고 context-root를 /를 주는 요청을 하나 더 추가하여 모든 요청이 웹로직 서버 127.0.0.10으로 분기 해야하는 경우 어떻게 설정하면 될까?
- 기존의 설정과 비교 시 같은 DNS와 context-root를 사용하고 있기 때문에 port 기반으로 분기가 가능하도록 한다.
- 서버의 모든 요청은 웹로직 서버에서 처리하도록 한다.
- 아파치에서 Listen 가능한 포트 수는 여러 개 설정이 가능하다.
5.2 변경 전 구성내용
########################################################################################
-------생략-------
Listen 80
-------생략-------
NameVirtuallHost 192.168.0.1:80
<VirtualHost 192.168.0.1:80>
DocumentRoot /apache/apache22/htdocs
ServerName examples.com
ServerAlias www.examples.com
DirectoryIndex index_com.html
ErrorLog "logs/error_log"
CustomLog "|/apache/apache22/bin/rotatelogs /apache/apache22/logs/access.log 86400" common
</VirtualHost>
<VirtualHost 192168.0.1:80>
DocumentRoot /apache/apache22/htdocs
ServerName examples.org
ServerAlias www.examples.org
DirectoryIndex index_org.html
ErrorLog "logs/error_log"
CustomLog "|/apache/apache22/bin/rotatelogs /apache/apache22/logs/access.log 86400" common
</VirtualHost>
LoadModule weblogic_module modules/mod_wl_22.so
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.1
WebLogicPort 80
MatchExpression *.jsp
HungServerRecoverSecs 600
Idempotent OFF
</IfModule>
###################################################################################
5.3 변경 후 (변경분: 빨간색 처리)
###################################################################################3
-------생략-------
Listen 80
Listen 8080 ßport 기반으로 분기하기 위해 8080포트 하나더 Listen 하도록 한다.
-------생략-------
NameVirtuallHost 192.168.0.1:80 ß192.168.0.1 특정IP주소에 80포트의 요청을 받는다.
NameVirtualHost 192.168.0.1:8080 ß192.168.0.1 특정IP주소에 8080포트의 요청을 받는다.
LoadModule weblogic_module modules/mod_wl_22.so ß<IfModule mod_weblogic.c> 파라미터가 적힌 부분의 가장 위에 적어주기
<VirtualHost 192.168.0.1:80>
DocumentRoot /apache/apache22/htdocs
ServerName examples.com
ServerAlias www.examples.com
DirectoryIndex index_com.html
ErrorLog "logs/error_log"
CustomLog "|/apache/apache22/bin/rotatelogs /apache/apache22/logs/access.log 86400" common
8080포트로 요청되는 새로운 VirtualHost,를 설정하여 기존 두 VirtualHost와 다른 웹로직 서버로 요청을 보낼것이기 때문에 해당 <IfModule mod_weblogic.c> 파라미터를 기존 VirtualHost 안에 정의해 준다.
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.1
WebLogicPort 80
MatchExpression *.jsp
HungServerRecoverSecs 600
Idempotent OFF
</IfModule>
</VirtualHost>
<VirtualHost 192168.0.1:80>
DocumentRoot /apache/apache22/htdocs
ServerName examples.org
ServerAlias www.examples.org
DirectoryIndex index_org.html
ErrorLog "logs/error_log"
CustomLog "|/apache/apache22/bin/rotatelogs /apache/apache22/logs/access.log 86400" common
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.1
WebLogicPort 80
MatchExpression *.jsp
HungServerRecoverSecs 600
Idempotent OFF
</IfModule>
</VirtualHost>
8080포트로 Listen 할 VirtualHost를 하나 더 정의 하여 examples.com:8080/ URL 이 들어오면 127.0.0.10:8001 웹로직 서버로 모든 요청<Location / >을 보내도록 한다.
<VirtualHost 192.168.0.1:8080>
DocumentRoot /apache/apache22/htdocs
ServerName examples.com
ServerAlias www.examples.com
DirectoryIndex index_snd.html
ErrorLog "logs/error_log"
CustomLog "|/apache/apache22/bin/rotatelogs /apache/apache22/logs/access_log 86400" common
<IfModule mod_weblogic.c>
<Location / >
SetHandler weblogic-handler
WebLogicHost 127.0.0.10
WebLogicPort 8001
Idempotent OFF
</Location>
</IfModule>
</VirtualHost>
# LoadModule weblogic_module modules/mod_wl_22.so ß주석처리
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.1
WebLogicPort 80
MatchExpression *.jsp
HungServerRecoverSecs 600
Idempotent OFF
</IfModule>