Nginx เป็น Web Server ที่ได้รับความนิยมสูงสุดในโลกในปัจจุบัน แต่เพื่อให้ระบบทำงานได้อย่างเสถียรและปลอดภัย การจัดการ Nginx log อย่างถูกต้องจึงเป็นสิ่งที่ไม่อาจมองข้ามได้ Log ใน Nginx นั้นแบ่งออกเป็น 2 ประเภทหลัก คือ Access Log (บันทึกการเข้าใช้งาน) และ Error Log (บันทึกข้อผิดพลาด) ซึ่งข้อมูลเหล่านี้มีความสำคัญต่อการวินิจฉัยปัญหา ตรวจสอบความปลอดภัย และปรับปรุงประสิทธิภาพของเซิร์ฟเวอร์ บทความนี้จะแนะนำวิธีการ log ใน Nginx อย่างสมบูรณ์ตั้งแต่พื้นฐานไปจนถึงเทคนิคขั้นสูง
Error Log ใน Nginx คืออะไร
Error Log เป็นไฟล์บันทึกที่บ้านข้อผิดพลาด คำเตือน และข้อมูลการวินิจฉัยจากการทำงานของ Nginx ไฟล์นี้ช่วยให้ผู้ดูแลระบบสามารถระบุและแก้ไขปัญหาต่างๆ ที่เกิดขึ้นบนเซิร์ฟเวอร์ได้อย่างรวดเร็ว เช่น ข้อผิดพลาดในการเชื่อมต่อ ปัญหาไฟล์ที่หายไป หรือข้อกำหนดการ upstream ที่มีปัญหา
วิธีการตั้งค่า Error Log ใน Nginx นั้นง่ายมาก คุณเพียงแค่เพิ่มคำสั่ง error_log ลงในไฟล์ config ของ Nginx
error_log Directive
คำสั่ง error_log ใช้เพื่อกำหนดตำแหน่งของไฟล์ log และระดับความสำคัญของข้อมูลที่ต้องการบันทึก ไวยากรณ์มีดังนี้:
error_log /path/to/error.log warn;
เมื่อกำหนด error_log แล้ว Nginx จะบันทึกข้อมูลทั้งหมดที่มีระดับความสำคัญเท่ากับหรือสูงกว่าระดับที่กำหนด ตัวอย่างเช่น หากตั้งค่าเป็น warn ระบบจะบันทึกข้อความ warn, error, crit, alert และ emerg แต่จะไม่บันทึก debug, info และ notice
Log Levels ใน Nginx อธิบายแต่ละระดับ
Nginx มีระดับความสำคัญของ log ถึง 8 ระดับ โดยเรียงจากต่ำสุดไปสูงสุด ดังนี้:
| ระดับ | ค่าตัวเลข | ความหมาย |
| debug | 0 | ข้อมูลสำหรับการวินิจฉัย (debug) |
| info | 1 | ข้อมูลทั่วไป |
| notice | 2 | ประกาศสำคัญที่สำหรับ notice |
| warn | 3 | คำเตือน (warning) |
| error | 4 | ข้อผิดพลาด |
| crit | 5 | สถานการณ์วิกฤต |
| alert | 6 | ข้อมูลที่ต้องอ่านทันที |
| emerg | 7 | ระบบไม่สามารถใช้งานได้ |
โดยค่าเริ่มต้น Nginx จะตั้งค่า Error Log เป็นระดับ error ซึ่งเหมาะสมสำหรับการใช้งานในสภาพแวดล้อม Production แต่หากต้องการข้อมูลรายละเอียดมากขึ้น คุณสามารถเปลี่ยนเป็น info หรือแม้แต่ debug ได้
# เปลี่ยน log level เป็น info
error_log /var/log/nginx/error.log info;
# สำหรับ debug ให้ข้อมูลรายละเอียด
error_log /var/log/nginx/error.log debug;
Access Log ใน Nginx — บันทึกการเข้าใช้งาน
Access Log เป็นไฟล์บันทึกของการเข้าใช้งานเว็บไซต์ของคุณ ข้อมูลในไฟล์นี้เก็บรวมถึง IP Address ของผู้เยี่ยมชม วันเวลาของการขอ (Request) ข้อมูลที่ขอ (URI) ส่วนหัวของการร้องขอ (HTTP Headers) และสถานะตัวเลข (HTTP Status Code) ข้อมูลเหล่านี้มีประโยชน์ต่อการวิเคราะห์การใช้งาน ตรวจสอบความปลอดภัย และปรับปรุงประสิทธิภาพเว็บไซต์
access_log Directive
คำสั่ง access_log ใช้เพื่อเปิดหรือปิดการบันทึก Access Log และกำหนดตำแหน่งไฟล์
access_log /var/log/nginx/access.log combined;
ที่นี่ combined คือรูปแบบการบันทึก (log format) ที่ Nginx สนับสนุน ซึ่งจะอธิบายในรายละเอียดต่อไป
Log Format — รูปแบบการบันทึก
Nginx ให้ความยืดหยุ่นในการกำหนดรูปแบบของ log โดยใช้คำสั่ง log_format ซึ่งคุณสามารถเลือกข้อมูลที่ต้องการบันทึกได้
log_format Directive
ไวยากรณ์พื้นฐานมีดังนี้:
log_format format_name 'format_string';
ตัวแปรที่ใช้บ่อยในการสร้างรูปแบบ log คือ:
$remote_addr— IP Address ของผู้เยี่ยมชม$remote_user— ชื่อผู้ใช้ที่ authenticate (ถ้ามี)$time_local— วันเวลาในรูปแบบท้องถิ่น$request— แสดง HTTP method, URI, และ HTTP version$status— HTTP status code (200, 404, 500 เป็นต้น)$body_bytes_sent— ขนาดของ Response body$http_referer— URL ของเพจที่อ้างอิง$http_user_agent— ข้อมูล User Agent (เบราว์เซอร์)$request_time— เวลาประมวลผล request ทั้งหมด
Combined Format — รูปแบบ Combined
รูปแบบ combined เป็นรูปแบบมาตรฐานที่เปรียบเทียบกันในบรรดา Web Servers กำหนดดังนี้:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
ผลลัพธ์ของ combined format จะมีลักษณะดังนี้:
192.168.1.10 - john [06/Apr/2026:10:15:23 +0700] "GET /index.html HTTP/1.1" 200 1234 "-" "Mozilla/5.0"
JSON Format — รูปแบบ JSON
สำหรับการวิเคราะห์ข้อมูล log ในยุคสมัยนี้ รูปแบบ JSON นั้นเป็นที่นิยมมากขึ้น เพราะว่ามันง่ายต่อการประมวลผลด้วย Script และ Log Aggregation Tools
log_format json_combined escape=json
{
"time_local":"$time_local",
"remote_addr":"$remote_addr",
"remote_user":"$remote_user",
"request":"$request",
"status": $status,
"body_bytes_sent":$body_bytes_sent,
"request_time":$request_time,
"http_referrer":"$http_referer",
"http_user_agent":"$http_user_agent"
};
access_log /var/log/nginx/access.json.log json_combined;
การตั้งค่า Access Log และ Error Log ต่างเว็บไซต์
Nginx ให้ความสามารถในการตั้งค่า log ที่แตกต่างกันสำหรับแต่ละ server block หรือ location block ซึ่งช่วยให้การจัดการและการวิเคราะห์ง่ายขึ้น
server {
listen 80;
server_name example.com;
# log สำหรับ server block นี้
access_log /var/log/nginx/example.com-access.log combined;
error_log /var/log/nginx/example.com-error.log warn;
location /api/ {
# log เฉพาะสำหรับ /api/
access_log /var/log/nginx/api-access.log combined;
}
location /images/ {
# ปิด log สำหรับ /images/ เพื่อลดขนาดไฟล์
access_log off;
}
}
Conditional Logging — บันทึก Log แบบมีเงื่อนไข
บางครั้งคุณอาจต้องการบันทึก log เฉพาะ request ที่มีเงื่อนไขบางอย่าง เช่น request ที่มี status code 2xx หรือ 3xx เท่านั้น Nginx สนับสนุนการตั้งค่าดังกล่าวผ่าน if parameter
map $status $log_condition {
default 1;
~^2 0; # ไม่บันทึก status 2xx
~^3 0; # ไม่บันทึก status 3xx
}
server {
listen 80;
server_name example.com;
# บันทึกเฉพาะ request ที่ไม่ใช่ 2xx หรือ 3xx
access_log /var/log/nginx/errors-access.log combined if=$log_condition;
}
Buffer และ Flush — การดำเนินการแบบ Buffer
Nginx สามารถเก็บ log ไว้ใน buffer ก่อนจึงเขียนลงไฟล์จริง ซึ่งช่วยลดการดำเนินการ I/O และเพิ่มประสิทธิภาพของเซิร์ฟเวอร์
access_log /var/log/nginx/access.log combined buffer=32k flush=5s;
ที่นี่ buffer=32k หมายถึงขนาด buffer คือ 32 กิโลไบต์ และ flush=5s หมายถึงการเขียน log ลงไฟล์ทีละ 5 วินาที การตั้งค่านี้เหมาะสำหรับเซิร์ฟเวอร์ที่มี traffic สูง
Syslog Logging — ส่ง Log ไปยัง Syslog
นอกจากการบันทึก log ลงไฟล์ คุณยังสามารถส่ง log ไปยัง syslog server ได้ซึ่งเป็นประโยชน์สำหรับการจัดการ log บนหลาย server
access_log syslog:server=192.168.1.100:514 combined;
error_log syslog:server=192.168.1.100:514 warn;
การปิด Log สำหรับ Path ต่างๆ
บ่อยครั้งที่เรา ไม่ต้องการบันทึก log สำหรับ request บางอย่าง เช่น favicon.ico, robots.txt หรือ static files เพื่อลดขนาดไฟล์ log และปรับปรุงประสิทธิภาพ
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/access.log combined;
# ปิด log สำหรับ favicon
location = /favicon.ico {
access_log off;
}
# ปิด log สำหรับ robots.txt
location = /robots.txt {
access_log off;
}
# ปิด log สำหรับ static files
location ~* \.(css|js|gif|jpg|jpeg|png|ico|woff|woff2)$ {
access_log off;
}
}
การวิเคราะห์ Log ด้วย Tools
หลังจากเก็บ log ไว้แล้ว ข้อมูลเหล่านี้มีประโยชน์มากหากนำมาวิเคราะห์อย่างถูกต้อง มีหลาย tools ที่สามารถช่วยในการวิเคราะห์ Nginx log
GoAccess — เครื่องมือวิเคราะห์แบบ Real-time
GoAccess เป็นเครื่องมือประเมินผล log แบบ Real-time ที่แสดงข้อมูลการเยี่ยมชมแบบ Interactive
# ติดตั้ง GoAccess
sudo apt-get install goaccess
# วิเคราะห์ log จากไฟล์
goaccess /var/log/nginx/access.log
# สร้างรายงาน HTML
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
AWStats — เครื่องมือวิเคราะห์ระบบเดิม
AWStats เป็นเครื่องมือวิเคราะห์ log ที่เก่าแก่ แต่ยังคงเป็นที่นิยม มีอินเตอร์เฟส Web ที่สะดวก
# ติดตั้ง AWStats
sudo apt-get install awstats
# ตั้งค่าไฟล์ config
sudo nano /etc/awstats/awstats.example.conf
# รันการวิเคราะห์
/usr/lib/cgi-bin/awstats.pl -config=example -update
Security Logging — การบันทึก Log เพื่อความปลอดภัย
การจัดการ log อย่างมีสติต่อความปลอดภัยนั้นมีความสำคัญมาก เพื่อติดตามและป้องกันการโจมตี ลองดูตัวอย่างการบันทึก log เพื่อการตรวจสอบความปลอดภัย
log_format security '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'referer:"$http_referer" ua:"$http_user_agent" '
'args:"$args"';
server {
listen 80;
server_name example.com;
# บันทึก request ทั้งหมด
access_log /var/log/nginx/security.log security;
# บันทึก request ที่มี status error
map $status $loggable {
~^[45] 1;
default 0;
}
access_log /var/log/nginx/errors.log security if=$loggable;
}
Best Practices สำหรับการจัดการ Nginx Log
เพื่อให้ระบบ log ของคุณทำงานได้อย่างมีประสิทธิภาพและปลอดภัย ลองทำตามแนวทางปฏิบัติที่ดีต่อไปนี้:
- หมุนเวียน Log ด้วยประจำ: ใช้ logrotate เพื่อบีบอัดและลบ log เก่า เพื่อไม่ให้ขนาดไฟล์ log ใหญ่เกินไป
- กำหนดระดับ Log ที่เหมาะสม: ใช้
errorหรือwarnสำหรับ Production และinfoหรือdebugสำหรับการพัฒนา - บันทึก Log สำหรับแต่ละไซต์: ลดการบันทึก static files และ favicon เพื่อประหยัดพื้นที่
- ใช้รูปแบบ JSON: สำหรับการวิเคราะห์แบบสมัยใหม่ JSON format ทำให้การประมวลผลง่ายขึ้น
- ตั้งค่า Buffer: เพื่อลด I/O operations และเพิ่มประสิทธิภาพของเซิร์ฟเวอร์
- ติดตามและวิเคราะห์: ใช้ tools เช่น GoAccess หรือ AWStats เพื่อติดตามสถานะของเซิร์ฟเวอร์
ตัวอย่าง Logrotate Configuration
# ไฟล์ /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
สรุป
การจัดการ Nginx log อย่างมืออาชีพนั้นเป็นสิ่งสำคัญสำหรับการดำเนินงาน Web Server ที่มีประสิทธิภาพ ปลอดภัย และสามารถวินิจฉัยปัญหาได้ ด้วยความเข้าใจในเรื่อง error_log, access_log, log levels, log formats และเครื่องมือวิเคราะห์ต่างๆ คุณจะสามารถควบคุมระบบ log ของเซิร์ฟเวอร์ได้อย่างมีประสิทธิภาพ นอกจากนี้ การสร้างนโยบายการจัดการ log ที่เหมาะสม เช่น การหมุนเวียน log, การตั้งค่า buffer และการปิด log สำหรับ static files จะช่วยให้ระบบของคุณทำงานได้อย่างราบรื่นและประหยัดทรัพยากร
แนะนำบริการ DE Cloud VPS และ Cloud Hosting
หากคุณต้องการตั้งค่า Nginx log ให้มีประสิทธิภาพสูง และต้องการสภาพแวดล้อมที่เสถียรสำหรับเซิร์ฟเวอร์ของคุณ Dot Enterprise Cloud VPS เป็นตัวเลือกที่ยอดเยี่ยม ด้วยการสนับสนุน Nginx ที่ครบถ้วน การจัดการ log ที่ง่าย และอินเทอร์เฟส Plesk ที่ใช้งานสะดวก คุณสามารถจัดการเซิร์ฟเวอร์ของตนเองได้อย่างสะดวก
นอกจากนี้ Dot Enterprise Cloud Hosting ก็มีการตั้งค่า Nginx ล่วงหน้าที่มีการจัดการ log ประสิทธิภาพสูง ทำให้คุณสามารถมุ่งเน้นไปยังการพัฒนาเว็บไซต์ของคุณแทนที่จะต้องจัดการการตั้งค่า log ด้วยตนเอง ลองเปลี่ยนมาใช้บริการของ Dot Enterprise วันนี้และอนุภพ การบริการที่ดีขึ้น
สำหรับข้อมูลเพิ่มเติม โปรดเยี่ยมชม https://de.co.th เพื่อทำความรู้จักกับ Dot Enterprise และบริการของเรา

