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

CentOS7 + Apache + Tomcat8 ¿¬µ¿(mod_jk)

ÈÞ°í
Ãßõ ¼ö 199

CentOS7 + Apache + Tomcat8 ¿¬µ¿(mod_jk)

°³¿ä

À̹ø¿¡´Â CentOS7 ȯ°æ¿¡¼­ ¾ÆÆÄÄ¡ httpd¿Í tomcat8À» ¿¬µ¿ÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. Æò¼Ò À¥ ȯ°æÀ» ±¸ÃàÇؾßÇÏ´Â °æ¿ì°¡ ¸¹Àºµ¥ ¸Å¹ø ÇÒ ¶§¸¶´Ù ±î¸Ô°í ã°í ÇÏ´Â ½Ã°£ÀÌ ³Ê¹« ¿À·¡ °É¸®´Â °Í°°¾Æ À̹ø¿¡ ´Ù½Ã ȯ°æÀ» ¸¸µé¸é¼­ ¼³Ä¡ ¼ø¼­¸¦ ±â·ÏÀ¸·Î ³²°å½À´Ï´Ù. ±âº»ÀûÀΠȯ°æ ±¸ÃุÀ» ¸ñÇ¥·Î Çϱ⠶§¹®¿¡ °£´ÜÇÏ°í Ãß°¡µÇ´Â ¼³Á¤Àº ¾ø½À´Ï´Ù. ȯ°æÀ» ±¸ÃàÇÏ°í ³­ µÚ¿¡ ÇÊ¿äÇϽŠ¿É¼ÇÀ» Ãß°¡Çؼ­ »ç¿ëÇϼ¼¿ä~! Áö±Ý ºÎÅÍ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.


ȯ°æÀ» ±¸ÃàÇϱâ À§ÇÑ ÆÐÅ°Áö ¹× Apache Httpd ¼³Ä¡

¿ì¼± ȯ°æÀ» ±¸ÃàÇϱâ À§Çؼ­ ÇÊ¿ä·Î ÇÏ´Â ÆÐÅ°Áö¸¦ Çѹø¿¡ ¼³Ä¡Çϵµ·Ï ÇÏ°Ú½À´Ï´Ù.

yum install -y gcc gcc-c++ httpd-devel java-1.8.0-openjdk-devel.x86_64 wget libtool make

±âº»ÀûÀ¸·Î libtoolgccȯ°æ°ú java jdk°¡ ¼³Ä¡ µÇ¾î ÀÖ¾î¾ßÇϸç, wgetÀ̳ª make´Â ¼³Ä¡°¡ ¾ÈµÇ ÀÖÀ¸½Å ºÐµéÀº À§ÇØ ³Ö¾ú½À´Ï´Ù. ÀÌ¿Í ÇÔ²² Á¦ÀÏ ¼³Ä¡Çϱ⠽¬¿î ¾ÆÆÄÄ¡ ¼³Ä¡´Â httpd-develÀ» ÅëÇؼ­ ¼³Ä¡°¡ °¡´ÉÇÕ´Ï´Ù. À§ ¸í·É¾î¸¦ ÀÌ¿ëÇϸé ȯ°æÀ» ±¸ÃàÇϴµ¥ ÀÖ¾î ÇÊ¿ä·ÎÇÏ´Â ÆÐÅ°Áöµé°ú apache°¡ ¼³Ä¡°¡ ¿Ï·á Çϼ̽À´Ï´Ù.

Tomcat8 ¼³Ä¡

Àú´Â tomcat8À» ¼³Ä¡ ÇÏ°Ô µÇ¾ú´Âµ¥¿ä. À̴ http://tomcat.apache.org/download-80.cgi¿¡ µé¾î°¡½Ã¸é ÃֽŹöÀüÀÇ ÅèĹ tar.gz¾ÐÃà ÆÄÀÏÀ» ¹ÞÀ¸½Ç ¼ö ÀÖ½À´Ï´Ù.

wget http://mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.23/bin/apache-tomcat-8.5.23.tar.gz
tar zxvf apache-tomcat-8.5.23.tar.gz
mv apache-tomcat-8.5.23.tar.gz /opt/tomcat

À§¿Í °°Àº ¸í·É¾î¸¦ ÅëÇؼ­ ÇöÀç Æú´õ¿¡ ÅèĹ ¾ÐÃàÆÄÀÏÀ» ¹Þ¾Æ¿É´Ï´Ù. ±× ÈÄ tar¸í·É¾î¸¦ ÅëÇØ ¾ÐÃàÀ» Ç®¾îÁÖ°í ³­ µÚ¿¡ ÇØ´ç Æú´õ¸¦ ±×´ë·Î /opt/tomcatÀ¸·Î À̵¿À» ½ÃÄÑÁÝ´Ï´Ù.

sudo groupadd tomcat
sudo useradd -M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat
sudo chown -R tomcat:tomcat /opt/tomcat

±× ÈÄ ÅèĹÀ» »ç¿ëÇÏ´Â À¯Àú¸¦ ÁöÁ¤ÇØÁּžßÇÕ´Ï´Ù. tomcat±×·ì°ú tomcatÀ¯Àú¸¦ »ý¼ºÇϸ鼭 ±¸µ¿ÆÄÀϵéÀ» ¿Å°Ü³ù´ø /opt/tomcatÀ» ÁöÁ¤ÇØÁÖ°í, ÇØ´ç Æú´õÀÇ ¼ÒÀ¯ÀÚ¸¦ tomcatÀ¸·Î º¯°æÇØÁÖ½Ã¸é µË´Ï´Ù.

±× ´ÙÀ½¿¡´Â ÅèĹÀ» ¼­ºñ½º¿¡¼­ µî·ÏÇÏ°í ¼­¹ö°¡ ºÎÆÃµÉ ¶§ ¹Ù·Î ÄÑÁöµµ·Ï ¼³Á¤À» ÇÒ °ÍÀÔ´Ï´Ù. ¼öµ¿À¸·Î ÄÑ°í ²ô½Ã´Â °Í¸¸ ÇÏ½Ç °æ¿ì¿¡´Â ¼­ºñ½º¸¸ µî·ÏÇϽðí chkconfig ¸í·É¾î¸¸ ÀÔ·Â ¾ÈÇϼŵµ ±¦Âú½À´Ï´Ù.

Tomcat ¼­ºñ½º ÆÄÀÏ »ý¼º

vim /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

JAVA_HOME°ú °°Àº °æ¿ì¿¡´Â Ȥ½Ã³ª ´Ù¸¦±î ½Í¾î ÇØ´çÇÏ´Â °æ·Î¸¦ °¡Á®¿À´Â ¹æ¹ý±îÁö ÷ºÎÇÕ´Ï´Ù.

which javac
readlink -f {which javac·Î ³ª¿Â °æ·Î¸¦ ÀÔ·Â}

À§¿Í °°Àº ¸í·É¾î·Î java°¡ ºÒ·ÁÁö´Â ÆÄÀÏ ¸µÅ©ÀÇ Àý´ë°æ·Î¸¦ ÀÐ¾î ¿Ã ¼ö ÀÖ½À´Ï´Ù. ¸í·É¾î·Î ¾òÀº ÁÖ¼Ò¿¡¼­ bin°æ·Î Àü±îÁöÀÇ °æ·Î¸¦ JAVA_HOME¿¡ ÀÔ·ÂÇϽøéµË´Ï´Ù.

Tomcat ¼­¹ö ºÎÆýà ÀÚµ¿½ÃÀÛ

chkconfig tomcat on

chkconfig¸¦ ÅëÇؼ­ tomcat¼­ºñ½º°¡ ÀÚµ¿À¸·Î ½ÃÀ۵ǵµ·Ï Ãß°¡ÇØÁÖ½Ã¸é µË´Ï´Ù.

Apache Httpd¿Í Tomcat ¿¬µ¿(mod_jk)

Apache¿Í tomcatÀ» ¿¬µ¿Çϱâ À§Çؼ­´Â ¸ðµâÀÌ ÇÊ¿äÇѵ¥¿ä. °¡Àå ¸¹ÀÌ »ç¿ëÇϴ mod_jk¸¦ ÀÌ¿ëÇؼ­ ¿¬µ¿Çغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. ¿ì¼± mod_jk¸¦ ¼³Ä¡ÆÄÀÏÀ» ´Ù¿î ¹Þ¾Æ¾ßÇÕ´Ï´Ù. ÆÄÀÏÀº http://tomcat.apache.org/download-connectors.cgi¿¡¼­ ´Ù¿î·Îµå ¹ÞÀ¸½Ç ¼ö ÀÖ½À´Ï´Ù.

wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz
tar zxvf tomcat-connectors-1.2.42-src.tar.gz
cd tomcat-connectors-1.2.42-src/native/

´Ù¿î·Îµå¸¦ ¹ÞÀ¸½Å ÈÄ ¾ÐÃàÀ» Ǫ½Å´ÙÀ½¿¡ ÇØ´ç Æú´õ¿¡ nativeÆú´õ·Î µé¾î°¡¼Å¼­ ¼³Ä¡¸¦ ÇÏ¼Å¾ß ÇÕ´Ï´Ù.

./buildconf.sh
./configure --with-apxs=/usr/bin/apxs
make
make install

À§¿Í °°Àº ¼ø¼­´ë·Î ¼³Ä¡¸¦ ÁøÇàÇØÁÖ¼¼¿ä. Ȥ½Ã³ª ´Ù¸¥ ¸®´ª½º ȯ°æ¿¡¼­ ¼³Ä¡¸¦ ÇϽô °æ¿ì¿¡´Â --with-apxsÀÇ Æú´õ À§Ä¡°¡ ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ ȯ°æ¿¡¼­ ÁøÇà ½Ã apxs¸¦ ãÁö ¸øÇÏ´Â ¿À·ù°¡ ÀÖÀ¸½Ç °æ¿ì¿¡´Â ¸®´ª½º ȯ°æ¿¡ ¸Â´Â °æ·Î¸¦ µû·Î ãÀ¸¼Å¼­ Àû¿ëÇØÁÖ¼¼¿ä. CentOSÀÇ °æ¿ì¿¡´Â À§ ¸í·É¾î´ë·Î ¼³Ä¡ÇÏ½Ã¸é ¹®Á¦ ¾øÀÌ ¼³Ä¡°¡ ¿Ï·á¸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¿¬µ¿ ¼³Á¤

¼³Ä¡¸¦ ¸ðµÎ ¿Ï·á ÇϼÌÀ¸´Ï ÀÎÁ¦ httpd¿Í tomcat°£ ¼³Á¤À» ÇØÁּžßÇÕ´Ï´Ù. ¿ì¼± ¾ÆÆÄÄ¡ ¼³Á¤À» ÀâÀ» °ÍÀÔ´Ï´Ù. CentOS¸¦ »ç¿ëÇϽô °æ¿ì ¾ÆÆÄÄ¡ °ü·Ã Æú´õÀΠ/etc/httpd/¿¡¼­ Æú´õ ±¸Á¶°¡ confconf.dconf.modules.d¿Í °°ÀÌ ³ª´µ¾îÁ® ÀÖ½À´Ï´Ù. conf´Â ¾ÆÆÄÄ¡ÀÇ ¼³Á¤ÆÄÀϸ¸ Á¸ÀçÇϵµ·Ï ±¸¼ºµÇ¾îÀÖ°í Ãß°¡ÀûÀÎ ¸ðµâº° ¼³Á¤ °°Àº °ÍÀ» conf.d¿¡ »ý¼ºÇϼż­ »ç¿ëÇϽøé ÀÚµ¿À¸·Î ºÒ·¯¿Í Àû¿ëµÇ¾îÁý´Ï´Ù. conf.modules.d¿Í °°Àº °æ¿ì¿¡´Â »ç¿ëÇÒ ¸ðµâÀ» ºÒ·¯¿À´Â ¼³Á¤¸¸ Àû¿ëÇÏ´Â ÆÄÀϵéÀ» °ü¸®ÇÏ´Â Æú´õÀÔ´Ï´Ù.

cd /etc/httpd/conf.modules.d/
vim 00-jk.conf
LoadModule jk_module modules/mod_jk.so

¿ì¼± conf.module.dÆú´õ¿¡ mod_jk°ü·Ã ¸ðµâÀ» ºÒ·¯¿À±â À§ÇØ 00-jk.confÆÄÀÏÀ» »ý¼ºÇÏ°í LoadModule ~~À» ÀÔ·ÂÇÏ°í ÀúÀåÇØÁÖ¼¼¿ä. ÀÌ´Â ¹æ±ÝÀü ¼³Ä¡ÇÑ mod_jk¸ðµâÀ» ºÒ·¯¿Í jk_moduleÀ̶ó´Â À̸§À¸·Î ¸í¸íÇÏ´Â ±¸¹®ÀÔ´Ï´Ù.

cd /etc/httpd/conf.d/
vim httpd-jk.conf
<IfModule jk_module>

    # We need a workers file exactly once
    # and in the global server
    JkWorkersFile conf.d/workers.properties

    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    # Our JK error log
    # You can (and should) use rotatelogs here
    JkLogFile logs/mod_jk.log

    # Our JK log level (trace,debug,info,warn,error)
    JkLogLevel info

    # Our JK shared memory file
    JkShmFile logs/mod_jk.shm

    # If you want to put all mounts into an external file
    # that gets reloaded automatically after changes
    # (with a default latency of 1 minute),
    # you can define the name of the file here.
    JkMountFile conf.d/uriworkermap.properties

</IfModule>

±× ÈÄ ºÒ·¯¿Â ¸ðµâ¿¡ ´ëÇÑ ¼³Á¤À» ÁøÇàÇØ ÁÝ´Ï´Ù. ÁÖÀÇÇؼ­ º¸¼Å¾ß ÇÒ °ÍÀº JkWorkersFile°ú JkMountFileÀÔ´Ï´Ù. ÀüÀÚ´Â ÅèĹ ¼­¹öµéÀ» °¢°¢ ¼³Á¤ÇÏ´Â ¿ªÇÒÀ» ÇØÁÖ¸ç, ÈÄÀڴ ƯÁ¤ ÆÐÅÏÀ» °¡Áö´Â ÆÄÀÏÀ» ¿äûÇßÀ» ¶§ ¼­ºñ½ºÇÏ°íÀÚ ÇÏ´Â ÅèĹ ¼­¹ö¸¦ ÁöÁ¤ÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.

cd /etc/httpd/conf.d/
vim workers.properties
worker.list=instance1,instance2,instance3

worker.instance1.port=8109
worker.instance1.host=localhost
worker.instance1.type=ajp13
worker.instance1.lbfactor=1

worker.instance2.port=8209
worker.instance2.host=localhost
worker.instance2.type=ajp13
worker.instance2.lbfactor=1

worker.instance3.port=8309
worker.instance3.host=localhost
worker.instance3.type=ajp13
worker.instance3.lbfactor=1

workers.propertiesÆÄÀÏÀº À§¿Í°°ÀÌ ÅèĹ¼­¹ö°¡ 3°³ÀÏ °æ¿ì ÅèĹ¼­¹öÀÇ À̸§µéÀ» ¼³Á¤ÇÏ°í ÇØ´ç ¼­¹ö¿¡ ´ëÇÑ ¼³Á¤À» ÀÌ·çµµ·Ï µÇ¾îÀÖ½À´Ï´Ù. ±¸ÃàÇϽ÷Á´Â ȯ°æ¿¡ ¸Â°Ô ¿É¼ÇÀ» ¼³Á¤ÇØÁÖ½Ã¸é µË´Ï´Ù.

vim uriworkermap.properties
/*.jsp=instance1
/*.png=instance2
/*.css=instance3

uriworkermap.properties¿¡´Â ƯÁ¤ ÆÄÀÏ¿¡ ´ëÇؼ­ ¾î¶² ÅèĹ¼­¹ö°¡ ¼­ºñ½ºÇÒ °ÍÀÎÁö ¸ÊÇÎÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. ÇØ´çÇÏ´Â ÆÄÀϵéÀ» µû·Î ³ª´©¾î °ü¸®ÇÏ´Â ÀÌÀ¯´Â ÅèĹÀÌ ±âº» 10ºÐ¸¶´Ù ´Ù½ÃºÒ·¯¿Í Àû¿ëÇϱ⠶§¹®¿¡ ÅèĹ ¼³Á¤ º¯°æÀ» À§ÇØ ¼­ºñ½º¸¦ Àç½ÃÀÛÇÏÁö ¾ÊÀ¸¼Åµµ Àû¿ëÀÌ °¡´ÉÇÏ´Ù´Â ÀÌÁ¡ÀÌÀֱ⠶§¹®ÀÔ´Ï´Ù.

¼­ºñ½º Àç½ÃÀÛ

ÀÎÁ¦ ¸ðµç ¼³Á¤À» ¸¶¹«¸®Çß½À´Ï´Ù. httpd¼­ºñ½º¿Í tomcat¼­ºñ½º¸¦ Àç½ÃÀÛÇϼż­ ¼³Á¤µÈ ³»¿ëµéÀ» Àû¿ëÇÏ½Ã¸é µË´Ï´Ù.

service httpd restart
service tomcat restart

ÆÁ1: ¿¬µ¿ ¼³Á¤ÀÌ Á¤»óÀûÀ¸·Î Àû¿ëÀÌ µÇ´ÂÁö È®ÀÎÇÏ´Â ¹æ¹ý

¾ÆÆÄÄ¡ httpd¿¡´Â Á¤»óÀûÀ¸·Î ¼³Á¤ÆÄÀϵéÀÌ Á¤»óÀûÀÎ Syntax¸¦ °¡Áö°í ÀÖ´ÂÁö È®ÀÎÇÏ´Â ¸í·É¾î¸¦ ³»ÀåÇÏ°í ÀÖ½À´Ï´Ù.

apachectl configtest

ÆÁ2: ÅèĹ ÀÎÄÚµù¼³Á¤

ÅèĹ¿¡¼­ ÇѱÛÀ» »ç¿ëÇÒ ¶§ ÀÎÄÚµù ¹®Á¦·Î ±úÁö´Â ¹®Á¦°¡ ¹ß»ýÇÏ½Ç ¼ö Àֱ⠶§¹®¿¡ ÀÎÄÚµùÀ» ¼³Á¤À» ÇÏ¼Å¾ß ÇÕ´Ï´Ù.

vim /opt/tomcat/conf/server.xml
(»ý·«)
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
(»ý·«)

À§¿Í °°ÀÌ AJP Ä¿³ØÅÍ¿¡ URIEncoding="UTF-8"À» Àû¿ëÇÏ½Ã¸é µË´Ï´Ù.