NGINX คือ ตอนที่ 6 : การกำหนดค่าขั้นสูง

  1. กฎการเขียนซ้ำ (Rewriting) และการเปลี่ยนเส้นทาง (Redirection)
  2. ให้บริการเนื้อหาแบบไดนามิก (Dynamic Content)
  3. การเพิ่มประสิทธิภาพบัฟเฟอร์ (Buffers) NGINX การหมดเวลา (Timeouts) และการตั้งค่าอื่นๆ

การทำความเข้าใจและเชี่ยวชาญเทคนิคการกำหนดค่าขั้นสูงใน NGINX สามารถเปลี่ยนการทำเว็บและทำแอพของคุณจากดีเป็นดี พลังและความยืดหยุ่นของ NGINX ช่วยให้คุณสร้างประสบการณ์การทำเว็บและทำแอพที่เหมาะสมที่สุด รวดเร็ว และปลอดภัย ในบทความนี้ เราจะเจาะลึกการกำหนดค่าขั้นสูงของ NGINX รวมถึงกฎการเขียนใหม่และการเปลี่ยนเส้นทาง การแสดงเนื้อหาแบบไดนามิก และการปรับบัฟเฟอร์ NGINX ให้เหมาะสม การหมดเวลา และการตั้งค่าอื่นๆ ในการทำเว็บและทำแอพ

1. กฎการเขียนซ้ำ (Rewriting) และการเปลี่ยนเส้นทาง (Redirection)

การเขียนซ้ำและการเปลี่ยนเส้นทางเป็นส่วนสำคัญในการสร้างประสบการณ์การทำเว็บและทำแอพ เพื่อให้ผู้ใช้ของคุณสามารถไปยังส่วนต่างๆ ของแพลตฟอร์มได้อย่างราบรื่น NGINX มอบวิธีที่มีประสิทธิภาพและยืดหยุ่นในการจัดการสิ่งเหล่านี้ด้วยคำสั่ง rewrite และ return คำสั่ง

กฎการเขียนใหม่ใน NGINX ช่วยให้คุณเปลี่ยนคำขอ URL ภายในหรือเปลี่ยนเส้นทางคำขอไปยัง URL อื่นได้ ตัวอย่างเช่น สมมติว่าคุณมี URL เก่า /old_path/old_page.html ซึ่งจำเป็นต้องเปลี่ยนเส้นทางไปยัง URL /new_path/new_page.html ใหม่ วิธีตั้งค่ากฎการเขียนซ้ำมีดังนี้

rewrite ^/old_path/old_page.html$ /new_path/new_page.html permanent;

คำสั่งนี้ทำให้ NGINX เปลี่ยนเส้นทางคำขอใดๆ ไปยัง URL เก่าไปยัง URL ใหม่ โดยมีสถานะ HTTP 301 ย้ายอย่างถาวร

แม้ว่ากฎการเขียนใหม่อาจมีประสิทธิภาพ แต่ขอแนะนำให้ใช้ คำสั่ง return และ try_filesหากเป็นไปได้เพื่อการกำหนดค่าที่ง่ายและชัดเจนยิ่งขึ้น return ทำให้ NGINX หยุดการประมวลผลและส่งคืนโค้ดที่ระบุ ในขณะที่ try_files ตรวจสอบไฟล์ตามลำดับและส่งคืนโค้ดแรกที่พบ

2. ให้บริการเนื้อหาแบบไดนามิก (Dynamic Content)

เพื่อมอบประสบการณ์การทำเว็บและทำแอพที่มีประสิทธิภาพ NGINX มักใช้ร่วมกับซอฟต์แวร์อื่นเพื่อให้บริการเนื้อหาแบบไดนามิก ตัวอย่างเช่น สำหรับแอปพลิเคชัน PHP คุณมักจะใช้ PHP-FPM (FastCGI Process Manager) สิ่งนี้จำเป็นต้องกำหนดค่า NGINX เพื่อส่งคำขอ PHP ไปยัง PHP-FPM

ก่อนอื่น ให้ติดตั้ง PHP และ PHP-FPM จากนั้นแก้ไขบล็อกเซิร์ฟเวอร์ของคุณในไฟล์การกำหนดค่า NGINX:

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

ในการกำหนดค่านี้ คำขอใดๆ ที่ลงท้ายด้วย .php จะถูกส่งผ่านไปยังเซิร์ฟเวอร์ FastCGI ที่ซ็อกเก็ตที่ระบุ แยกเส้นทาง fastcgi_split_path_info ของไฟล์สคริปต์และข้อมูลเส้นทาง ทำให้มี URL ที่สวยงามในแอปของคุณ

ในทำนองเดียวกัน คุณสามารถกำหนดค่า NGINX ให้ทำงานร่วมกับแอปพลิเคชัน Python โดยใช้แอปพลิเคชัน uWSGI, Ruby พร้อม Passenger และแอปพลิเคชัน Node.js ด้วยการตั้งค่าพร็อกซีย้อนกลับ

3. การเพิ่มประสิทธิภาพบัฟเฟอร์ (Buffers) NGINX การหมดเวลา (Timeouts) และการตั้งค่าอื่นๆ

NGINX มีการตั้งค่ามากมายเพื่อเพิ่มประสิทธิภาพประสบการณ์เว็บและแอพสำหรับผู้ใช้ของคุณ การปรับแต่งการตั้งค่าเหล่านี้จะทำให้เซิร์ฟเวอร์ของคุณมีประสิทธิภาพมากขึ้น ตอบสนองได้ดีขึ้น และเหมาะสมกับรูปแบบการรับส่งข้อมูลเฉพาะของคุณมากขึ้น

  • บัฟเฟอร์ (Buffers) : การตั้งค่าบัฟเฟอร์กำหนดวิธีที่ NGINX จะจัดเก็บข้อมูลคำขอของลูกค้า NGINX ใช้บัฟเฟอร์เพื่อจัดการความไม่เสถียรของเครือข่ายและความแตกต่างของความเร็วไคลเอนต์ ด้วยการเพิ่มหรือลดจำนวนบัฟเฟอร์และขนาดของบัฟเฟอร์ คุณสามารถปรับประสิทธิภาพของเซิร์ฟเวอร์ NGINX ตามความต้องการของแอปและทรัพยากรระบบ หากเซิร์ฟเวอร์ของคุณจัดการกับไฟล์ขนาดใหญ่บ่อยครั้ง การเพิ่มขนาดบัฟเฟอร์อาจปรับปรุงประสิทธิภาพได้
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
  • การหมดเวลา (Timeouts) : การหมดเวลากำหนดระยะเวลาที่ NGINX จะรอสำหรับการสื่อสารบางประเภท ได้แก่client_body_timeout, client_header_timeout, keepalive_timeout, send_timeout และ ตัวอย่างเช่น keepalive_timeout หมดเวลาระหว่างที่การเชื่อมต่อไคลเอ็นต์แบบ Keep-alive จะยังคงเปิดอยู่ที่ฝั่งเซิร์ฟเวอร์ การปรับค่าเหล่านี้สามารถช่วยจัดการทรัพยากรได้อย่างมีประสิทธิภาพ โดยเฉพาะอย่างยิ่งสำหรับแอปที่มีการเข้าชมสูง
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
  • กระบวนการและการเชื่อมต่อของผู้ปฏิบัติงาน (Worker Processes and Connections) : การตั้งค่าเหล่านี้ส่งผลต่อวิธีที่ NGINX จัดการกับคำขอ NGINX ได้รับการออกแบบมาเพื่อสร้างกระบวนการ “worker_processes” หลายกระบวนการ ซึ่งแต่ละกระบวนการสามารถจัดการการเชื่อมต่อจำนวนมากได้ คำสั่ง worker_processes จะกำหนดจำนวนการประมวลผลของระบบผู้ปฏิบัติงานที่จะรัน ในขณะที่ worker_connections ระบุจำนวนสูงสุดของการเชื่อมต่อพร้อมกันที่ผู้ปฏิบัติงานแต่ละคนสามารถจัดการได้
worker_processes auto;
events {
    worker_connections 1024;
}

ในการกำหนดค่านี้ auto อนุญาตให้ NGINX เลือกจำนวนกระบวนการของผู้ปฏิบัติงานที่เหมาะสมตามจำนวนคอร์ CPU ที่มีอยู่

โปรดจำไว้ว่าการปรับการตั้งค่าเหล่านี้ให้เหมาะสมนั้นจำเป็นต้องมีความเข้าใจที่ชัดเจนเกี่ยวกับแอปและข้อกำหนดการรับส่งข้อมูลเฉพาะของคุณ นอกจากนี้ แนวทางปฏิบัติที่ดีในการตรวจสอบประสิทธิภาพเซิร์ฟเวอร์ของคุณและปรับการตั้งค่าเหล่านี้ตามความจำเป็น


การกำหนดค่า NGINX ขั้นสูงช่วยให้นักพัฒนาสามารถมอบประสบการณ์การทำเว็บและทำแอพที่มีประสิทธิภาพสูง ปรับขยายได้ และหลากหลาย การเรียนรู้การเขียนซ้ำ (rewrites) และการเปลี่ยนเส้นทาง (redirections) การแสดงเนื้อหาแบบไดนามิก (dynamic content) และการปรับการตั้งค่าให้เหมาะสมสำหรับบัฟเฟอร์ (buffers) การหมดเวลา (timeouts) และกระบวนการของผู้ปฏิบัติงานสามารถปรับปรุงประสิทธิภาพของแอปพลิเคชันของคุณได้อย่างมาก โปรดจำไว้ว่า แม้ว่าการกำหนดค่าที่กล่าวถึงในที่นี้จะเป็นแนวทางปฏิบัติทั่วไป ให้ปรับแต่งการตั้งค่าของคุณให้ตรงตามความต้องการเฉพาะของคุณเสมอ และตรวจสอบประสิทธิภาพเซิร์ฟเวอร์ของคุณสำหรับการปรับเปลี่ยนที่จำเป็นในการทำเว็บและทำแอพ


NGINX คืออะไร

NGINX คือ ตอนที่ 5 : Load Balancing และ Reverse Proxy
NGINX คือ ตอนที่ 7 : ความปลอดภัย (Security) ใน NGINX