Error Log DirectAdmin

เมื่อเว็บไซต์แสดง Error หรือทำงานผิดปกติ สิ่งแรกที่ต้องทำคือ "อ่าน Error Log" เพราะ Log คือหลักฐานที่ Server บันทึกไว้ทุกครั้งที่เกิดปัญหา บน DirectAdmin มี Log อยู่หลายประเภทที่ให้ข้อมูลต่างกัน ทั้ง Apache Error Log, Access Log และ PHP Error Log

ประเภทของ Log บน DirectAdmin

วิธีเปิดดู Error Log ผ่าน DirectAdmin

วิธีที่ 1: ผ่าน DirectAdmin Panel

  1. Login เข้า DirectAdmin
  2. ไปที่ Advanced FeaturesSite Summary / Statistics / Logs
  3. เลือก Domain ที่ต้องการดู Log
  4. คลิก Error Log หรือ Access Log
  5. DirectAdmin จะแสดง Log 20–50 บรรทัดล่าสุด

วิธีที่ 2: ผ่าน File Manager

Log Files จะถูกเก็บในตำแหน่งนี้ (อาจแตกต่างตาม Config ของ Hosting):

~/logs/yourdomain.com.error.log
~/logs/yourdomain.com.bytes_log
~/logs/yourdomain.com.log   (access log)
~/logs/php_errorlog

เปิด File Manager ใน DirectAdmin → ไปที่ logs/ → คลิกขวาเพื่อดูเนื้อหาไฟล์

วิธีที่ 3: ผ่าน SSH (ถ้ามีสิทธิ์)

tail -n 100 ~/logs/yourdomain.com.error.log
tail -f ~/logs/yourdomain.com.error.log   # ดู real-time

คำสั่ง tail -f แสดง Log แบบ Real-time เหมาะมากสำหรับ Debug ปัญหาที่กำลังเกิดขึ้น

อ่าน Apache Error Log

Format ของ Apache Error Log มีรูปแบบดังนี้:

[Thu May 16 10:23:45.123456 2026] [core:error] [pid 12345] [client 1.2.3.4:54321] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error.

Error ที่พบบ่อยและวิธีแก้ไข

1. 500 Internal Server Error

[error] [client x.x.x.x] SoftException in Application.cpp:360: Script has to be an executable and writable only by its owner.

สาเหตุ: Permission ของไฟล์ PHP ผิด (ต้องเป็น 644 ไม่ใช่ 777)

แก้ไข: File Manager → คลิกขวาที่ไฟล์ → Change Permission → ตั้งเป็น 644

2. Permission Denied

[error] [client x.x.x.x] (13)Permission denied: /home/user/public_html/.htaccess pcfg_openfile: unable to check htaccess file

สาเหตุ: Permission ของ .htaccess หรือ Folder ไม่ถูกต้อง

แก้ไข: Folder ควรเป็น 755, ไฟล์ควรเป็น 644

3. File Not Found (404)

[error] [client x.x.x.x] File does not exist: /home/user/public_html/wp-login.php

สาเหตุ: ไฟล์ถูกลบหรือ URL ผิด อาจเป็น Bot scan หา WordPress หรือ Directory Traversal

แก้ไข: ถ้าเป็น WordPress ให้ตรวจว่า wp-login.php มีอยู่ ถ้าเป็น Bot ให้ดูปริมาณ Request และพิจารณา Block IP

4. .htaccess Redirect Loop

[error] Request exceeded the limit of 10 internal redirects

สาเหตุ: RewriteRule ใน .htaccess วนซ้ำ (Loop)

แก้ไข: ตรวจ RewriteRule ว่ามี Guard Condition ป้องกัน Loop หรือไม่

Log Level และความหมายของแต่ละระดับ

Apache จัดระดับความรุนแรงของ Log ไว้ 8 ระดับ ตามมาตรฐาน RFC 5424 ซึ่งช่วยให้กรอง Log ได้ตรงจุดมากขึ้น:

Level ความหมาย ควรทำอะไร
emerg ฉุกเฉินสุด — Server หยุดทำงานทั้งหมด แก้ทันที
alert ต้องดำเนินการทันที แก้ทันที
crit วิกฤต — บางฟีเจอร์ล้มเหลว ตรวจสอบด่วน
error Error ที่ทำให้ Request ล้มเหลว (500, 403) ตรวจสอบโดยเร็ว
warn คำเตือน — ยังทำงานได้แต่มีปัญหาแฝง บันทึกไว้ตรวจภายหลัง
notice / info / debug ข้อมูลทั่วไป / Debug ใช้เฉพาะตอน Debug จริง

บน DirectAdmin Hosting ค่า LogLevel ปกติตั้งที่ warn หรือ error ซึ่งเหมาะสมสำหรับ Production เพราะไม่ Flood Log ด้วยข้อมูลที่ไม่จำเป็น หากต้องการ Debug ลึกขึ้นสามารถเพิ่มลงใน .htaccess ชั่วคราวได้:

LogLevel debug

จำไว้ว่าต้องลบบรรทัดนี้ออกหลัง Debug เสร็จ มิฉะนั้น Log File จะโตขึ้นอย่างรวดเร็วและเปลืองพื้นที่ Disk

วิเคราะห์ Log เพื่อหา Bot และ DDoS

Access Log เป็นเครื่องมือสำคัญในการตรวจสอบว่ามี Bot หรือการโจมตีเกิดขึ้นหรือไม่ สัญญาณที่ควรระวังได้แก่:

เมื่อพบ IP น่าสงสัย สามารถ Block ได้ทันทีด้วย .htaccess:

# Block IP เดี่ยว
Deny from 203.0.113.1

# Block ทั้ง Subnet
Deny from 203.0.113.0/24

หรือใช้ mod_evasive (ถ้า Hosting รองรับ) สำหรับ Rate Limiting อัตโนมัติ เพื่อป้องกัน IP ใหม่ที่โจมตีแทนที่จะต้องแบน IP ทีละตัว

เทคนิค: ใช้คำสั่ง awk นับ Request แยกตาม IP จาก Access Log ได้รวดเร็ว:
awk '{print $1}' ~/logs/yourdomain.com.log | sort | uniq -c | sort -rn | head -20
ผลลัพธ์คือ Top 20 IP ที่ส่ง Request มากที่สุดพร้อมจำนวน

อ่าน Access Log

Access Log บันทึกทุก HTTP Request ในรูปแบบ Combined Log Format:

1.2.3.4 - - [16/May/2026:10:23:45 +0700] "GET /index.html HTTP/1.1" 200 1234 "https://google.com" "Mozilla/5.0..."

ใช้ Access Log เพื่อ:

ค้นหาใน Log ด้วย grep

หากมีสิทธิ์ SSH ใช้ grep เพื่อกรอง Log ที่ต้องการ:

# หา Error ทั้งหมด
grep "\[error\]" ~/logs/yourdomain.com.error.log

# หา 500 Error จาก Access Log
grep " 500 " ~/logs/yourdomain.com.log

# หา Request จาก IP เฉพาะ
grep "^1\.2\.3\.4" ~/logs/yourdomain.com.log

# หา 404 Error วันนี้
grep "16/May/2026" ~/logs/yourdomain.com.log | grep " 404 "

Log File ขนาดใหญ่เกิน 10 MB ควร Download มาดูในเครื่อง Local แทนการเปิดบน File Manager เพราะอาจทำให้เบราว์เซอร์ค้างได้ ใช้ Text Editor อย่าง Notepad++ หรือ VS Code แทน

เปิด PHP Error Log สำหรับ Debug

PHP Error Log แยกต่างหากจาก Apache Error Log อ่านได้ที่:

~/logs/php_errorlog
# หรือตามที่กำหนดใน php.ini:
error_log = /home/username/logs/php_errorlog

ถ้าต้องการเปิดใช้ PHP Error Log ให้เพิ่มใน .htaccess:

php_flag log_errors on
php_value error_log /home/username/logs/php_errorlog

แปลความหมาย PHP Error ที่พบบ่อยใน Log

PHP Error Log มีหลายประเภทที่ Developer มักพบในการทำงานประจำวัน การอ่านให้เป็นช่วยประหยัดเวลา Debug ได้มาก:

เมื่อพบ PHP Error ให้บันทึก Error Message เต็ม ๆ และ Line Number จาก Log แล้วค้นหาใน Stack Overflow หรือ PHP Manual ก็จะได้วิธีแก้ไขอย่างรวดเร็ว ขอแนะนำให้เปิด Log ในขณะที่ทำการ Test ฟีเจอร์ใหม่ ๆ เพื่อจับ Error ได้ทันทีก่อนที่จะปิด Display Errors บน Production จริง

ตั้งค่า Error Reporting ใน PHP.ini และ .htaccess

บน Shared Hosting มักไม่สามารถแก้ไข php.ini ระดับ Server ได้โดยตรง แต่สามารถ Override ค่าบางอย่างได้ผ่าน .htaccess ซึ่ง DirectAdmin รองรับ ค่าที่สำคัญในการจัดการ Error Reporting ได้แก่:

# ซ่อน Error จากหน้าเว็บแต่ยังบันทึกลง Log
php_flag display_errors off
php_flag log_errors on
php_value error_log /home/username/logs/php_errorlog

# แสดง Error ทั้งหมด (ใช้ตอน Development เท่านั้น)
php_flag display_errors on
php_value error_reporting -1

# แสดงเฉพาะ Fatal Error (ไม่แสดง Notice/Warning)
php_value error_reporting E_ERROR

กฎสำคัญ: บน Production Server ควรตั้ง display_errors off เสมอ เพราะการแสดง Error บนหน้าเว็บเปิดเผยข้อมูล Path และโครงสร้างของ Code ให้ Hacker ได้โดยไม่จำเป็น ให้บันทึกลง Log แทนและอ่านจาก Log โดยตรง

คำแนะนำ: สร้างไฟล์ .htaccess แยกสำหรับโฟลเดอร์ logs/ เพื่อป้องกันไม่ให้ผู้เข้าชมทั่วไปเข้าถึง Log File ผ่านเบราว์เซอร์ได้ โดยเพิ่มบรรทัด Deny from all หรือ Options -Indexes ในโฟลเดอร์ logs

Log Rotation และการจัดการ Log File อัตโนมัติ

บน Hosting ที่ใช้งานมานาน Log File มักสะสมจนมีขนาดใหญ่หลายร้อย MB โดยเฉพาะ Access Log ที่บันทึกทุก Request DirectAdmin จัดการ Log Rotation ให้อัตโนมัติในหลาย Hosting Plan ซึ่งหมายความว่า Log จะถูก Compress และ Archive เป็นรายวันหรือรายสัปดาห์ ไฟล์ Archive ที่ Compress แล้วจะช่วยประหยัดพื้นที่ Disk ได้อย่างมากโดยยังสามารถค้นหาข้อมูลย้อนหลังได้ ตัวอย่าง Log ที่ Archive แล้วจะมีชื่อไฟล์ดังนี้:

~/logs/yourdomain.com.error.log
~/logs/yourdomain.com.error.log.1.gz
~/logs/yourdomain.com.error.log.2.gz

หากต้องการอ่าน Log ที่ถูก Compress แล้วโดยไม่ต้องแตกไฟล์ ใช้คำสั่ง zcat หรือ zgrep:

# อ่าน Log ที่ Compress แล้ว
zcat ~/logs/yourdomain.com.error.log.1.gz | tail -100

# ค้นหาใน Log ที่ Compress แล้ว
zgrep "\[error\]" ~/logs/yourdomain.com.error.log.1.gz

หากต้องการเคลียร์ Log เก่าด้วยตนเองเพื่อประหยัด Disk Space สามารถลบไฟล์ .gz เก่า ๆ ได้โดยตรงผ่าน File Manager ใน DirectAdmin แต่ไม่ควรลบไฟล์ Log ปัจจุบัน (.log ที่ไม่มีตัวเลขต่อท้าย) เพราะ Apache จะเขียน Log ลงในไฟล์นั้นต่อไปเรื่อย ๆ โดยทั่วไปแนะนำเก็บ Log ไว้อย่างน้อย 30 วันเพื่อใช้อ้างอิงกรณีพบปัญหาที่ไม่แสดงอาการทันที เช่น ปริมาณ Bot ที่ค่อย ๆ เพิ่มขึ้นตามเวลา หรือ Error ที่เกิดขึ้นซ้ำ ๆ เฉพาะบางช่วงเวลา

โฮสติ้งที่ให้คุณเข้าถึง Log ได้เต็มรูปแบบ

AsiaGB Hosting เปิด Error Log และ Access Log ให้ทุก Account ผ่าน DirectAdmin พร้อม SSD Storage เริ่มต้น 500 บาท/ปี

ดูแพ็กเกจโฮสติ้ง