Apache 2 with Tomcat 6

พอดีหัวหน้าผมให้ทำการ Config Server เป็น Apache Tomcat กับ Database MySQL ก็เลยได้เวลา + โอกาส ปล่อยของที่สะสมไว้ ตอนนี้เริ่มจากทำอย่างไงให้ Tomcat เปลี่ยนจากรับ Request ที่ Port 8080 (Default Port) มาเป็น Port 80 ก่อน

โดยปกติ Tomcat จะเป็น Servlet Containner ที่สามารถ Run Standalone ได้อยู่แล้ว (คือสามารถ run ได้เลยไม่ต้องติดตั้งหรือ Register อะไรทั้งสิ้น) แต่มันจะตั้ง Listener ไว้ที่ 8080 ซึ่งโดย Standard HTTP Request มันน่าจะเป็น Port 80 ดังนั้นเราจะมา Config ให้ Tomcate สามารถรับ Request จาก Port 80 กัน

บ้างคนอาจมีคำถามว่าทำไมไม่ไป Config server.xml ให้ Tomcat เปลี่ยนจาก Port 8080 เป้น 80 ก็น่าจะใช้งานได้เลยหรือเปล่า คำตอบคือได้ครับแต่มันไม่หล่อ ไปดูวิธีที่ผม google มากันดีกว่า

How To Configure แปลจาก link

อย่างที่บอกครับ Tomcat สามารถทำงานแบบ standalone ได้เลยบน server แต่บ่อยครั้งที่ Tomcat จะถูกนำไปทำ servlet/JSP container เป้น add-on (เชื่อมต่อ) กับ Apache HTTP Server หรือแม้แต่ IIS server เอง โดยที่ถ้าเป็นการจัดการ Request ที่เป็น servlet หรือ JSPs จะทำการส่งให้ Tomcat ประมวลผล ในขณะที่ถ้าเป็น Request ที่เป็น HTML หรือ Static page อื่นๆ ให้ Apache ทำงาน สาเหตุที่ทั่วๆไปมักจะไม่ใช้ Tomcat Standalone Server

  • Tomcat ทำงานกับ Static pages ได้ไม่เร็วเท่ากับ Apache
  • Tomcat Config เพิ่มเติมได้ไม่เท่ากับ Apache
  • Apache เสถียรกว่า Tomcat
  • Tomcat ไม่เหมาะสมกับการทำงานหลายอย่างร่วมกัน เช่น Apache กับ PHP หรือ Perl
  • เพิ่มเติมมันไม่หล่อ

ก่อนที่จะทำการ Config ให้ Tomcat ทำงานร่วมกันกับ Apache HTTP Server เขาแนะนำให้เราอ่าน Document ของ Tomcat Connector อย่างถี่ถ้วน(thoroughly)ก่อน แต่แน่นอนเทพๆอย่างเรา ไม่อ่าน - -‘

ทำยังไงล่ะให้ Apache ต่อกับ Tomcat

  • โหลด “adapter” โมดูลที่ใช้ติดต่อกับ Apache JServ Protocal (AJP) ซึ่งจะทำการเชื่อมต่อกับ Tomcat ผ่าน Port 8009 ซึ่งเป้น Default (อีกแล้ว) ของ Tomcat
  • พอมี Request มา Apache จะทำการตรวจสอบว่า Request นั้นเป็นของ tomcat หรือเปล่า ถ้าใช้จะทำการ forward ต่อให้ Tomcat ทำงาน

 

ApacheHTTP

ในตัวอย่างที่เขาให้ใช้โมดูล “JK2” แน่นอนผมว่าง่ายเขาให้ใช้อะไรผมใช้ด้วย

มีสองอย่างที่ต้องเตรียมก่อนตามนี้ครับ

Step 0.1: Install Apache HTTP Server

แน่ละก็จะใช้งานเขาไม่ Install แล้วมันจะใช้งานได้ยังไง - -‘ ไปหาอ่านกันเอาเองนะครับ ที่นี่ เพราะผมใช้งานบน Redhat5 มี Apache HTTP Server ติดมาให้แล้ว

image

Step 0.2: Install Tomcat

ก็ไม่มีอะไรครับ Install Tomcat รายละเอียดเพิ่มเติมไปหาอ่านกันเอานะครับเดี๊ยวหลุด Scope เรื่อง Install Tomcat เนี่ยร่ายเป็นวันก็ไม่จบ แล้วก็ Check ซะหน่อยวา webapplication เราสุขภาพดีอยู่เดี๊ยวทำๆไปแล้วจะงงเอ๋ทำไปแล้วทำไมไม่ได้สักที

Step 1: Download the Apache-Tomcat Connector (เริ่มทำของจริง)

Download “JK1.2 module” จากหน้า Website ของ Tomcat ที่ให้เข้าไปอ่านก่อนนั้นแหละครับ ตรง Download => Tomcat Conectors ของผมใช้ Version mod_jk-1.2.28-httpd-2.2.X.so เพราะ Apache HTTP Server ผม Version 2.2.3 และผม Complie เองบน Linux ไม่เป็น

ได้มาแล้วก็เปลี่ยนชื่อมันซะให้เป็น "mod_jk.so" แล้วนำไปวางไว้ที่ modules path ของ Apache HTTP Server (ของผมอยู่ที่ etc/httpd/modules/)

Step 2: Configure Apache

มาถึงขั้นตอนที่จะทำอย่างไงให้ Apache โหลด Mod JK ไปใช้งาน

เริ่มสร้าง Configuration file ที่ชื่อว่า "mod_jk.conf" ไว้ที่ Tomcat’s Conf (/opt/tomcat/Conf) รายละเอียดตามนี้ครับ

# Load mod_jk module
# Update this path to match your modules location
LoadModule jk_module /etc/httpd/modules/mod_jk.so

# Where to find workers.properties
# Update this path to match your conf directory location
JkWorkersFile /opt/tomcat/conf/workers.properties

# Where to put jk logs
# Update this path to match your logs directory location
JkLogFile /opt/tomcat/logs/mod_jk.log

# Set the jk log level [debug/error/info]
JkLogLevel info

# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

# Send everything for context /examples to worker ajp13
JkMount /examples ajp13
JkMount /examples/* ajp13

# Send everything for context /matador to worker ajp13
JkMount /matador ajp13
JkMount /matador/* ajp13

LoadModule เป็นการบอกให้ Apache ทำการโหลดโมดุล jk_module เพิ่มเติม ผมใส่เป็น Fullpath /etc/httpd/modules/mod_jk.so
JkWorkersFile บอก jk_module ว่า Configuration Files อยู่ที่ไหน
JkMount บอกว่า Mount path ไหนของ Tomcat

จากนั้นให้ทำการแก้ไข Apache’s Configuration โดยเพิ่ม include statement ไว้ท้ายของไฟล์ httpd.conf (/etc/httpd/httpd.conf)

include /opt/tomcat/conf/mod_jk.conf



ขั้นต่อไปสร้าง “workers.properties” ไว้ในที่ที่เราตั้งค่าให้มันไปอ่านไว้ /opt/tomcat/conf/workers.properties นั้นเอง




# Define 1 real worker named ajp13worker.list=ajp13# Set properties for worker named ajp13 to use ajp13 protocol,# and run on port 8009worker.ajp13.type=ajp13 worker.ajp13.host=localhostworker.ajp13.port=8009worker.ajp13.lbfactor=50 worker.ajp13.cachesize=10worker.ajp13.cache_timeout=600 worker.ajp13.socket_keepalive=1worker.ajp13.socket_timeout=300




Note: The JKMount statements forward the requests to a worker called "ajp13", which is defined in this "workers.properties".


Step 3: Configure Tomcat


ไปที่ Default configuration ของ Tomcat “/opt/tomcat/conf/server.xml” หาบรรทัด AJP/1.3  ซึ่งเป็นบรรทัดที่ config ให้ทำงานกับ AJP โดย Default จะ Config ไว้ที่ Port 8009 ถ้าไม่เป้นตามนี้ก็แต่ตามนี้ครับ




<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />



Step 4: Start the Apache with the JK module


ง่ายๆสั้นๆครับ




httpd -k restart



Step 5: Start the Tomcat server



/opt/tomcat/bin/startup.sh




และดู Tomcat Log น่าจะมีประมาณนี้




……



[Mon Jun 07 11:12:02 2010][27105:3086796496] [warn] jk_map_validate_property::jk_map.c (411): The attribute 'worker.ajp13.cachesize' is deprecated - please check the documentation for the correct replacement.



[Mon Jun 07 11:12:02 2010][27105:3086796496] [warn] jk_map_validate_property::jk_map.c (411): The attribute 'worker.ajp13.cache_timeout' is deprecated - please check the documentation for the correct replacement.



[Mon Jun 07 11:12:02 2010][27105:3086796496] [info] init_jk::mod_jk.c (3183): mod_jk/1.2.28 initialized



……




Step 6: Verify the Installation


ขั้นตอนสุดท้ายลองใช้งานครับ





















http://hostname:8080/examples Access Tomcat directly
http://hostname:8000/matador Try Matador servlet via Apache
http://hostname:8000/examples Try examples via Apache


จบแล้วครับคราวหน้าหาวิธี config AAA, Kerberos(รู้จักกันในนาม AD Authen) Apache กับ Tomcat ได้จะเอามาฝากอีกทีครับ

ความคิดเห็น

บทความที่ได้รับความนิยม