Tag: ubuntu 20.04

  • 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