ÃֽŠ°Ô½Ã±Û(OS/WAS)
2018.03.12 / 01:03

¾ÆÆÄÄ¡ À¥¼­¹ö ¿Í ÅèĹ ¿¬µ¿Çϱâ - tomcat connector(mod_jk) , reverse proxy(mod_proxy)

ÈÞ°í
Ãßõ ¼ö 179

 

°³¿ä 

Apache httpd web server ¿Í tomcat À» ¿¬°èÇÏ´Â ¹æ¹ýÀº ¼¼ °¡Áö°¡ ÀÖ´Ù. 

¿¹ÀüºÎÅÍ ¸¹ÀÌ ¾²´ø ¹æ¹ýÀº tomcat connector(mod_jk)¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ°í ´Ù¸¥ Çϳª´Â mod_proxy¸¦ »ç¿ëÇÏ¿© reverse proxy ±â´ÉÀ» »ç¿ëÇÏ´Â ¹æ¹ý, ¸¶Áö¸·Àº mod_proxy_ajp ¸¦ »ç¿ëÇÏ¿© AJP ProtocolÀ» reverse proxy ·Î »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. 

mod_proxy °¡ mod_jk ¿¡ ºñÇØ ¼³Á¤ÀÌ °£ÆíÇÏ°í AJP °°Àº ƯÁ¤ WAS ÀÇÁ¸ÀûÀÎ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î  ¼º´ÉÀÌ ´õ ÁÁ´Ù°í ÇÏÁö¸¸ mod_jk °¡ ¿À·§µ¿¾È ½á¿Ô°í Ä£¼÷Çؼ­ mod_jk ¸¦ ¸¹ÀÌ »ç¿ëÇÏ´Â ÆíÀε¥ ¼¼ °¡Áö ¹æ¹ý ¸ðµÎ Á¤¸®ÇØ º»´Ù. 


 

¿¬°á ¹æ½Ä
ÀåÁ¡
´ÜÁ¡
Ư¡
mod_jk
  • mod_jk ¸¦ ¸¹ÀÌ »ç¿ëÇϹǷΠ°ü·Ã ÀÚ·á°¡ ¸¹À½
  • JkMount ¿É¼ÇÀ» ÀÌ¿ëÇϸé URL À̳ª ÄÁÅÙÃ÷º°·Î À¯¿¬ÇÑ ¼³Á¤ÀÌ °¡´É(À̹ÌÁö´Â À¥¼­¹ö, ¼­ºí¸´Àº ÅèĹ)
  • º°µµÀÇ ¸ðµâÀ» ¼³Ä¡ÇØ¾ß ÇÔ
  • ¼³Á¤ÀÌ ¾î·Á¿ò
  • ÅèĹ Àü¿ëÀÓ
 
mod_proxy
  • º°µµ ¸ðµâ ¼³Ä¡°¡ ÇÊ¿ä¾ø°í(apache ±âº» ¸ðµâ) ¼³Á¤ÀÌ °£Æí
  • ƯÁ¤ WAS¿¡ ÀÇÁ¸ÀûÀÌÁö ¾ÊÀ¸¹Ç·Î ¸ðµç WAS¿¡ Àû¿ë °¡´É
  • URL º° À¯¿¬ÇÑ ¼³Á¤ÀÌ ¾î·Á¿ò(

    ProxyPassMatch »ç¿ë ÇÊ¿ä)

 
mod_proxy_ajp
  • º°µµ ¸ðµâ ¼³Ä¡°¡ ÇÊ¿ä¾ø°í(apache ±âº» ¸ðµâ) ¼³Á¤ÀÌ °£Æí
  • ƯÁ¤ WAS¿¡ ÀÇÁ¸ÀûÀÌÁö ¾ÊÀ¸¹Ç·Î ¸ðµç WAS¿¡ Àû¿ë °¡´É
  • URL º° À¯¿¬ÇÑ ¼³Á¤ÀÌ ¾î·Á¿ò
    (ProxyPassMatch »ç¿ë ÇÊ¿ä)
     
 
    


Tomcat Connector mod_jk

mod_jk compile

  • RHEL6/CentOS 6 ±âÁØÀ̸ç compile À» ÇÏ·Á¸é »çÀü¿¡ gcc ¿Í httpd-devel ÆÐÅ°Áö°¡ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. (yum install gcc gcc-c++ httpd-devel)
  • mod_jk compile ÀÌ ±ÍÂúÀ¸¸é ÷ºÎµÇ¾î ÀÖ´Â pre-compiled connector ¸¦ ´Ù¿î¹ÞÀº ÈÄ¿¡/etc/httpd/moduels ¿¡ º¹»çÇØ ÁØ´Ù.
  1. http://tomcat.apache.org/download-connectors.cgi ¿¡¼­ ¼Ò½º  download (ÇöÀç 1.2.37)
    1. wget http://ftp.daum.net/apache//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz
  2. tar zxvf tomcat-connectors-1.2.37-src.tar.gz
  3. cd tomcat-connectors-1.2.37-src/native
  4. ./configure --with-apxs=/usr/sbin/apxs
  5. make 
  6. make install

 

make install ÈÄ /etc/httpd/modules/mod_jk.so ¿¡ º¹»ç°¡ µÈ´Ù. 

SELinux ¸¦ »ç¿ëÇÑ´Ù¸é mod_jk.so ¿¡ httpd_modules_t Context °¡ ¼³Á¤µÇ¾î¾ß apache httpd °¡ ÀÐÀ» ¼ö ÀÖ´Ù. ´ÙÀ½ ¸í·É¾î·Î ¼³Á¤ÇÏÀÚ.

 

chcon -u system_u -r object_r -t httpd_modules_t /etc/httpd/modules/mod_jk.so

 

Apache httpd ¼³Á¤

  1. cd /etc/httpd
  2. vim conf/httpd.conf 

    LoadModule jk_module modules/mod_jk.so

     

  3. vim conf.d/mod_jk.conf 

    <IfModule mod_jk.c>
      # Where to find workers.properties
      JkWorkersFile conf/workers_jk.properties
       
      # Where to put jk shared memory
      JkShmFile run/mod_jk.shm
       
      # Where to put jk logs
      JkLogFile logs/mod_jk.log
       
      # Set the jk log level [debug/error/info]
      JkLogLevel info
       
      # Select the timestamp log format
      JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
     
      ## url pattern ¿¡ µû¸¥ connector mapping
      ##JkMountFile conf/uriworkermap.properties
    </IfModule>

     

  4. vim conf/workers_jk.properties 

    (Á¤º¸) tomcat Àº server1, server2 µÎ ´ë¿¡ ¼³Ä¡µÇ¾î ÀÖ°í Connector Port´Â 8009 ¶ó °¡Á¤

    (Á¤º¸) TomcatÀÇ AJP Connector °¡ listenÇÏ´Â Port´Â tomatÀÇ conf/server.xml ¿¡¼­ ´ÙÀ½ Ç׸ñ¿¡¼­ È®ÀÎÇÒ º¼ ¼ö ÀÖ´Ù.

    tomcat Àº ±âº» URIEncoding ÀÌ ISO-8859-1 À̹ǷΠÇѱÛÀÌ ±úÁö¹Ç·Î ¸ðµç Ä¿³ØÅÍ ¼³Á¤¿¡ URIEncoding="UTF-8" À» Ãß°¡ÇØ¾ß ÇÑ´Ù.

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

     

    ajp protocol connector ¼³Á¤
    worker.list=worker1, worker2
    worker.worker1.port=8009
    worker.worker1.host=server1
    worker.worker1.type=ajp13
    worker.worker1.lbfactor=1
     
    ## server 2
    worker.worker2.port=8009
    worker.worker2.host=server2
    worker.worker2.type=ajp13
    worker.worker2.lbfactor=1
  5. vim conf/uriworkermap.properties  - ¾î¶² url ¿äû¿¡ ´ëÇØ tomcat °ú ¿¬°èÇÒÁö ¼³Á¤ÇÑ´Ù. (uriworkermap.properties configuration ) 

    ## Mapping the URI /service1 under worker1
    /service1/*.do=worker1
    /service1/*.jsp=worker1
     
    # /service2 ¿äûÀ¸·Î µé¾î¿Â °ÍÀº worker2 ·Î mount
    /service2/*=worker2
     
    # png¿Í jpg ´Â apache °¡ ó¸®
    !/service2/*.png=worker2
    !/service2/*.jpg=worker2
    ## ¾Æ·¡¿Í °°ÀÌ ¼³Á¤ÇÏ¸é ¸ðµç ¿äû(jsp, do, image, jsµî)À» tomcatÀ¸·Î º¸³»¼­ ó¸®ÇÑ´Ù.
    /*=worker1
  6. service httpd restart
  7. Browser ·Î ¿¬°áÇÏ¿© Á¤»ó µ¿ÀÛ ¿©ºÎ È®ÀÎ

TroubleShooting

 

mod_proxy »ç¿ë

reverse proxy ·Î µ¿ÀÛÇÏ´Â ¸ðµâÀÌ´Ù. º¸¾È»ó ¹®Á¦°¡ ÀÖÀ» ¼ö ÀÖÀ¸¹Ç·Î reverse proxy ¿¡ ´ëÇؼ­ ¼÷ÁöÇÑ ÈÄ¿¡ ¼³Á¤ÇÏ´Â °ÍÀ» ±ÇÀåÇÑ´Ù. 

 

  1. mod_proxy.so ¿Í mod_proxy_http.so °¡ LoadModule ·Î ·ÎµùÇØ¾ß ÇÑ´Ù. (RHEL/CentOS ´Â ±âº» ·ÎµùµÊ)

reverse proxy ·Î »ç¿ëÇÒ °æ¿ì ±âº»ÀûÀ¸·Î ¸ðµç clinet °¡ ¿¬°á °¡´ÉÇϹǷΠ³»ºÎ¿¡¼­¸¸ »ç¿ëÇØ¾ß ÇÏ´Â serviceµîÀÇ °æ¿ì Àû¿ë½Ã access control À» ¿©ºÎ¸¦ °ËÅäÇØ¾ß ÇÑ´Ù.

 

¼³Á¤ ¿¹
  1. WAS IP °¡ 192.168.10.100ÀÌ°í WebApp À̸§ÀÌ mywebapp

  2. Web ServerÀÇ VirtualHost À̸§Àº dummy-host.example.com

 

httpd.conf
<VirtualHost *:80>
    ServerName dummy-host.example.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
 
    # Put this in the main section of your configuration (or desired virtual host, if using Apache virtual hosts)
    ProxyRequests Off
    ProxyPreserveHost On
  
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
     
    ## mywebapp ¼³Á¤
    ProxyPass /mywebapp http://192.168.10.100:8080/mywebapp
    ProxyPassReverse /mywebapp http://192.168.10.100:8080/mywebapp
    <Location /mywebapp>
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>
  • ProxyRequests - On ÀÏ °æ¿ì Forward Proxy ·Î µ¿ÀÛÇϸç Off ÀÏ °æ¿ì Reverse Proxy ÀÌ´Ù.
  • ProxyPreserveHost - On ÀÏ °æ¿ì HTTP ¿äû Çì´õÁß Host: ºÎºÐÀ» À¯ÁöÇÑ´Ù.

 

 httpd´Â /mywebapp/foo, /mywebapp/bar ¸ðµÎ 192.168.10.100:8080/mywebapp ¿¡ ¿¬°áÇÏ°Ô µÈ´Ù. ¸¸¾à ƯÁ¤ URL ÆÐÅÏÀº reverse proxy ·Î µ¿ÀÛÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù¸é ProxyPassMatch À¸·Î URL À» ó¸®ÇÒ ¼ö ÀÖ´Ù.

 # /mywebapp/bar ÇÏÀ§ÀÇ URL Àº Á¢±Ù ±ÝÁö
 ProxyPassMatch ^/mywebapp/bar[^.]+ !
 ProxyPass /mywebapp http://192.168.10.100/mywebapp
 ProxyPass /mywebapp http://192.168.10.100/mywebapp
 ProxyPassReverse /mywebapp http://192.168.10.100/mywebapp
 <Location /mywebapp>
     Order allow,deny
     Allow from all
 </Location>
SSL PROXY

SSL ÀÏ °æ¿ì Proxy ±â´ÉÀÌ ²¨Á® ÀÖ´Ù. SSL ÇÁ·ÎÅäÄÝÀ϶§µµ mod_proxy  ¸¦ »ç¿ëÇÏ·Á¸é °¡»ó È£½ºÆ® Ç׸ñ¿¡ ´ÙÀ½ ³»¿ëÀ» Ãß°¡ÇØ¾ß ÇÑ´Ù.

<VirtualHost _default_:443>
    SSLProxyEngine on
</VirtualHost>

 

 


 

TODO

mod_proxy_balancer Àû¿ë¿¹Á¦ Ãß°¡

 

mod_proxy_ajp »ç¿ë

 AJP13 protocolÀ» »ç¿ëÇؼ­ reverse proxy ·Î µ¿ÀÛÇÏ´Â ¹æ½ÄÀÌ´Ù. http reverse proxy ¿Í ºñ½ÁÇÏÁö¸¸ protocol À» ajp ·Î Àû¾îÁÖ¸é µÈ´Ù.

ProxyPass /app ajp://backend.example.com:8009/app

 

°°ÀÌ º¸±â

 

¿ÜºÎ ¸µÅ©