Nginx เป็นเว็บเซิร์ฟเวอร์ที่มีประสิทธิภาพสูงและหนึ่งในคุณลักษณะสำคัญของมันคือการจัดการ Buffer อย่างมีประสิทธิภาพ Buffer Settings ใน Nginx มีบทบาทสำคัญต่อการประมวลผลคำขอ (requests) และการตอบสนอง (responses) ของเซิร์ฟเวอร์ การตั้งค่า buffer ที่เหมาะสมจะช่วยเพิ่มความเร็ว ลดการใช้หน่วยความจำ และป้องกันข้อผิดพลาดที่เกี่ยวข้องกับขนาดของไฟล์ที่อัปโหลด เนื้อหาบทความนี้จะอธิบายรายละเอียดเกี่ยวกับการตั้งค่า buffer ต่างๆ ในโปรแกรม Nginx และวิธีการปรับแต่งให้เหมาะสมกับการใช้งานของคุณ
Buffer คืออะไรและเหตุใดจึงสำคัญ
Buffer (บัฟเฟอร์) คือพื้นที่หน่วยความจำชั่วคราวที่ใช้สำหรับเก็บข้อมูลระหว่างการถ่ายโอนจากแหล่งหนึ่งไปยังอีกแหล่งหนึ่ง เช่น จากไคลเอนต์ไปยังเซิร์ฟเวอร์ หรือจากเซิร์ฟเวอร์ไปยังแอปพลิเคชันแบคเอนด์
ในบริบทของ Nginx buffer มีความสำคัญสำหรับเหตุผลหลายประการ:
- การจัดการคำขอขนาดใหญ่ — Buffer ช่วยให้สามารถจัดการไฟล์อัปโหลดขนาดใหญ่ได้โดยไม่ส่งผลกระทบต่อประสิทธิภาพ
- การลดการใช้เมมโมรี่ — การตั้งค่า buffer ที่เหมาะสมจะลดการใช้หน่วยความจำเมื่อจัดการกับหลายคำขอพร้อมกัน
- การปกป้องแอปพลิเคชันแบคเอนด์ — Buffer ทำให้เซิร์ฟเวอร์ Nginx สามารถรับข้อมูลที่มาจากไคลเอนต์ช้าได้โดยไม่ต้องให้แอปพลิเคชันแบคเอนด์รอ
- การปรับปรุงความเร็ว — Buffer ที่ถูกตั้งค่าอย่างเหมาะสมจะเพิ่มความเร็วของการถ่ายโอนข้อมูล
client_body_buffer_size — ขนาด Buffer สำหรับเนื้อหาของไคลเอนต์
client_body_buffer_size ควบคุมขนาดของ buffer ที่ใช้สำหรับอ่านเนื้อหาของคำขอจากไคลเอนต์ การตั้งค่านี้มีความสำคัญเมื่อคุณต้องการจัดการคำขอ POST ขนาดใหญ่ เช่น การอัปโหลดไฟล์
ค่าเริ่มต้น: 8k (8 กิโลไบต์)
ตัวอย่าง:
http {
client_body_buffer_size 128k;
}
หากคุณตั้งค่า client_body_buffer_size ให้เล็กเกินไป Nginx อาจสร้างไฟล์ชั่วคราวบนดิสก์เพื่อจัดเก็บข้อมูลส่วนที่เหลือ ซึ่งอาจส่งผลกระทบต่อประสิทธิภาพ หากตั้งค่าให้ใหญ่เกินไป อาจใช้หน่วยความจำมากเกินไป
แนวทางการตั้งค่า: สำหรับแอปพลิเคชันทั่วไป ให้ตั้งค่าระหว่าง 64k ถึง 256k ขึ้นอยู่กับขนาดของคำขอที่ไคลเอนต์ส่งมา
client_header_buffer_size และ large_client_header_buffers
การตั้งค่าเหล่านี้ควบคุมขนาดของ buffer สำหรับการอ่านส่วนหัว (headers) ของคำขอจากไคลเอนต์
client_header_buffer_size ใช้สำหรับส่วนหัวปกติของคำขอ ค่าเริ่มต้นคือ 1k
http {
client_header_buffer_size 2k;
}
large_client_header_buffers ใช้สำหรับส่วนหัวขนาดใหญ่ เช่น cookies ขนาดใหญ่หรือ URL ยาว ค่าเริ่มต้นคือ 4 ตัว ขนาด 8k
http {
large_client_header_buffers 4 32k;
}
หากมี “upstream sent too big header while reading response header from upstream” หรือ “414 Request-URI Too Large” error คุณอาจต้องเพิ่มค่านี้
proxy_buffer_size และ proxy_buffers — ตั้งค่า Buffer สำหรับ Proxy
เมื่อ Nginx ทำหน้าที่เป็น reverse proxy คุณต้องตั้งค่า buffer สำหรับการสื่อสารระหว่าง Nginx กับแอปพลิเคชันแบคเอนด์
proxy_buffer_size ใช้สำหรับอ่านส่วนแรกของการตอบสนองจากเซิร์ฟเวอร์แบคเอนด์ โดยทั่วไปจะเก็บ response headers
http {
proxy_buffer_size 4k;
}
proxy_buffers ควบคุมจำนวนและขนาดของ buffer สำหรับเก็บส่วนของ response body
http {
proxy_buffers 8 4k;
}
ตัวอย่างด้านบนหมายความว่า “ใช้ 8 ตัว buffer ขนาด 4k แต่ละตัว” ดังนั้น buffer ทั้งหมดจะเป็น 32k
แนวทางการตั้งค่า: สำหรับเซิร์ฟเวอร์ที่มีการใช้งานหนัก ให้เพิ่ม proxy_buffers เป็น 16 8k หรือ 32 4k
proxy_busy_buffers_size และ proxy_temp_file_write_size
proxy_busy_buffers_size ใช้สำหรับกำหนดจำนวนไบต์ของ buffer ที่อาจ “busy” (ถูกใช้งาน) ในการส่งการตอบสนองไปยังไคลเอนต์ ในขณะที่ยังมีการอ่านข้อมูลจากแบคเอนด์อย่างต่อเนื่อง
http {
proxy_busy_buffers_size 8k;
}
proxy_temp_file_write_size ควบคุมจำนวนข้อมูลที่เขียนไปยังไฟล์ชั่วคราวในแต่ละครั้ง เมื่อ buffer ไม่เพียงพอเพื่อเก็บการตอบสนองทั้งหมดจากแบคเอนด์
http {
proxy_temp_file_write_size 16k;
}
fastcgi_buffer_size และ fastcgi_buffers — ตั้งค่า Buffer สำหรับ FastCGI
สำหรับแอปพลิเคชันที่ใช้ FastCGI (เช่น PHP-FPM) คุณต้องตั้งค่า FastCGI buffers
fastcgi_buffer_size ใช้สำหรับเก็บส่วนแรกของการตอบสนอง
http {
fastcgi_buffer_size 32k;
}
fastcgi_buffers ใช้สำหรับเก็บเนื้อหาของการตอบสนอง
http {
fastcgi_buffers 16 32k;
}
ค่าเหล่านี้มีความสำคัญเมื่อใช้ WordPress หรือแอปพลิเคชัน PHP อื่นๆ บนเซิร์ฟเวอร์ Nginx
output_buffers และ postpone_output
output_buffers ใช้สำหรับเก็บตัวกรองเอาต์พุต ค่าเริ่มต้นคือ 1 32k
http {
output_buffers 2 32k;
}
postpone_output ใช้สำหรับการล่าช้าของการส่งข้อมูลไปยังไคลเอนต์ หากเซิร์ฟเวอร์ยังไม่ได้รับข้อมูลแบคเอนด์เพียงพอ ค่าเริ่มต้นคือ 1460 ไบต์
http {
postpone_output 1460;
}
Buffer สำหรับการอัปโหลดไฟล์ (File Uploads)
หากเซิร์ฟเวอร์ของคุณต้องรองรับการอัปโหลดไฟล์ขนาดใหญ่ คุณต้องปรับแต่งการตั้งค่า buffer หลายตัว นอกจากนี้ยังต้องตั้งค่า client_max_body_size ซึ่งควบคุมขนาดสูงสุดของเนื้อหาของคำขอ
http {
# ตั้งค่าขนาดสูงสุดของเนื้อหาคำขอ
client_max_body_size 100m;
# ตั้งค่า buffer size สำหรับเนื้อหา
client_body_buffer_size 128k;
# ตั้งค่า buffer สำหรับ proxy
proxy_buffer_size 16k;
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
}
สำหรับแอปพลิเคชันที่รองรับการอัปโหลดขนาดใหญ่ เช่น Media Library ในระบบจัดการเนื้อหา ให้พิจารณาตั้งค่าดังนี้:
client_max_body_sizeควรเท่ากับหรือใหญ่กว่าขนาดไฟล์ที่ต้องการอัปโหลดclient_body_buffer_sizeควรตั้งไว้ระหว่าง 64k ถึง 256kproxy_buffer_sizeและproxy_buffersควรเพิ่มขึ้นเพื่อรองรับไฟล์ขนาดใหญ่
Buffering vs Non-Buffering — proxy_buffering
โดยค่าเริ่มต้น Nginx จะบัฟเฟอร์การตอบสนองจากแบคเอนด์ก่อนส่งไปยังไคลเอนต์ (buffering on) อย่างไรก็ตาม ในบางกรณี คุณอาจต้องปิดการบัฟเฟอร์
# ปิดการบัฟเฟอร์
http {
proxy_buffering off;
}
ประโยชน์ของการปิดบัฟเฟอร์:
- ลดความล่าช้า (latency) สำหรับการส่งข้อมูลแบบสตรีมมิง (streaming)
- ลดการใช้หน่วยความจำเมื่อส่งไฟล์ขนาดใหญ่
- มีประโยชน์สำหรับการเชื่อมต่อ WebSocket
ข้อเสีย: ประสิทธิภาพอาจลดลงเมื่อมี latency สูงระหว่าง Nginx และแบคเอนด์
การวินิจฉัย Buffer Issues จากลอก (Error Logs)
เมื่อพบปัญหาที่เกี่ยวข้องกับ buffer ให้ตรวจสอบไฟล์ลองของ Nginx เพื่อดูข้อความ error
tail -f /var/log/nginx/error.log
ข้อความ error ที่พบบ่อย:
- “upstream sent too big header” — ต้องเพิ่ม
proxy_buffer_sizeหรือlarge_client_header_buffers - “414 Request-URI Too Large” — ต้องเพิ่ม
client_header_buffer_size - “413 Request Entity Too Large” — ต้องเพิ่ม
client_max_body_size - “open() failed … No space left on device” — ดิสก์ชั่วคราวเต็ม อาจต้องเพิ่ม buffer เพื่อลดการเขียนไปยังดิสก์
Buffer Size Recommendations โดยอิงตามกรณีการใช้งาน
เซิร์ฟเวอร์ทั่วไป (General Purpose Server)
http {
client_body_buffer_size 128k;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;
}
เซิร์ฟเวอร์ที่รองรับการอัปโหลดไฟล์ขนาดใหญ่
http {
client_max_body_size 500m;
client_body_buffer_size 256k;
client_header_buffer_size 2k;
large_client_header_buffers 4 16k;
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 48k;
proxy_temp_file_write_size 32k;
}
เซิร์ฟเวอร์ PHP/WordPress
http {
client_body_buffer_size 128k;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;
fastcgi_buffer_size 32k;
fastcgi_buffers 16 32k;
fastcgi_busy_buffers_size 64k;
fastcgi_temp_file_write_size 32k;
}
เซิร์ฟเวอร์ที่มีการใช้งานสูง (High-Performance Server)
http {
client_body_buffer_size 256k;
client_header_buffer_size 2k;
large_client_header_buffers 8 16k;
proxy_buffer_size 16k;
proxy_buffers 64 16k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 64k;
}
Best Practices สำหรับการตั้งค่า Buffer
เพื่อให้ได้ประสิทธิภาพสูงสุดจากการตั้งค่า buffer ในเซิร์ฟเวอร์ Nginx ของคุณ ให้ปฏิบัติตามแนวทางนี้:
1. เริ่มต้นด้วยค่าเริ่มต้น
อย่าเพิ่มค่า buffer โดยไม่จำเป็น ให้ลองใช้ค่าเริ่มต้นของ Nginx ก่อน และปรับแต่งเฉพาะเมื่อพบปัญหา
2. ตรวจสอบ System Resources
ตรวจสอบหน่วยความจำและพื้นที่ดิสก์ของเซิร์ฟเวอร์ก่อนเพิ่มค่า buffer
free -h
df -h
3. ทำการทดสอบเชิงสถิติ
ใช้เครื่องมือเช่น Apache Bench หรือ ApacheBench เพื่อวัดประสิทธิภาพหลังจากการปรับแต่ง
ab -n 10000 -c 100 https://example.com/
4. ตรวจสอบลอกอย่างสม่ำเสมอ
ติดตามไฟล์ลองของ Nginx เพื่อค้นหา error ที่เกี่ยวข้องกับ buffer
tail -100 /var/log/nginx/error.log | grep -i buffer
5. ปรับแต่งทีละขั้นตอน
เปลี่ยนแปลงค่า buffer ทีละตัวและทดสอบในแต่ละครั้ง เพื่อให้ทราบว่าการเปลี่ยนแปลงใดมีผลกระทบ
6. ใช้ location-specific Configuration
สำหรับแอปพลิเคชันที่แตกต่างกัน ให้ตั้งค่า buffer ที่แตกต่างกันในแต่ละ location block
server {
listen 80;
server_name example.com;
# ตั้งค่าทั่วไป
client_body_buffer_size 128k;
# ตั้งค่าเฉพาะสำหรับอัปโหลด
location /upload/ {
client_body_buffer_size 256k;
client_max_body_size 500m;
}
# ตั้งค่าเฉพาะสำหรับ API
location /api/ {
proxy_buffering off;
}
}
7. ตรวจสอบประสิทธิภาพ CPU และ Memory
ใช้ top หรือ htop เพื่อติดตามการใช้งาน CPU และหน่วยความจำของโปรเซส Nginx
top -p $(pgrep -f 'nginx: master')
ตัวอย่าง Configuration ที่สมบูรณ์
นี่คือตัวอย่าง configuration ที่สมบูรณ์สำหรับเซิร์ฟเวอร์ WordPress ที่มีประสิทธิภาพสูง:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 2048;
multi_accept on;
}
http {
# Buffer settings
client_body_buffer_size 256k;
client_header_buffer_size 2k;
large_client_header_buffers 8 16k;
client_max_body_size 100m;
# Proxy buffer settings
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 32k;
# FastCGI buffer settings
fastcgi_buffer_size 64k;
fastcgi_buffers 32 64k;
fastcgi_busy_buffers_size 128k;
# Output buffer settings
output_buffers 2 64k;
postpone_output 1460;
# Other important settings
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Logging
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# Gzip compression
gzip on;
gzip_vary on;
gzip_types text/plain text/css text/javascript
application/javascript application/json;
# Include server blocks
include /etc/nginx/sites-enabled/*;
}
สรุป
Buffer Settings ใน Nginx เป็นส่วนสำคัญของการปรับแต่งประสิทธิภาพของเซิร์ฟเวอร์เว็บ การตั้งค่า buffer ที่เหมาะสมจะช่วยให้เซิร์ฟเวอร์สามารถจัดการคำขอขนาดใหญ่ได้อย่างมีประสิทธิภาพ ลดการใช้หน่วยความจำ และปรับปรุงความเร็วของการตอบสนอง
ข้อมูลสำคัญที่ต้องจำ:
client_body_buffer_sizeควบคุมขนาดของเนื้อหาคำขอจากไคลเอนต์client_header_buffer_sizeและlarge_client_header_buffersควบคุมขนาดของส่วนหัวคำขอproxy_buffer_sizeและproxy_buffersใช้สำหรับการสื่อสารแบบ reverse proxyfastcgi_buffer_sizeและfastcgi_buffersใช้สำหรับแอปพลิเคชัน PHP- การตั้งค่าที่เหมาะสมขึ้นอยู่กับกรณีการใช้งานและทรัพยากรของเซิร์ฟเวอร์
- ตรวจสอบลองของ Nginx เพื่อวินิจฉัยปัญหา
- ปรับแต่งค่า buffer ทีละขั้นตอนและทดสอบในแต่ละครั้ง
แนะนำบริการ Dot Enterprise Cloud VPS & Cloud Hosting
หากคุณต้องการเซิร์ฟเวอร์ที่มีประสิทธิภาพสูง พร้อมการตั้งค่า Nginx ที่ดีแล้วสำเร็จ Dot Enterprise Cloud VPS และ Cloud Hosting เป็นตัวเลือกที่ยอดเยี่ยม
บริการของเรา รวมถึง:
- เซิร์ฟเวอร์ Nginx ที่ตั้งค่าให้เหมาะสม
- การสนับสนุนด้านเทคนิค 24/7
- การสำรองข้อมูลอัตโนมัติ
- การรักษาความปลอดภัยระดับเอนเทอร์ไพรส์
- ความเร็ว (uptime) 99.9%
สำหรับข้อมูลเพิ่มเติมและการลองใช้ฟรี ให้เยี่ยมชม Cloud VPS และ Cloud Hosting ของ Dot Enterprise ในวันนี้
Contact Dot Enterprise: สำหรับการสอบถามเพิ่มเติม ให้ติดต่อทีมงานของเราที่ https://de.co.th

