GORAGOD.com

การตั้งค่ารูปแบบของข้อมูลใน Apache Log File ของ Server ที่มีหลายโดเมน

โดยปกติแล้วสำหรับ Web Server ทั่วๆไป การตั้งค่า Log File ที่ติดมากับ Apache ตอนติดตั้ง ก็สามารถบอกข้อมูลแก่เราได้อย่างเพียงพอ แต่หากเป็นบริการ Web Hosting หรือ Server ที่มีหลายโดเมนเราก็ควรมีการตั้งค่าเพิ่มเติม เพื่อให้เพียงพอที่จะทำให้เราแยกออกว่า เป็นข้อมูลจาก Website ไหน ซึ่งการตั้งค่า Log File ที่ดี มันจะสามารถบอกอะไรเราได้หลายอย่างเลยครับ (ซึ่งถ้า Log File ไม่ได้ให้ข้อมูลที่ควรรู้ มันก็คงไม่มีประโยชน์ใช่มั้ยครับ)

เปิดไฟล์ httpd.conf ขึ้นมาแก้ไข ด้วยโปรแกรมอะไรก็ได้ที่ถนัด ในที่นี้ผมใช้ vi
vi /usr/local/apache/conf/httpd.conf

มองหาบรรทัดตามด้านล่าง แล้วแก้ไขให้เป็นไปตามที่ต้องการ
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\"" comonvhost
CustomLog "logs/access_log" comonvhost

บรรทัดแรกเป็นการกำหนดรูปแบบ (LogFormat) โดยผมตั้งชื่อเป็น comonvhost อธิบายตัวแปรต่างๆในคำสั่งเป็นรายตัวนะครับ (สำหรับตัวอื่นๆ อยากรู้เพิ่มเติมให้ดูที่ https://httpd.apache.org/docs/1.3/logs.html)
  • %v แสดงชื่อ Host เช่น goragod.com
  • %h แสดง IP ของผู้เรียก (client)
  • %u แสดง USERID ที่เรียกสคริปต์
  • %t แสดงวันที่และเวลา เช่น 22/Dec/2016:17:56:31 +0700
  • %r แสดง request ที่ได้รับ เช่น GET / HTTP/1.0 หมายถึงเรียกไปที่หน้าหลักเว็บไซต์
  • %>s แสดงรหัสตอบกลับจาก Server (status code) เช่น 200 หมายถึง สำเร็จ, 404 หมายถึงไม่พบไฟล์ เป็นต้น
  • %{Referer}i แสดงที่มาของไซต์ที่เรียก (Http Referer)
บรรทัดที่ 2 กำหนดให้เก็บ log เป็น access_log สังเกตุนะครับว่าผมกำหนดรูปแบบเป็น comonvhost ตามชื่อที่ตั้งไว้

เสร็จแล้ว restart apache
service apache2 restart

ตัวอย่างผลลัพท์ทีได้
goragod.com 172.68.6.24 - - [22/Dec/2016:17:56:31 +0700] "GET /index.php?id=1954 HTTP/1.0" 200 19 "https://www.goragod.com/forum.html?wbid=1954"