HTTP/2 หรือ (เดิมเรียกว่า HTTP/2.0) เป็นมาตรฐานใหม่ของ web protocol ซึ่งจะมาแทนที่ HTTP/1.1 ซึ่งออกมาตั้งแต่ 1997 (RFC 2068) และใช้อยู่จนถึงปัจจุบัน  ความจริงแล้วเจ้า HTTP/2 นั้น มันได้ต่อยอดการพัฒนามาจาก Project SPDY ของ Google จะเห็นว่าเว็บใหญ่ๆหลายๆ เว็บอย่างเช่น Google, Twitter ก็หันมาใช้ HTTP/2 กันแล้ว ในขณะเดียวกัน ตอนนี้ ทาง Facebook มีการพัฒนาต่อยอดเป็น SPDY 3.1 ไปเรียบร้อยแล้ว ^ ^”
ในตอนนี้ทาง IESG ได้ออกมาประกาศให้ HTTP/2 เป็นมาตรฐานเรียบร้อยแล้ว โดยข้อตกลงนี้ถูกร่างเอาไว้ใน RFC 7540 ตั้งแต่ May 2015

จากที่ผมได้หาข้อมูลมาจากหลายๆเว็บ และดูจากผลการทดสอบ จะเห็นว่า HTTP/2 จะมีข้อดีกว่า และเร็วกว่า HTTP/1.1 อยู่หลาายๆ ข้อ เหมือนกัน  อย่างเช่น จะเห็นว่า Header ของ HTTP/2 จะมีการ Compression ชึ่งใช้เทคนิคที่เรียกว่า HPACK (Header Compression for HTTP/2) ทำให้ลดการซ้ำซ้อนของ Header ใน request ทำให้ส่งข้อมูลได้เร็วขึ้น และลดจำนวน request ลง โดยจากต่างจาก HTTP/1.1 ซึ่งเป็นแบบ stateless คือ request อะไรไป จะรอจนกว่าจะได้ response อีกอย่างและข้อมูลที่ผ่าน HTTP/2 นั้นจะมีการ Encrypt เสมอ จะเห็นว่าเมือเราทำการเปิดใช้งาน http2 ใน web server นั้น มันจะบังคับให้เปิดใช้งาน SSL/TLS ด้วย ดังนั้นเราต้องจำเป็นต้องมี SSL Certificate นั่นเอง

บทความนี้ เป็นบทความที่ต่อจากคราวที่แล้ว ที่ผมได้พูดถึงขึ้นตอนการ Upgraded PHP 7 บน  Vesta CP ไปแล้ว สำหรับใครสนใจก็กด link เข้าไปอ่านได้เลยครับ
วิธีเปิดใช้งาน PHP 7 บน Vesta CP เพื่อใช้งานร่วมกับ Nginx + PHP-FPM”  ในวันนี้ผมเลยอยากจะลอง upgrade server ของผมให้รองรับ HTTP/2 กับเค้าสะหน่อยจะได้ไม่ตกเทรนด์  ^ ^  ในการทดสอบครั้งนี้ผมใช้ VPS Linux Server (Digital Ocean) ของผมเอง โดย OS ณ. ตอนนี้ เป็น CentOS 7 x64 และรวมไปถึงการ upgrade Nginx version เก่า ให้เป็น Version ใหม่ เพื่อให้รองรับ HTTP/2  ไปด้วย  ว่าแล้วมาเริ่มกันนเลยครับ

หลังจากตรวจสอบ Version ของ Nginx ที่ติดมากับ Vesta CP นั้นจะเห็นว่ามันยังคงเป็น version 1.8.X อยู่เลย ซึ่งมันยังไม่ support HTTP/2.0  ที่นี้่เราจะต้องทำการ Upgrade มันเพื่อให้เป็น Version 1.9.5 ขึ้นไป ถึงจะรองรับ HTTP/2.0

ก่อนอื่นเลยให้ทำการแก้ไข respo ของ nginx ให้ชี้ไปที่  http://nginx.org/packages/mainline/centos/$releasever/$basearch/

จากนั้นทำการ Install ทับเข้าไปแทนตัวเก่าได้เลย โดยใช้คำสั่งด้านล่าง

ทำการตรวจสอบอีกที จะก็ได้ Nginx version ใหม่ล่าสุดล่ะ  (จะเห็๋นว่ามี package “–with-http_v2_module” เพิ่มเข้ามาด้วย)

การที่เราจะเปิดใช้งาน HTTP/2.0 นั้น มันจะบังคับให้เราจะต้องเปิดใช้งาน SSL ด้วย  ดังนั้นเราจำเป็นจะต้องสร้าง cert ขึ้นมา
หรือถ้าใครไม่มี cert ก็สามารถสร้างขึ้นมาเองก็ได้

กรณีสร้าง Cert ขึ้นมาใช้เองแบบ  Self-Signed SSL Certificate 
ยกตัวอย่างวิธีสร้าง cert ขึ้นมาใช้เอง  (แบบ Self-Signed SSL)
vi /etc/nginx/conf.d/default.conf

vi /home/admin/conf/web/nginx.conf (กรณีถ้าใช้ Vesta CP จะต้อง config ที่ ไฟล์นี้)

จุดที่ต้องการแก้ไขจะมีแค่ 4 บรรทัด

ตัวอย่าง ngix.conf

หลังจากแก้ไข config เสร็จ แล้วลองเข้าเว็บอีก โดยเปลียนจาก http เป็น https แล้วลองสังเกต Header Response ดูอีกที ก็จะเห็นว่า nginx ของเราสามารถลองรับ HTTP/2.0 ละ

กรณีใช้งานรวมกับ Opensource SSL (Let’s Encrypt)
สำหรับท่านที่ต้องการใช้ Let’s Encrypt ซึ่งเป็น Open source SSL ก็สามารถนำมาใช้งานกับ Nginx ได้เช่นเดียวกันครับ

ทำการ download source code ลงมาไว้ที่เครือง และก็ตามด้วยคำสั่งในการสร้าง certificate

หลังจากที่สร้าง certificate let’s encrypt เสร็จ เราจะได้ไฟล์ cert อยู่ 4 ไฟล์  ซึ่งเก็บอยู่ใน
/etc/letsencrypt/live/mydomain.com/
เราจะต้องนำไฟล์เหล่านี้ไป config ไว้ใน config ของ Nginx

vi /home/admin/conf/web/nginx.conf

สำหรับตอนนี้ DH parameters สามารถสร้างได้ตั้งแต่ 2048 bit ขึ้นไปจะดีมาก
ถ้าให้ดีจัดไปสัก 4096 จะแจ่มมากเลย

 


จากนั้นทำการ restart service อีกที

หรือจะลองทดสอบผ่าน web ข้างล่างก็ได้เช่นกัน
https://tools.keycdn.com/http2-test

สำหรับบน Browser มันก็จะมี Plug-in ในการ detected HTTP/2.0 & SPDY อยู่นะครับ
อย่างตอนนี้ผมใช้ตัว HTTP/2 and SPDY อยู่ ถ้าใครสงใจก็ลองไปติดตั้งใช้งานดูนะครับ


หวังว่าบทความนี้น่าจะเป็นประโยชน์กับท่านผู้อ่านไม่มากก็น้อย สำหรับท่านที่อยากจะลอง upgrade web server ให้รองรับ HTTP/2.0 และถ้าหากมีข้อผิดพลาดประการใด จึงขออภัยมา ณ ที่นี้ด้วยนะครับ
หรือถ้าหากมีสงสัยตรงไหน ก็สามารถ comment ถามมาได้เลยครับ

ขอบคุณครับ
Admin@Rockdevper

REF
http://www.liberiangeek.net/2015/05/nginx-1-9-1-released-heres-how-to-installupgrade-in-centos-7-and-ubuntu/
http://wata.hateblo.jp/entry/nginx_1_9_5_http2
http://www.frozenshell.com/configure-vestacp-to-use-letsencrypt-certificates/
https://en.wikipedia.org/wiki/HTTP/2

Facebook Comments
Share Button

Watchara Pongsri

Senior Software Engineer, Network Engineer CEH, CHFI, ECSA, MCSA My hobby is - Blogger - Programming & Security Researcher

More Posts - Website

Follow Me:
TwitterFacebookLinkedInGoogle Plus

วิธีเปิดใช้งาน Nginx ให้รองรับ HTTP/2 บน CentOS 7