How to apache2 HTTP/2

  • วันนี้อัพเกรตเครื่อง licensing เป็น 20.04.1 เลยมาดูว่ามีอะไรที่ควรเปลี่ยนอีกบ้าง ก็มี HTTP/2 นี่ละ ออกมาหลายปีแล้วยังไม่ได้เริ่มใช้งาน เท่าที่ตรวจสอบเว็บเซิร์ฟเวอร์ฝั่ง windows เป็น http/2 เกือบหมดแล้ว

https://thanwa.medium.com/http-2-คืออะไร-แตกต่างจาก-http-1-1-อย่างไร-5dfb14e46ae4

HTTP/1.1 และ HTTP/2 ต่างกันอย่างไร
  • เริ่มได้
  • ตรวจสอบก่อนว่า server ใช้ http/2 หรือไม่ทำได้โดยใช้ web developer tool บน web browser เช่น Firefox กด F12
Web Developer

คลิกหัวข้อ Network ซึ่งในครั้งแรกจะไม่สามารถดูได้ว่าใช้ http/2 แล้วหรือไม่ ให้คลิกขวาดังรูป แล้วเลือก Protocol

Web Developer

จะได้เป็น

HTTP/1.1

จะเห็น http/1.1 ในช่อง Protocol ถ้าเป็น http/2 จะได้ดังภาพ

HTTP/2
  • ขั้นตอนต่อไปนี้ทำบน Ubuntu 20.04.1 อาจใช้ได้กับ 18.04.x ด้วยเช่นกัน
  • เริ่มด้วยการเปิด module ของ apache2 ที่ชื่อ http2 ด้วยคำสั่ง
sudo a2enmod http2
  • เมื่อตรวจสอบแฟ้ม /etc/apache2/mods-enabled/http2.conf (ด้วย editor ที่ชื่นชอบ) จะพบว่ามีข้อความต่อไปนี้อยู่แล้ว
Protocols h2 h2c http/1.1
  • โดยปกติ Http/1 จะถูกเรียกใช้ก่อนเสมอ เว้นแต่ว่า web browser นั้นจะรองรับ http/2 แต่เราต้องการ http/2 ถูกเลือกก่อนจึงต้องกำหนดตามนั้น
  • แต่ web browser ก็มีการเลือก Protocol เองด้วยเพื่อเป็นการบังคับให้เลือก ตามลำดับของ server ให้ใส่ข้อความต่อไปนี้เพิ่มลงไป
ProtocolsHonorOrder On

*** จากการทดสอบพบว่า web browser สมัยใหม่เลือก http/2 ก่อนอยู่แล้ว ไม่จำเป็นต้องใส่ก็ได้ เพราะงั้นแค่เปิดดูแล้วก็ออกจากแฟ้ม

  • รีสตาร์ท apache2 ด้วยคำสั่ง
sudo systemctl restart apache2
  • ตรวจสอบว่า เป็น http/2 แล้วหรือไม่ด้วยคำสั่ง
curl -I --http2 -s https://domain.com/ | grep HTTP

ได้ผลดังภาพ

curl

แปลว่า http/2 ทำงานแล้ว

  • ทีนี้เว็บเรามันทำด้วย mod_php ต้องเปลี่ยนมาใช้ PHP-FPM
  • ติดตั้ง php7.4-fpm เพิ่มด้วยคำสั่ง
sudo apt install -y php7.4-fpm
  • ปิดการใช้งาน mod_php ด้วยคำสั่ง
sudo a2dismod php7.4
  • ปิดการใช้งาน apache mpm_prefork ด้วยคำสั่ง
sudo a2dismod mpm_prefork
  • หลังจากนั้นเปิด การทำงานของ mpm_event, proxy_fcgi และ setenvif
sudo a2enmod mpm_event proxy_fcgi setenvif
  • เปิดการทำงานของ php7.4-fpm ด้วยคำสั่ง
sudo systemctl start php7.4-fpm
  • ให้ php7.4-fpm ทำงานทุกครั้งที่รีสตาร์ท
sudo systemctl enable php7.4-fpm
  • เปิดการทำงานของ php7.4-fpm ใน apache2
sudo a2enconf php7.4-fpm
  • เริ่มการทำงานของ apache2 ใหม่
sudo systemctl restart apache2
  • ทดสอบว่าเป็น http/2 แล้วด้วยคำสั่ง
curl -I --http2 -s https://domain.com/ | grep HTTP

ได้ผลดังภาพ

  • จริงๆ ตรวจสอบด้วย web browser ก็ได้ แต่อยากอวด command line
  • จบขอให้สนุก

อ้างอิง

https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/

https://httpd.apache.org/docs/2.4/howto/http2.html