วิธีตั้งค่า HTTP/2 และ HTTP/3 ให้แอป Laravel บน Nginx เพื่อเพิ่มความเร็วเว็บ

9 นาที 18 views บันทึกเป็น PDF
วิธีตั้งค่า HTTP/2 และ HTTP/3 ให้แอป Laravel บน Nginx เพื่อเพิ่มความเร็วเว็บ

อยากให้เว็บ Laravel โหลดไวขึ้นไหม? มาเรียนรู้วิธีอัปเกรดโปรโตคอล HTTP/2 และ HTTP/3 บน Nginx เพื่อลดคอขวดในการส่งข้อมูลให้ผู้ใช้งาน

ทำความเข้าใจ HTTP คืออะไรและทำไมต้องอัปเกรด

เวลาเราเปิดเว็บไซต์ HTTP (Hypertext Transfer Protocol หรือโปรโตคอลสื่อสารที่ใช้รับส่งข้อมูลบนเว็บ) คือตัวกลางที่ทำหน้าที่เหมือนบุรุษไปรษณีย์คอยรับคำสั่งจากเบราว์เซอร์ไปหาเซิร์ฟเวอร์ และนำข้อมูลกลับมาแสดงผลหน้าจอ ถ้าเปรียบเทียบง่ายๆ การโหลดเว็บสมัยก่อนเหมือนเราส่งจดหมายทีละฉบับ กว่าจะได้รับของครบก็ต้องรอให้บุรุษไปรษณีย์วิ่งวนกลับไปกลับมาหลายรอบจนเสียเวลา

เมื่อเราพัฒนาแอปด้วย Laravel (เฟรมเวิร์กภาษา PHP สำหรับพัฒนาเว็บ) เรามักจะใส่รูปภาพ ไฟล์สไตล์ (CSS) และไฟล์คำสั่ง (JavaScript) จำนวนมากเข้าไปด้วย ถ้าเรายังใช้ HTTP เวอร์ชันเก่าอย่าง HTTP/1.1 เบราว์เซอร์จะเปิดช่องทางรับส่งข้อมูลได้จำกัด ทำให้ไฟล์เหล่านั้นต้องเข้าแถวรอคิวกันโหลดเหมือนคนยืนต่อแถวซื้อของที่เคาน์เตอร์เดียว ซึ่งเป็นคอขวดที่ทำให้เว็บโหลดช้าโดยไม่จำเป็น

การขยับไปใช้ HTTP/2 และ HTTP/3 จึงเป็นการอัปเกรดช่องทางการสื่อสารให้กว้างขึ้นและฉลาดขึ้น ทำให้ข้อมูลไหลลื่นเหมือนมีเคาน์เตอร์รับของหลายช่องพร้อมกัน สำหรับมือใหม่ที่กำลังฝึกเขียนโปรแกรม การเข้าใจเรื่องนี้จะช่วยให้คุณมองเห็นภาพรวมของ Performance (ประสิทธิภาพความเร็วของแอป) ที่ไม่ได้ขึ้นอยู่กับแค่การเขียนโค้ดให้เก่งอย่างเดียว แต่ยังรวมถึงการปรับแต่งสภาพแวดล้อมที่แอปเราทำงานอยู่ด้วย

รู้จักวิวัฒนาการจาก HTTP/1.1 สู่ยุคสมัยใหม่

ในยุค HTTP/1.1 เบราว์เซอร์จะเปิดการเชื่อมต่อแบบ TCP (Transmission Control Protocol หรือมาตรฐานการรับส่งข้อมูลที่เน้นความถูกต้อง) ได้เพียงไม่กี่ช่องทางต่อหนึ่งเว็บไซต์ หากไฟล์ไหนหายไปกลางทาง ข้อมูลที่เหลือจะถูกหยุดรอจนกว่าไฟล์นั้นจะส่งสำเร็จ ซึ่งเรียกว่าอาการ Head-of-line blocking (การที่ข้อมูลค้างรอคิวกันเป็นแถว) ทำให้ผู้ใช้งานบนมือถือที่สัญญาณอินเทอร์เน็ตไม่นิ่งรู้สึกว่าเว็บโหลดช้ามาก

ต่อมา HTTP/2 ได้เข้ามาแก้ปัญหาด้วยการทำ Multiplexing (การส่งข้อมูลหลายชุดผ่านช่องทางเดียวพร้อมกัน) ทำให้เราสามารถส่งไฟล์ภาพหรือสคริปต์จำนวนมากได้โดยไม่ต้องรอคิว แต่ข้อจำกัดคือถ้า TCP มีปัญหา ข้อมูลทั้งหมดก็ยังต้องหยุดรออยู่ดี จนกระทั่ง HTTP/3 เข้ามาเปลี่ยนไปใช้ QUIC (โปรโตคอลใหม่ที่รับส่งข้อมูลผ่าน UDP ซึ่งเร็วกว่าและยืดหยุ่นกว่า) ทำให้เมื่อมีข้อมูลตกหล่น ก็จะเสียเฉพาะไฟล์นั้นไฟล์เดียว ไม่กระทบส่วนอื่นของหน้าเว็บ

หากคุณกำลังทำโปรเจกต์ Laravel ให้ลองจินตนาการว่าหน้าแอปของคุณมีทั้งรูปภาพสินค้า ไฟล์ Vite (เครื่องมือช่วยรวมไฟล์สคริปต์) และไอคอนต่างๆ ถ้าใช้ HTTP/3 แอปของคุณจะโหลดได้เร็วขึ้นอย่างเห็นได้ชัดโดยเฉพาะบนเน็ตมือถือ นี่คือสิ่งที่เรียกว่าการปรับแต่งที่ระดับโปรโตคอล ซึ่งเป็นทักษะที่โปรแกรมเมอร์มืออาชีพควรให้ความสำคัญเพื่อให้ผู้ใช้งานได้รับประสบการณ์ที่ดีที่สุด

ผลกระทบต่อแอป Laravel ของคุณ

ต้องทำความเข้าใจก่อนว่าการอัปเกรด HTTP ไม่ได้ช่วยให้โค้ด PHP ของคุณทำงานเร็วขึ้น หากปัญหาอยู่ที่ Eloquent Query (คำสั่งดึงข้อมูลจากฐานข้อมูล) ที่เขียนไม่ดี หรือมีปัญหา N+1 Problem (การดึงข้อมูลซ้ำซ้อนจนโหลดช้า) การอัปเกรดโปรโตคอลก็ช่วยไม่ได้มากนัก เพราะมันช่วยแค่การ "ขนส่ง" ข้อมูลให้ถึงมือผู้ใช้เร็วขึ้นเท่านั้น

งานประเภทไหนที่ได้ประโยชน์ที่สุด? คำตอบคือแอปที่เน้นการแสดงผลที่มีไฟล์ประกอบเยอะๆ เช่น Filament (เครื่องมือสร้างแผงควบคุมแอดมิน) หรือแอปที่ทำด้วย Livewire (เครื่องมือช่วยให้เขียน PHP ได้เหมือนแอปหน้าเดียว) เพราะแอปพวกนี้ต้องเรียกใช้ไฟล์ JavaScript และ CSS จำนวนมาก การใช้ HTTP/3 จะทำให้หน้าเว็บเหล่านี้โหลดขึ้นมาได้ทันทีโดยไม่ต้องรอคิวไฟล์ต่างๆ

สำหรับ API (ช่องทางสื่อสารระหว่างแอป) ที่ส่งข้อมูลเป็น JSON ขนาดเล็ก การอัปเกรดอาจจะเห็นผลน้อยกว่า แต่ก็ยังได้ข้อดีในเรื่อง Connection Migration (ความสามารถในการย้ายการเชื่อมต่อ) ซึ่งช่วยให้ผู้ใช้ที่สลับจาก Wi-Fi ไปเป็น 4G/5G ไม่หลุดจากการใช้งานแอป นี่เป็นจุดแข็งที่ทำให้แอปของคุณดูมีความเสถียรและเป็นมืออาชีพมากขึ้นในสายตาผู้ใช้งาน

วิธีตรวจสอบว่าเซิร์ฟเวอร์เปิดใช้งาน HTTP/2 แล้วหรือยัง

ก่อนจะไปถึง HTTP/3 เราต้องเช็กให้ชัวร์ว่า HTTP/2 ทำงานอยู่ เพราะมันเป็นพื้นฐานที่ต้องมี TLS (Transport Layer Security หรือเทคโนโลยีการเข้ารหัสความปลอดภัย) กำกับไว้เสมอ หากคุณใช้ Nginx (เว็บเซิร์ฟเวอร์ที่ได้รับความนิยม) ในการจัดการแอป Laravel ให้ตรวจสอบไฟล์คอนฟิกูเรชัน (ไฟล์ตั้งค่า) ของคุณว่ามีการตั้งค่าที่ถูกต้องหรือไม่

ในการเช็กว่าเว็บเราเปิดใช้งานหรือยัง ให้เปิดเบราว์เซอร์แล้วไปที่หน้าเว็บของเรา กด F12 เพื่อดู DevTools (เครื่องมือสำหรับนักพัฒนา) แล้วไปที่แถบ Network ให้คลิกขวาที่ชื่อคอลัมน์แล้วเลือกเปิดคอลัมน์ที่ชื่อว่า Protocol หากเห็นคำว่า h2 นั่นหมายความว่าเว็บของคุณรองรับ HTTP/2 เรียบร้อยแล้ว

หากพบว่ายังเป็น http/1.1 คุณต้องเข้าไปแก้ไขที่ไฟล์ตั้งค่า Nginx โดยปกติจะอยู่ในโฟลเดอร์ /etc/nginx/sites-available/ ให้มองหาบรรทัดที่เกี่ยวกับ listen 443 แล้วเพิ่มคำสั่ง http2 on; ลงไปตามตัวอย่างด้านล่างนี้ ซึ่งเป็นมาตรฐานใหม่ที่ Nginx แนะนำให้ใช้แทนการเขียนแบบเดิมที่เคยทำกันมา

# ไฟล์ตั้งค่า Nginx สำหรับแอป Laravel
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on; # เปิดใช้งาน HTTP/2
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
}

บรรทัด listen 443 ssl; คือการบอกให้เซิร์ฟเวอร์รอรับการเชื่อมต่อแบบปลอดภัย ส่วน http2 on; คือคำสั่งเปิดการทำงานของโปรโตคอลเวอร์ชันใหม่ หลังจากแก้ไฟล์แล้วต้องสั่ง sudo nginx -t เพื่อตรวจสอบความถูกต้องของคำสั่งก่อนรีสตาร์ทเซิร์ฟเวอร์ด้วย sudo systemctl restart nginx เสมอ เพื่อป้องกันไม่ให้เว็บล่มหากพิมพ์คำสั่งผิดพลาด

ขั้นตอนการอัปเกรดสู่ HTTP/3 บน Ubuntu 24.04

การจะใช้ HTTP/3 บน Nginx คุณต้องมั่นใจก่อนว่า Nginx เวอร์ชันที่ใช้นั้นรองรับ QUIC และ HTTP/3 แล้ว ซึ่งใน Ubuntu 24.04 มักจะมาพร้อมกับเวอร์ชันที่ใหม่พอสมควร แต่หากยังไม่รองรับ คุณอาจต้องติดตั้งแพ็กเกจเพิ่มเติมหรือคอมไพล์ (Compile - การแปลงโค้ดให้เป็นโปรแกรม) Nginx ใหม่ด้วยตัวเอง ซึ่งเป็นเรื่องค่อนข้างซับซ้อนสำหรับมือใหม่

ทางเลือกที่ง่ายและปลอดภัยที่สุดสำหรับคนเริ่มทำคือการใช้ Cloudflare (บริการเครือข่ายช่วยเร่งความเร็วและป้องกันเว็บ) คุณสามารถเปิดใช้งาน HTTP/3 ได้จากหน้า Dashboard ของ Cloudflare ได้เลยโดยไม่ต้องแตะต้องโค้ดบนเซิร์ฟเวอร์ของคุณแม้แต่บรรทัดเดียว วิธีนี้จะช่วยให้เว็บของคุณสื่อสารด้วย HTTP/3 กับผู้ใช้ ส่วนการสื่อสารระหว่าง Cloudflare กับเซิร์ฟเวอร์ของคุณจะเป็น HTTP/2 ซึ่งปลอดภัยและรวดเร็วมาก

หากคุณยังต้องการตั้งค่าบนเซิร์ฟเวอร์ตัวเอง ต้องใช้ listen 443 quic reuseport; ในไฟล์ Nginx และตั้งค่า Header (ข้อมูลส่วนหัวที่บอกเบราว์เซอร์ว่าเรามี HTTP/3) เพื่อให้เบราว์เซอร์รับทราบ นี่เป็นเรื่องเทคนิคขั้นสูงที่ต้องระวังเรื่องความปลอดภัยเป็นพิเศษ แนะนำให้ลองกับโปรเจกต์ทดสอบบนเครื่องตัวเองก่อนจะนำไปใช้กับแอปที่ใช้งานจริง

สรุป: เลือกทางที่เหมาะกับระดับทักษะของคุณ

การอัปเกรด HTTP ไม่ใช่แค่เรื่องของความเร็ว แต่มันคือการแสดงถึงความใส่ใจในรายละเอียดของโปรแกรมเมอร์ สำหรับมือใหม่ที่เพิ่งเริ่มต้น ผมแนะนำให้เริ่มจากการเช็กว่าเว็บของเราเปิด HTTP/2 แล้วหรือยัง เพราะเป็นสิ่งที่ทำได้ง่ายที่สุดและเห็นผลทันทีในการโหลดไฟล์จำนวนมากจากแอป Laravel ของคุณ

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

สุดท้ายนี้ หากคุณกำลังสร้าง Portfolio (แฟ้มสะสมผลงาน) การทำความเข้าใจเรื่องนี้แล้วเขียนอธิบายใน README ของโปรเจกต์ว่า "ทำไมคุณถึงเลือกเปิดใช้งาน HTTP/2 หรือ HTTP/3" จะเป็นจุดเด่นที่ทำให้คุณดูแตกต่างจากผู้สมัครคนอื่นๆ เพราะมันแสดงให้เห็นว่าคุณไม่ได้แค่เขียนโค้ดเป็น แต่คุณเข้าใจถึงสภาพแวดล้อมที่แอปของคุณต้องไปรันอยู่จริงบนอินเทอร์เน็ตด้วยครับ


ที่มา: Enabling HTTP/2 and HTTP/3 for Your Laravel App: A Practical Nginx Guide — DEV Community: laravel

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

เทคนิคเขียนแอป Flutter สำหรับ Meta Smart Glasses ให้ลื่นไหลและมีประสิทธิภาพ

เทคนิคเขียนแอป Flutter สำหรับ Meta Smart Glasses ให้ลื่นไหลและมีประสิทธิภาพ

เรียนรู้วิธีเขียนแอป Flutter เชื่อมต่อ Meta Smart Glasses ให้ทำงานเร็ว ไม่กระตุก ด้วยการวางสถาปัตยกรรมโค้ดและการจัดการข้อมูลแบบมือโปรที่มือใหม่ทำตามได้จริง

ที่มา: DEV Community

6 hours ago 10 นาที
5 views
เปรียบเทียบ WebSocket, SSE และ Polling เลือกวิธีทำระบบ Real-Time ให้เหมาะกับงาน

เปรียบเทียบ WebSocket, SSE และ Polling เลือกวิธีทำระบบ Real-Time ให้เหมาะกับงาน

อยากทำระบบ Real-Time แต่ไม่รู้จะเลือกใช้ Polling, SSE หรือ WebSocket ดี? มาดูวิธีเลือกใช้ให้เหมาะกับงาน เพื่อให้แอปของคุณทำงานลื่นไหลและประหยัดทรัพยากรเซิร์ฟเวอร์

ที่มา: DEV Community

9 hours ago 10 นาที
4 views