วิธีเปิดใช้งาน HTTP/2 ใน Apache บน Ubuntu
นับตั้งแต่ก่อตั้ง เวิลด์ไวด์เว็บ (www) โปรโตคอล HTTP ได้พัฒนาตลอดหลายปีที่ผ่านมาเพื่อส่งมอบเนื้อหาดิจิทัลที่ปลอดภัยและรวดเร็วผ่านทาง อินเทอร์เน็ต.
เวอร์ชันที่ใช้กันอย่างแพร่หลายที่สุดคือ HTTP 1.1 และถึงแม้จะอัดแน่นไปด้วยการปรับปรุงฟีเจอร์และการเพิ่มประสิทธิภาพการทำงานเพื่อแก้ไขข้อบกพร่องของเวอร์ชันก่อนหน้า แต่ก็ยังขาดฟีเจอร์เด่นอื่นๆ บางประการที่ได้รับการแก้ไขโดย HTTP/2.
ข้อจำกัดของ HTTP/1.1 คืออะไร?
โปรโตคอล HTTP/1.1 เต็มไปด้วยข้อบกพร่องต่อไปนี้ ซึ่งทำให้เหมาะน้อยลง โดยเฉพาะอย่างยิ่งเมื่อใช้เว็บเซิร์ฟเวอร์ที่มีการเข้าชมสูง:
- ความล่าช้าในการโหลดหน้าเว็บเนื่องจากส่วนหัว HTTP ที่ยาว
- HTTP/1.1 สามารถส่งคำขอได้เพียงหนึ่งคำขอสำหรับแต่ละไฟล์ต่อการเชื่อมต่อ TCP
- เนื่องจาก HTTP/1.1 ประมวลผลหนึ่งคำขอสำหรับทุกการเชื่อมต่อ TCP เบราว์เซอร์จึงถูกบังคับให้ส่งการเชื่อมต่อ TCP แบบขนานจำนวนมากเพื่อประมวลผลคำขอพร้อมกัน สิ่งนี้นำไปสู่ความแออัดของ TCP และการสูญเสียแบนด์วิธในที่สุดและความเสื่อมโทรมของเครือข่าย
ปัญหาที่กล่าวมาข้างต้นมักนำไปสู่การลดประสิทธิภาพและต้นทุนค่าใช้จ่ายสูงในการใช้แบนด์วิธ HTTP/2 เข้ามามีบทบาทเพื่อแก้ไขปัญหาเหล่านี้ และตอนนี้คืออนาคตของโปรโตคอล HTTP
ข้อดีของการใช้ HTTP/2
มีข้อดีดังต่อไปนี้:
- การบีบอัดส่วนหัวที่ลดคำขอของไคลเอ็นต์ให้เหลือน้อยที่สุดและลดการใช้แบนด์วิธ ผลลัพธ์ที่ได้คือความเร็วในการโหลดหน้าเว็บที่รวดเร็ว
- มัลติเพล็กซ์คำขอหลายรายการผ่านการเชื่อมต่อ TCP เดียว ทั้งเซิร์ฟเวอร์และไคลเอนต์สามารถแบ่งคำขอ HTTP ออกเป็นหลายเฟรมและจัดกลุ่มใหม่ที่ปลายอีกด้านหนึ่ง
- การแสดงเว็บเร็วขึ้นซึ่งส่งผลให้อันดับ SEO ดีขึ้น
- ปรับปรุงความปลอดภัยเนื่องจากเบราว์เซอร์หลักส่วนใหญ่โหลด HTTP/2 ผ่าน HTTPS
- HTTP/2 ถือว่าเหมาะกับอุปกรณ์พกพามากขึ้นด้วยคุณสมบัติการบีบอัดส่วนหัว
อย่างไรก็ตาม เราจะเปิดใช้งาน HTTP/2 บน Apache บน Ubuntu 20.04 LTS และ Ubuntu 18.04 LTS
ข้อกำหนดเบื้องต้น:
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งาน HTTPS บนเว็บเซิร์ฟเวอร์ Apache ก่อนที่จะเปิดใช้งาน HTTP/2 เนื่องจากเว็บเบราว์เซอร์ทั่วไปทั้งหมดรองรับ HTTP/2 ผ่าน HTTPS ฉันมีชื่อโดเมนที่ชี้ไปยังอินสแตนซ์บน Ubuntu 20.04 ซึ่งใช้งานเซิร์ฟเวอร์ Apache ที่มีการรักษาความปลอดภัยโดยใช้ใบรับรอง Let's Encrypt
นอกจากนี้ ขอแนะนำให้คุณมี Apache 2.4.26 และเวอร์ชันที่ใหม่กว่าสำหรับเซิร์ฟเวอร์ที่ใช้งานจริงที่ต้องการเปลี่ยนไปใช้ HTTP/2
หากต้องการตรวจสอบเวอร์ชันของ Apache ที่คุณใช้งานอยู่ ให้ดำเนินการคำสั่ง:
apache2 -v
จากผลลัพธ์ คุณจะเห็นว่าเรากำลังใช้เวอร์ชันล่าสุด ซึ่งก็คือ Apache 2.4.41 ในขณะที่เขียนบทความนี้
เปิดใช้งาน HTTP/2 บนโฮสต์เสมือน Apache
ในการเริ่มต้น ขั้นแรกให้ยืนยันว่าเว็บเซิร์ฟเวอร์ใช้งาน HTTP/1.1 คุณสามารถทำได้บนเบราว์เซอร์โดยเปิดส่วนเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์บน Google Chrome โดยใช้ชุดค่าผสม Ctrl +SHIFT + I
คลิกที่แท็บ 'เครือข่าย' และค้นหาคอลัมน์ 'โปรโตคอล'
จากนั้น เปิดใช้งานโมดูล HTTP/2 บน Ubuntu โดยเรียกใช้คำสั่งต่อไปนี้
sudo a2enmod http2
จากนั้น ค้นหาและแก้ไขไฟล์โฮสต์เสมือน SSL หากคุณได้เปิดใช้งาน HTTPS โดยใช้ Let's Encrypt ไฟล์ใหม่จะถูกสร้างขึ้นด้วย le-ssl.conf คำต่อท้าย
sudo vim /etc/apache2/sites-enabled/your-domain-name-le-ssl.conf
แทรกคำสั่งด้านล่างหลังแท็ก
Protocols h2 http/1.1
หากต้องการบันทึกการเปลี่ยนแปลง ให้รีสตาร์ทเว็บเซิร์ฟเวอร์ Apache
sudo systemctl restart apache2
หากต้องการตรวจสอบว่าเปิดใช้งาน HTTP/2 หรือไม่ ให้ดึงข้อมูลส่วนหัว HTTP โดยใช้คำสั่ง curl ต่อไปนี้ดังที่แสดง
curl -I --http2 -s https://domain.com/ | grep HTTP
คุณควรได้รับผลลัพธ์ที่แสดง
HTTP/2 200
บนเบราว์เซอร์ ให้โหลดไซต์ของคุณซ้ำ จากนั้นกลับไปที่เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์และยืนยัน HTTP/2 ที่แสดงโดยป้ายกำกับ h2
ในคอลัมน์ 'Protocol'
เมื่อใช้โมดูล mod_php กับ Apache
หากคุณใช้งาน Apache ควบคู่ไปกับโมดูล mod_php คุณจะต้องเปลี่ยนไปใช้ PHP-FPM เนื่องจากโมดูล mod_php ใช้โมดูล prefork MPM ซึ่ง HTTP/2 ไม่รองรับ คุณต้องถอนการติดตั้ง prefork MPM และสลับไปที่โมดูล mpm_event ซึ่งจะรองรับโดย HTTP/2
หากคุณกำลังใช้โมดูล PHP 7.4 mod_php ให้ปิดการใช้งานดังที่แสดง:
sudo a2dismod php7.4
หลังจากนั้น ให้ปิดการใช้งานโมดูล prefork MPM
sudo a2dismod mpm_prefork
หลังจากปิดใช้งานโมดูลแล้ว ให้เปิดใช้งานโมดูล Event MPM, Fast_CGI และ setenvif ตามที่แสดง
sudo a2enmod mpm_event proxy_fcgi setenvif
ติดตั้ง PHP-FPM บน Ubuntu
ถัดไป ติดตั้งและเริ่ม PHP-FPM ตามที่แสดง
sudo apt install php7.4-fpm
sudo systemctl start php7.4-fpm
จากนั้นเปิดใช้งาน PHP-FPM เพื่อเริ่มต้นในเวลาบูต
sudo systemctl enable php7.4-fpm
จากนั้น เปิดใช้งาน PHP-FPM เป็นตัวจัดการ PHP ของ Apache และรีสตาร์ทเว็บเซิร์ฟเวอร์ Apache เพื่อให้การเปลี่ยนแปลงมีผล
sudo a2enconf php7.4-fpm
เปิดใช้งานการสนับสนุน HTTP/2 ใน Apache Ubuntu
จากนั้นเปิดใช้งานโมดูล HTTP/2 เหมือนเมื่อก่อน
sudo a2enmod http2
รีสตาร์ท Apache เพื่อซิงโครไนซ์การเปลี่ยนแปลงทั้งหมด
sudo systemctl restart apache2
สุดท้ายนี้ คุณสามารถทดสอบได้ว่าเซิร์ฟเวอร์ของคุณใช้โปรโตคอล HTTP/2 หรือไม่ โดยใช้คำสั่ง curl ดังที่แสดง
curl -I --http2 -s https://domain.com/ | grep HTTP
คุณยังสามารถเลือกใช้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์บนเบราว์เซอร์ Google Chrome เพื่อยืนยันตามที่บันทึกไว้ก่อนหน้านี้ เราต้องจบคู่มือนี้ เราหวังว่าคุณจะพบข้อมูลที่มีค่าและคุณสามารถเปิดใช้งาน HTTP/2 บน Apache ได้อย่างสะดวกสบาย