David's Technical Note

[WebServer Plug-In] About Apache Http Server Virtual host 본문

Product Engineering/1. WebServer

[WebServer Plug-In] About Apache Http Server Virtual host

David Joo 2012. 6. 10. 22:11

DNS 기반, 포트기반, 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>