ค้นหาเว็บไซต์

วิธีเปิดใช้งาน HTTP/2 ใน Apache บน Ubuntu


นับตั้งแต่ก่อตั้ง เวิลด์ไวด์เว็บ (www) โปรโตคอล HTTP ได้พัฒนาตลอดหลายปีที่ผ่านมาเพื่อส่งมอบเนื้อหาดิจิทัลที่ปลอดภัยและรวดเร็วผ่านทาง อินเทอร์เน็ต.

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

ข้อจำกัดของ HTTP/1.1 คืออะไร?

โปรโตคอล HTTP/1.1 เต็มไปด้วยข้อบกพร่องต่อไปนี้ ซึ่งทำให้เหมาะน้อยลง โดยเฉพาะอย่างยิ่งเมื่อใช้เว็บเซิร์ฟเวอร์ที่มีการเข้าชมสูง:

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

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

ข้อดีของการใช้ HTTP/2

มีข้อดีดังต่อไปนี้:

  1. การบีบอัดส่วนหัวที่ลดคำขอของไคลเอ็นต์ให้เหลือน้อยที่สุดและลดการใช้แบนด์วิธ ผลลัพธ์ที่ได้คือความเร็วในการโหลดหน้าเว็บที่รวดเร็ว
  2. มัลติเพล็กซ์คำขอหลายรายการผ่านการเชื่อมต่อ TCP เดียว ทั้งเซิร์ฟเวอร์และไคลเอนต์สามารถแบ่งคำขอ HTTP ออกเป็นหลายเฟรมและจัดกลุ่มใหม่ที่ปลายอีกด้านหนึ่ง
  3. การแสดงเว็บเร็วขึ้นซึ่งส่งผลให้อันดับ SEO ดีขึ้น
  4. ปรับปรุงความปลอดภัยเนื่องจากเบราว์เซอร์หลักส่วนใหญ่โหลด HTTP/2 ผ่าน HTTPS
  5. 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 ได้อย่างสะดวกสบาย