เมื่อต้องดูแลเซิร์ฟเวอร์ Apache บนระบบปฏิบัติการ Linux การพบปัญหาและข้อผิดพลาด (Troubleshoot) เป็นสิ่งที่หลีกเลี่ยงไม่ได้ การแก้ไขปัญหาอย่างมีประสิทธิภาพจำเป็นต้องรู้จักคำสั่งที่สำคัญและตำแหน่งของไฟล์ล็อกที่ใช้บันทึกข้อมูลข้อผิดพลาด บทความนี้จะแนะนำวิธีการตรวจสอบและแก้ไขปัญหาเซิร์ฟเวอร์ Apache โดยใช้คำสั่งหลัก 3 คำสั่ง ได้แก่ systemctl, journalctl และ apachectl พร้อมกับไฟล์ล็อกเฉพาะที่สามารถใช้ในการค้นหาสาเหตุของปัญหา คำสั่งเหล่านี้และไฟล์ล็อกจะเป็นเครื่องมือสำคัญที่ช่วยให้คุณสามารถวิเคราะห์และแก้ไขปัญหาเซิร์ฟเวอร์ Apache ได้อย่างรวดเร็ว
หมายเหตุ: บนระบบ Debian และ Ubuntu ชื่อบริการและกระบวนการ (process) ของ Apache จะเป็น apache2 ในขณะที่บน CentOS, Fedora และระบบที่พัฒนาจาก RedHat ชื่อบริการและกระบวนการของ Apache จะเป็น httpd แม้ชื่อบริการและกระบวนการที่ทำงานจะแตกต่างกัน แต่การเริ่มต้น (start), หยุด (stop), ตรวจสอบสถานะของ Apache รวมถึงการดูล็อกด้วย journalctl จะทำงานเหมือนกันในทุกระบบ Linux ที่ใช้ systemd ในการจัดการบริการ Apache ดังนั้นควรตรวจสอบให้แน่ใจว่าคุณใช้ชื่อที่ถูกต้องตามระบบปฏิบัติการ Linux ที่คุณใช้งาน
คำสั่ง 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 ของคุณแล้ว คุณสามารถดำเนินการค้นคว้าและแก้ไขปัญหาต่อไปได้ รหัสข้อผิดพลาดและคำอธิบายจะมีประโยชน์มาก เนื่องจากให้คำอธิบายที่เฉพาะเจาะจง ซึ่งช่วยให้คุณจำกัดขอบเขตของสาเหตุของปัญหาได้ง่ายขึ้น