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

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 Developer, Network Engineer CEH, CHFI, ECSA, MCSA My hobby is - Blogger - Programming & Security Researcher

More Posts - Website

Follow Me:
TwitterFacebookLinkedInGoogle Plus

Related Post

วิธี Upgrade PHP บน MacOS Sierra ไปเป็น PHP versio...
views 1,581
บทความนี้จะมาแนะนำวิธีการ ติดตั้ง  PHP บน MacOS Sierra 10.12.1 ให้เป็น vesion ล่าสุด (ซึ่งตอนนี้ version ล่าสุดก็คือ PHP 7.1.X)  แต่หลังจากที่หลายๆ ท่...
มารู้จักวิธีการ Sync settings profile และ extensio...
views 2,531
หลายคนคงรู้จัก IDE ที่ชื่อ Visual studio code ของ Microsoft กันอยู่แล้ว  ชึ่งแน่นอนว่ามันเป็นที่ชื่นชอบคง developer หลายๆ คน รวมถึงผมด้วย  นอกจากมันจะ...
วิธีทำ Auto Mount Partition บน Linux หรือ Raspberr...
views 2,167
บทความนี้จะมาพูดถึงวิธีทำ auto mount สำหรับ Hard disk หรือ USB Drive บน Raspberry Pi หรือใช้กะ Linux ก็ได้เหมือนกัน โดยปรกติแล้วบน Raspberry เวลาเสีย...
วิธี Forward Port ร่วมกับ dynamic dns (No-ip) เพื่...
views 9,358
บทความนี้จะมาแนะนำวิธีการ Forward port เพื่อให้สามารถเข้าถึง Network ข้างในบ้าน ร่วมกับ dynamic dns อย่าง No-ip กัน โดยทั่วไปแล้ว ถ้ามีหากมี request ...
วิธีปรับแต่ง Terminal/Vim บน MacOS Sierra เพื่อให้...
views 1,573
หลังจากที่มาใช้ MacOS Sierra เหมือนผมจะมีปัญหากับปุ่ม Home/End สะเหลือเกิน  เนื่องจากบน Macbook มันจะไม่มีปุ่มดังกล่าวมาให้   ถ้าบน application อื่น เ...
มารู้จัก Sublist3r – Enumeration Tool เครื่อ...
views 1,481
Sublist3r เป็นเครืองมือในการค้นหารายละเอียดของ subdomains ที่เกี่ยวข้อง ภายใต้ เว็บไซต์เป้าหมาย  โดยการเก็บรายละเอียดนั้นจะอาศัย search engines อย่าง ...
วิธีเปิดใช้งาน PHP 7 บน Vesta CP เพื่อใช้งานร่วมก...
views 4,714
ทุกวันนี้จะเห็นว่ามีคนหันมาใช้ VPS (Virtual Private Server) กันเยอะขึ้น  และคงจะรู้จักตัวจัดการ Hosting อย่าง Vesta CP กันมาบ้างแล้ว  ซึ่งเจ้า Vesta C...
วิธีเปิดใช้งาน mod_deflate (Compress ) บน Apache เ...
views 2,360
mod_deflate เป็น Module ของ web server ที่ใช้ในการบีบอัดขข้อมูล (Compress ) ให้มีขนาดเล็กลง ก่อนที่จะส่งไปให้ Client หลังจากฝั่ง Client (Browser) ได้ร...
วิธีปิดการให้บริการ SSLv3 บน Apache เพื่อป้องกันกา...
views 2,049
ที่ผ่านมาเราจะเคยได้ยินข่าว เกียวกับช่องโหว่ของ SSLv3 ซึ่งเป็น Protocol ที่ออกมาตั้งแต่ปี 1996 (เก่ามากๆ)  และเป็นช่องโหว่ที่ถือว่าร้ายแรงเหมือนกัน มี...
วิธีติดตั้ง Let’s encrypt SSL (Free SSL) บน CentOS...
views 5,937
SSL (Secure Sockets Layer) เป็นเครื่องหมายรับรองความปลอดภัยทางอิเล็กทรอนิกส์ ที่จะบอกว่าเว็บนั้นมีความปลอดภัยและน่าเชื่อถือ จะเห็นได้ว่าทุกวันนี้ หลาย...
มาเริ่มต้นเรียนรู้วิธีใช้งาน Raspberry Pi แบบ Step...
views 21,135
Raspberry Pi เป็น Single Bord หรือจะว่ามันเป็น Embedded pc ก็ได้  ในตอนนี้ ถือว่ามันเป็นบอร์ดที่ยอดฮิต ณ. ปัจจุบัน เนื่องจากมีขนาดเล็ก (เล็กเท่ากับ AT...
วิธีการ Debug : MySQL Query Profiling บน Linux...
views 2,422
วันนี้จะมาแนะนำวิธีการ Debug Query บน MySQL  หรือเรียกอีกอย่าง คือ Profiler นั่นเอง  ซึ่งการทำ Profiler นั้น มันมีประโยชน์อย่างมากเลยในการวิเคราะห็ Pr...
แก้ปัญหาเวลาเปิด Visual Studio แล้ว Error “A...
views 3,679
บทความนี้จะแนะนำวิธีแก้ปัญหาเวลาเปิด Project visual studio แล้ว Error ข้อความข้างบน ซึ่ง Error เกิดจากเครืองเรายังไม่ได้ทำการ register .NET Framew...
วิธีติดตั้ง PHP เพื่อใช้งานกับ IIS ผ่าน (FastCGI) ...
views 13,629
ภาษา PHP เป็นภาษาที่นิยมกันอย่างแพร่หลายในปัจจุบัน เนืองจากเป็น Open source (ฟรี), เขียนง่าย แล้วยังสามารถรันได้แทบทุกระบบปฏิบัติการ (Cross platform) ...
ถึงเวลาที่จะต้อง Upgrade PHP 5.X มาเป็น PHP 7 บน C...
views 4,184
บทความนี้จะขอกล่าวถึงขั้นตอนในการ upgrade PHP version เก่า ให้เป็น PHP v7 ซึ่งเป็น version ใหม่ ของปี 2015 ซึ่งเป็นของใหม่ อยู่ ณ. ตอนนี้ และตอนนี้ Se...
เปลี่ยนจาก Shared Hosting มาเป็น VPS – Digit...
views 3,628
ช่วงนี้มีเวลาว่างเหลือนิดหน่อย เลยจะกลับมาเขียนบทความอีกครั้ง หลังจากช่วงหลังๆที่ผ่านมา งานประจำก็ยุ่งๆ เหลือเกิน + ความขี้เกีขจของผมเอง ^ ^" เลยไม่ค่...