วิธีตรวจสอบแก้ไขข้อผิดพลาดทั่วไปของ Apache 

เมื่อต้องดูแลเซิร์ฟเวอร์ Apache บนระบบปฏิบัติการ Linux การพบปัญหาและข้อผิดพลาด (Troubleshoot) เป็นสิ่งที่หลีกเลี่ยงไม่ได้ การแก้ไขปัญหาอย่างมีประสิทธิภาพจำเป็นต้องรู้จักคำสั่งที่สำคัญและตำแหน่งของไฟล์ล็อกที่ใช้บันทึกข้อมูลข้อผิดพลาด บทความนี้จะแนะนำวิธีการตรวจสอบและแก้ไขปัญหาเซิร์ฟเวอร์ Apache โดยใช้คำสั่งหลัก 3 คำสั่ง ได้แก่ systemctl, journalctl และ apachectl พร้อมกับไฟล์ล็อกเฉพาะที่สามารถใช้ในการค้นหาสาเหตุของปัญหา คำสั่งเหล่านี้และไฟล์ล็อกจะเป็นเครื่องมือสำคัญที่ช่วยให้คุณสามารถวิเคราะห์และแก้ไขปัญหาเซิร์ฟเวอร์ Apache ได้อย่างรวดเร็ว

คำสั่ง systemctl สำหรับ Apache

หากต้องการแก้ไขข้อผิดพลาดทั่วไป Apache โดยใช้ตัวจัดการบริการ systemd ขั้นตอนแรกคือการตรวจสอบสถานะของกระบวนการ Apache ในระบบ คำสั่ง systemctl ต่อไปนี้จะสอบถาม systemd เกี่ยวกับสถานะของกระบวนการ Apache

ในระบบ Ubuntu และ Debian ให้รันคำสั่ง

sudo systemctl status apache2.service -l --no-pager

-l flag จะช่วยให้แน่ใจว่าผลลัพธ์จะไม่ถูกตัดทอนหรือเป็นรูปวงรี –no-pager flag จะช่วยให้แน่ใจว่าผลลัพธ์จะถูกส่งไปยังเทอร์มินัลได้โดยตรงโดยไม่ต้องมีการโต้ตอบใดๆ จากคุณเพื่อดูผลลัพธ์และเราจะได้ผลลัพธ์ดังต่อไปนี้

ในการตรวจสอบกระบวนการ Apache บนระบบ CentOS และ Fedora ให้รัน

sudo systemctl status httpd.service -l --no-pager

หากเซิร์ฟเวอร์ Apache ไม่แสดงสถานะ Active (กำลังทำงาน) ตามรูปด้านบน สามารถคาดเดาได้ว่าอาจมีข้อผิดพลาดเกิดขึ้น โดยปกติ หากมีปัญหา จะมีข้อความในลักษณะต่อไปนี้ในผลลัพธ์ของคุณ (โปรดสังเกตส่วนที่ failed ไว้)

Active: failed (Result: exit-code) since Mon 2024-10-10 22:00:19 UTC; 1s ago

หากมีปัญหาเกิดขึ้นกับกระบวนการหรือการกำหนดค่า Apache ของคุณ คุณสามารถแก้ไขปัญหาเพิ่มเติมได้โดยใช้คำสั่ง journalctl

คำสั่ง journalctl สำหรับ Apache

ในการตรวจสอบบันทึกของ systemd สำหรับ Apache สามารถใช้คำสั่ง journalctl ซึ่งบันทึกของ systemd สำหรับ Apache จะช่วยระบุว่ามีปัญหาเกี่ยวกับการเริ่มต้นหรือการจัดการกระบวนการของ Apache ไหม

บันทึกเหล่านี้จะแยกออกจากบันทึกการร้องขอและบันทึกข้อผิดพลาดของ Apache โดย journalctl จะแสดงบันทึกจาก systemd ที่อธิบายเกี่ยวกับบริการ Apache ตั้งแต่การเริ่มต้นจนถึงการหยุดทำงาน รวมถึงข้อผิดพลาดของกระบวนการที่อาจเกิดขึ้นระหว่างที่ระบบได้ทำงาน

บนระบบ Ubuntu และ Debian ให้ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบ

sudo journalctl -u apache2.service --since today --no-pager

คำสั่ง –since today flag จะจำกัดผลลัพธ์ของคำสั่งให้แสดงเฉพาะรายการบันทึกที่เริ่มต้นในเวลา 00:00:00 น. ของวันปัจจุบันเท่านั้น การใช้ตัวเลือกนี้จะช่วยจำกัดปริมาณของรายการบันทึกที่คุณต้องตรวจสอบเมื่อตรวจหาข้อผิดพลาด ทำให้ควรได้รับผลลัพธ์ดังต่อไปนี้

หากคุณใช้ระบบ CentOS หรือ Fedora ให้ใช้คำสั่งเวอร์ชันนี้

sudo journalctl -u httpd.service --since today --no-pager

หากมีข้อผิดพลาด คุณจะพบบรรทัดในผลลัพธ์ที่คล้ายกับตัวอย่างด้านล่าง โดยความแตกต่างหลักระหว่างระบบปฏิบัติการ Linux จะอยู่ที่ส่วนที่เป็นชื่อโฮสต์ (yourhostname) ของคุณ

Oct 11 20:13:37 yourhostname systemd[1]: Failed to start The Apache HTTP Server.

การแก้ไขปัญหาด้วย apachectl

ระบบปฏิบัติการ Linux ส่วนใหญ่จะมีเครื่องมือ apachectl รวมมากับ Apache ซึ่ง apachectl เป็นเครื่องมือสำคัญที่ช่วยตรวจหาและวิเคราะห์ปัญหาการตั้งค่า (configuration) ของ Apache หากต้องการแก้ไขปัญหาด้วย apachectl คุณสามารถทดสอบการตั้งค่า Apache ได้ด้วยคำสั่ง apachectl configtest ซึ่งเครื่องมือนี้จะตรวจสอบไฟล์การตั้งค่าของ Apache และแจ้งข้อผิดพลาดหรือการตั้งค่าที่ขาดหายไปก่อนที่จะพยายามเริ่มเซิร์ฟเวอร์

คุณสามารถรันคำสั่งนี้บนระบบ Ubuntu, Debian, CentOS และ Fedora ตามตัวอย่างนี้

sudo apachectl configtest

ผลลัพธ์ที่ได้มักจะเป็นดังต่อไปนี้

ทั้งนี้ขึ้นอยู่กับระบบปฏิบัติการ Linux ของคุณว่าอาจมีบรรทัดอื่นๆ ปะปนอยู่ในผลลัพธ์ แต่บรรทัดที่สำคัญคือบรรทัดที่ระบุว่า Syntax OK หากมีข้อผิดพลาดในคอนฟิกูเรชัน Apache ของคุณ เช่น directive ที่อ้างอิงโมดูลที่ไม่ได้เปิดใช้งาน หรือมีการพิมพ์ผิดเพียงครั้งเดียว apachectl จะตรวจพบข้อผิดพลาดดังกล่าวและพยายามแจ้งให้คุณทราบเกี่ยวกับปัญหา ตัวอย่างเช่น การพยายามใช้ directive สำหรับโมดูล Apache ที่ไม่ได้เปิดใช้งาน จะส่งผลให้เกิดข้อความ apachectl configtest ดังต่อไปนี้

จากผลดังรูป [mpm_prefork:notice] และ [core:notice]: ข้อมูลเหล่านี้ระบุส่วนของ Apache ที่สร้างข้อความ “mpm_prefork” คือวิธีที่ Apache จัดการการเชื่อมต่อหลายรายการ และ “core” คือส่วนหลักของ Apache

  • สำหรับบรรทัดแรก AH00163: Apache กำลังทำงานและพร้อมที่จะจัดการคำขอ (กลับมาดำเนินการตามปกติ)
  • สำหรับบรรทัดที่สอง AH00094: Apache เริ่มต้นด้วยคำสั่ง: /usr/sbin/apache2 (นี่คือเส้นทางที่ติดตั้ง Apache บนเซิร์ฟเวอร์)

บรรทัดตัวอย่างนี้ใช้เพื่อการอธิบายเท่านั้น หากคุณกำลังวิเคราะห์ข้อผิดพลาดบนเซิร์ฟเวอร์ Apache ของคุณเอง บรรทัดข้อผิดพลาดในล็อกของคุณอาจมีรายละเอียดที่แตกต่างกัน อย่างไรก็ตาม รูปแบบของบรรทัดข้อผิดพลาดจะมีการระบุถึงโมดูลของ Apache รหัสข้อผิดพลาด และคำอธิบายข้อผิดพลาดที่เกี่ยวข้อง เมื่อคุณทราบสาเหตุของปัญหาในเซิร์ฟเวอร์ Apache ของคุณแล้ว คุณสามารถดำเนินการค้นคว้าและแก้ไขปัญหาต่อไปได้ รหัสข้อผิดพลาดและคำอธิบายจะมีประโยชน์มาก เนื่องจากให้คำอธิบายที่เฉพาะเจาะจง ซึ่งช่วยให้คุณจำกัดขอบเขตของสาเหตุของปัญหาได้ง่ายขึ้น

Was this article helpful?

Related Articles