Sunday, December 23, 2012

ลักษณะทางกายภาพของอาปาเช่

ลักษณะทางกายภาพของอาปาเช่

อาปาเช่ถูกสร้างขึ้นจากการนำเอาโปรแกรมขนาดเล็กที่ทำหน้าที่แตกต่าง กันหลายโมดูลมาทำงานร่วมกันเป็นเว็บเซิร์ฟเวอร์ จึงทำให้มีส่วนประกอบเป็นโมดูล ( ที่พัฒนาด้วยภาษาซี ) ส่วนหนึ่งจะเป็นส่วนแกนกลางที่ทำหน้าที่บริหารจัดการทั้งหมด เรียกว่า Core.c โมดูลต่อมาคือ โมดูลที่ทำหน้าที่บริหารหน่วยความจำ ( Memory Management ) และบริหารโปรเซสงานย่อย ( Child Process ) ที่รองรับการให้บริการที่เรียกเข้ามาพร้อม ๆ กันจำนวนมากจากภายนอก ( Multi-Processing Models หรือ MPM ) ซึ่งอาปาเช่มีโมเดลการทำงานด้านนี้รองรับไว้ 3 โมเดลด้วยกัน คือ Workers สำหรับรองรับงานจำนวนมากๆ ในขณะที่ต้องการหน่วยความจำไมามากนัก Prefork สำหรับงานที่ต้องการประสิทธิภาพและความเร็วแต่จะต้องใช้ทรัพยากรระบบมากกว่า และ Per Child ออกแบบมาเพื่อรองรับงานได้แตกต่างกันโดยแยกตามยูสเซอร์ที่ร้องขอบริการเข้า มา ( ขณะนี้อยู่ระหว่างการพัฒนา ) โมดูล http_core.c จะทำหน้าที่รองรับการประมวลผลด้วยโปรโตคอล HTTP ( Hyper Text Transfer Protocol ) ซึ่งจะจัดการกับส่วนเฮดเดอร์ตามมาตรฐาน NCSA และโมดูล mod_so.c จะทำหน้าที่ติดต่อประสานการทำงานโมดูลภายในเข้ากับกับ Shared Modules อื่น ๆ ที่อยู่ภายนอก ซึ่งโมดูลภายนอกเหล่านี้เราเรียกว่า Dynamic Shared Object หรือ DSO จะมีจำนวนมากน้อยก็ขึ้นอยู่กับความต้องการใช้งานของผู้ใช้ โดยจะกำหนดได้ในขณะที่คอมไพล์โปรแกรมอาปาเช่ สำหรับกรณีของ Red Hat 9.0 จะมีการคอมไพล์มาให้เรียบร้อยแล้ว และมีโมดูล DSO ที่มีคุณสมบัติด้านต่าง ๆ เพียงพอต่อการใช้งานทั่วไป เช่น การสนับสนุนภาษาสคริปต์ การทำ Authentication แบบต่าง ๆ การสนับสนุน Server Side Include เป็นต้น โดยในส่วนของแกนกลางหรือ MPM จะเป็นโมเดลแบบ prefork เราสามารถตรวจสอบดูส่วนประกอบของอาปาเช่ได้ด้วยคำสั่งตามรูปที่ 4


รูปที่ 4 รายชื่อโมดูลที่เป็นส่วนประกอบของอาปาเช่ใน Red Hat 9.0

โครงสร้างไดเร็คทอรี่ที่สำคัญ ในฐานะผู้ดูแลระบบที่จะต้องคอนฟิก Red Hat Linux ให้ทำหน้าที่เป็นเว็บเซิร์ฟเวอร์ สิ่งที่จำเป็นต้องทราบในเบื้องต้นก็คือ เรื่องไดเร็คทอรี่ของอาปาเช่ ซึ่งแบ่งออกได้ 3 ส่วนใหญ่ ๆ คือ ServerRoot ,DocumentRoot และ ScriptAlias ServerRoot หมายถึง ไดเร็คทอรี่ที่เป็นจุดเริ่มต้นของส่วนประกอบด้านคอนฟิกทั้งหมดของอาปาเช่ สำหรับ Red Hat Linux 9.0 คือที่ /etc/httpd ซึ่งจะแยกออกเป็น build สำหรับการเพิ่มโมดูลเข้าสู่เว็บเซิร์ฟเวอร์ conf เป็นที่เก็บคอนฟิกไฟล์หลักคือ httpd.conf นั่นเอง conf.d เป็นไดเร็คทอรี่ที่ใช้เพิ่มเติมไฟล์คอนฟิกย่อยให้แก่เว็บเซิร์ฟเวอร์เพื่อ ความสะดวกในการปรับแก้คอนฟิกได้สะดวกกว่าการแก้ไขที่ httpd.conf เพียงจุดเดียว logs เป็นไดเร็คทอรี่ที่ใช้เก็บล๊อกไฟล์ที่บันทึกเหตุการณ์ต่าง ๆ ที่เกิดขึ้นกับเว็บเซิร์ฟเวอร์ modules เป็นไดเร็คทอรี่ที่เก็บไฟล์โมดูล DSO ทั้งหมดไว้ และ run เป็นไดเร็คทอรี่ที่เก็บบันทึกหมายเลขโปรเซสของอาปาเช่ไว้เพื่อการควบคุมโป รเซสทั้งจากภายในและภายนอกเซิร์ฟเวอร์เอง โครงสร้างของ ServerRoot
แสดงดังรูปที่ 5


รูปที่ 5 โครงสร้างของ ServerRoot

DocumentRoot เป็นไดเร็คทอรี่ที่ผู้ใช้งานมักจะให้ความสำคัญที่สุด เพราะ document หรือเอกสารภาษา HTML ที่เราต้องการเผยแพร่ผ่านทางเว็บเซิร์ฟเวอร์จะเริ่มต้นแสดงผลเป็นหน้าแรกจาก ไดเร็คทอรี่นี้นั่นเอง หรือจะมองว่าเป็น Home Page เลยก็ได้ สำหรับ Red Hat Linux 9.0 จะกำหนดให้ไดเร็คทอรี่ /var/www/html เป็น DocumentRoot ของอาปาเช่ ซึ่งผู้ดูแลระบบอาจจะไปเปลี่ยนแปลงให้ใช้ไดเร็คทอรี่อื่นทำหน้าที่นี้แทนได้ ตามต้องการ โดยที่สามารถทำได้หลายวิธีซึ่งผู้เขียนจะสาธิตให้เป็นตัวอย่างดังรูปที่ 6 เป็นการกำหนด DocumentRoot ใหม่ไปที่ไดเร็คทอรี่ /itdestination.com โดยสร้างรอไว้ก่อน จากนั้นเปลี่ยนชื่อ /var/www/html ของเดิมที่มากับ Red Hat Linux ไปเป็นชื่อ /var/www/html.original และสุดท้ายจึงใช้ Symbolic Link สร้างจุดเชื่อมโยงชื่อ html ขึ้นแทนที่เพื่อนำเข้าสู่ /itdestination.com เป็นอันเสร็จสิ้นการย้ายตำแหน่งไดเร็คทอรี่ DocumentRoot โดยไม่ต้องแก้ไขคอนฟิกของอาปาเช่เลยแม้แต่บรรทัดเดียว


รูปที่ 6 สาธิตวิธีการย้ายตำแหน่ง DocumentRoot อย่างรวดเร็ว

ScriptAlias ไดเร็คทอรี่นี่จะถูกกำหนดให้เป็นที่รันโปรแกรม CGI ( Common Gateway Interface ) โดยเฉพาะซึ่งมีลักษณะเป็นโปรแกรมสคริปต์หรือไบนารี่ก็ได้ที่รันในฝั่ง เว็บเซิร์ฟเวอร์ แล้วจึงส่งผลลัพธ์ของโปรแกรมกลับไปยังหน้าเว็บเพจที่ผู้ชมเว็บเพจอีกครั้ง ( เช่น โปรแกรมนับจำนวนผู้เข้าชมเว็บ ) สำหรับ Red Hat Linux 9.0 จะถูกกำหนดค่าไว้ที่ /var/www/cgi-bin ซึ่งผู้ดูแลระบบจะโยกย้ายไปใช้พื้นที่อื่นได้เช่นเดียวกับ DocumentRoot อย่างไรก็ตามในปัจจุบันโปรแกรมประเภท CGI มีการใช้งานที่ลดน้อยลงไปอย่างเห็นได้ชัด ซึ่งกำลังถูกแทนที่โดยภาษาสคริปต์ประเภท HTML Embedded นั่นเอง

0 comments:

Post a Comment

Twitter Delicious Facebook Digg Stumbleupon Favorites More