เจาะลึก Nginx ตั้งแต่เริ่มต้น: ทำความเข้าใจไฟล์คอนฟิกจนถึงระบบ HTTPS
คู่มือฉบับเข้าใจง่ายสำหรับผู้เริ่มต้นใช้งาน Nginx ตั้งแต่โครงสร้างไฟล์คอนฟิกูเรชัน บล็อกคำสั่งพื้นฐาน ไปจนถึงการตั้งค่าความปลอดภัยด้วย HTTPS

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- Nginx อ่านไฟล์หลักอย่าง nginx.conf โดยไฟล์อื่นต้องถูกเรียกใช้งานผ่านไฟล์นี้
- การรัน Nginx ใต้บัญชี www-data ปลอดภัยกว่าการใช้บัญชีผู้ใช้อื่น
- บล็อก server_name ช่วยจัดการโดเมนและการรับส่งคำขอของเว็บไซต์
- HTTPS เพิ่มความปลอดภัยด้วยการเข้ารหัสผ่านโปรโตคอล TLS
การใช้งาน Nginx สำหรับผู้เริ่มต้นอาจดูซับซ้อนในตอนแรก แต่เมื่อเข้าใจโครงสร้างพื้นฐานแล้วจะพบว่าจัดการได้ไม่ยาก โฟลเดอร์ของ Nginx อาจมีตั้งแต่ไฟล์ nginx.conf เพียงไฟล์เดียว ไปจนถึงไดเรกทอรีและไฟล์ย่อยอื่นๆ โดย Nginx จะอ่านค่าจากไฟล์ nginx.conf โดยตรง ส่วนไฟล์อื่นๆ จะต้องถูกเรียกใช้งาน (include) หรืออ้างอิงจากไฟล์หลักนี้เท่านั้น
คำถามที่พบบ่อยคือเหตุใดจึงไม่ควรใช้บัญชีผู้ใช้ ubuntu ในการรัน Nginx บัญชี ubuntu คือบัญชีล็อกอินของคุณซึ่งเป็นเจ้าของเชลล์ กระบวนการ PM2 และแอปพลิเคชัน Node.js แต่ Nginx ควรรันภายใต้บัญชีบริการเฉพาะอย่าง www-data เนื่องจากมีสิทธิ์น้อยกว่าซึ่งปลอดภัยกว่า เป็นค่ามาตรฐานบน Ubuntu และช่วยให้การจัดการสิทธิ์เป็นไปได้ง่ายขึ้น
ในส่วนของการจัดการซีพียู คำสั่ง worker_processes auto จะบอกให้ Nginx สร้างเวิร์กเกอร์หนึ่งตัวต่อหนึ่งแกนซีพียูของเครื่องโฮสต์ แม้ว่าจะสามารถกำหนดตัวเลขเจาะจงได้ แต่การปล่อยให้ Nginx ปรับตัวตามเครื่องโฮสต์นั้นปลอดภัยที่สุด เวิร์กเกอร์เหล่านี้ทำหน้าที่ให้บริการคำขอจริง ขณะที่มาสเตอร์โปรเซสทำหน้าที่จัดการพวกมัน

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
บล็อก events{} ทำหน้าที่กำหนดวิธีที่เวิร์กเกอร์จัดการการเชื่อมต่อ ผ่านคำสั่ง worker_connections 1024 ซึ่งหมายถึงจำนวนการเชื่อมต่อสูงสุดที่เวิร์กเกอร์หนึ่งตัวจะจัดการได้พร้อมกัน หากเรามี 4 เวิร์กเกอร์และ 1024 เวิร์กเกอร์คอนเนคชัน เราจะรองรับการเชื่อมต่อพร้อมกันได้ประมาณ 4,096 การเชื่อมต่อ (4 คูณ 1024)
บล็อก http{} ใช้กำหนดทุกอย่างที่เกี่ยวข้องกับการตั้งค่า HTTP และ HTTPS ภายในบล็อกนี้จะประกอบด้วยการตั้งค่าส่วนย่อยต่างๆ เช่น บล็อกเซิร์ฟเวอร์ที่มักใช้สำหรับการตั้งค่าเว็บไซต์หรือแอปพลิเคชันเดี่ยว โดยมีคำสั่งสำคัญดังนี้:
- server_name: ระบุว่าบล็อกเซิร์ฟเวอร์นี้ควรตอบสนองต่อชื่อโฮสต์ใด เช่น ชื่อโดเมนหรือ localhost
- root /var/www/html;: ไดเรกทอรีที่ Nginx ใช้ค้นหาไฟล์สแตติก เช่น หากขอไฟล์
/about.htmlNginx จะมองหาที่/var/www/html/about.html - index index.html index.htm;: หน้าแรกที่ Nginx จะเลือกแสดงเมื่อมีผู้เข้าชมเว็บไซต์
- access_log และ error_log: บันทึกประวัติการเข้าใช้งานและข้อผิดพลาด โดยมักเก็บบันทึกไว้ที่
/log/nginx/
การทำความเข้าใจโครงสร้างบล็อกของ Nginx เป็นหัวใจสำคัญในการดูแลระบบเว็บเซิร์ฟเวอร์ การแยกไฟล์คอนฟิกูเรชันออกเป็นส่วนๆ เช่น การแยกบล็อกเซิร์ฟเวอร์ไปไว้ในไฟล์เฉพาะแล้วเรียกเข้ามาใน nginx.conf จะช่วยให้ผู้ดูแลระบบสามารถบำรุงรักษาและแก้ไขข้อผิดพลาดในระบบขนาดใหญ่ได้อย่างเป็นระเบียบและรวดเร็วขึ้น
เมื่อพูดถึงความปลอดภัย การใช้งาน HTTP แบบธรรมดาจะส่งข้อมูลทั้งหมดรวมถึงข้อมูลสำคัญในรูปแบบข้อความธรรมดา ซึ่งอาจถูกดักฟังโดยผู้ให้บริการอินเทอร์เน็ต แฮกเกอร์ หรือผู้ไม่หวังดีใน Wi-Fi สาธารณะ เนื่องจาก HTTP ไม่มีระบบเข้ารหัสหรือการตรวจสอบความถูกต้อง นี่จึงเป็นหน้าที่ของ HTTPS
ตัวอักษร 'S' ใน HTTPS ย่อมาจาก Secure หมายความว่าข้อมูลที่ส่งผ่านจะถูกเข้ารหัส ผ่านการตรวจสอบตัวตน และมีการตรวจสอบการถูกแก้ไข ข้อมูลจึงวิ่งอยู่ภายในช่องทาง TLS ที่เข้ารหัสไว้ โดยคำว่า SSL เป็นโปรโตคอลดั้งเดิมที่ปัจจุบันล้าสมัยไปแล้ว และถูกแทนที่ด้วย TLS (Transport Layer Security) ถึงแม้คนส่วนใหญ่จะยังเรียกติดปากว่า 'ใบรับรอง SSL' แต่ในทางเทคนิคแล้วปัจจุบันเราใช้ใบรับรอง TLS จากหน่วยงานอย่าง Let's Encrypt หรือ DigiCert
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น