讓子彈飛,零成本上你的網站更快一點,boxopened http/3 (QUIC) 協議實戰

GGBond1989發表於2018-11-27

最近HTTP-over-QUIC 協議被正式命名為 HTTP/3,協議帶來的最大改變是協議底層將採用UDP協議,而不再是TCP協議,這樣的好處嗎,就是更低時延,更好的擁塞控制,更精確的RTT時間,更高效率的多路複用...谷歌萬歲,要知道現有的http/2(spdy)協議也是源於谷歌。

這麼多的好處,還等什麼,開搞。

boxopened整體基於的nodejs開發,通過nginx反代對外提供服務,之前通過配置,boxopened已經支援了http/2協議,但是目前nginx還不支援quic協議,於是只能想別的辦法。經過一番谷歌(再次感謝偉大的谷歌)以後,發現了Caddy,一個新一代的web 伺服器。caddy的官網:caddyserver.com/ 。caddy宣稱是比nginx更人性化的web server,基於go語言開發,簡單易用的配置,原生的http/2支援,自動的https證書管理....

caddy的部署有很多方式,由於boxopened整體是基於docker化的部署,所以這裡caddy的部署也是基於docker部署的,好在官方提供了docker映象(這裡給caddy點個贊)。接下來就是配置了,官方文件寫的簡單又清楚,一看就懂。目前對quic的支援還處於實驗性質,所以要開啟quic,要加上-quic 標誌。

下面是docker-compose.yml 中caddy服務的配置,大家可以參考下。

caddy:
	image: abiosoft/caddy:0.11.1
	ports:
	- 80:80
	- 443:443
	- 80:80/udp
	- 443:443/udp
	volumes:
	- ../../boxopened-config/caddy/www:/srv
	- ../../boxopened-config/caddy/ssl:/root/.caddy
	- ../../boxopened-config/caddy/logs:/wwwlogs
	- ../../boxopened-config/caddy/conf/Caddyfile:/etc/Caddyfile
	command: ["--conf", "/etc/Caddyfile", "--log", "stdout", "--agree", "--quic"]
複製程式碼

caddyfile 配置

http://boxopened.com {
  redir 301 {
  	/ https://www.boxopened.com{uri}
  }
}

http://www.boxopened.com {
  redir 301 {
  	/ https://{host}{uri}
  }
}

https://www.boxopened.com {
  gzip
  log /wwwlogs/portal.access.log
  tls /root/.caddy/fullchain.pem /root/.caddy/privkey.pem
  proxy / portal:6001 {
  transparent
  }
}
複製程式碼

就這麼幾行配置,完事兒,簡單吧!

再給大家說說我中間遇到的坑,首先quic協議的底層是基於udp協議的,所以在進行docker埠配置的時候,要expose相應的udp埠,並且開啟主機的防火牆配置。。。(我能說我在這上面搞到凌晨三點麼。。。)

所有的一切完成後,我以為一切都ok了,又發現怎麼都無法進行quic連線,反覆嘗試還是不行。原來chrome只支援最新的quic協議,所以更新了下caddy的版本,一些搞定!

最後展示下效果

TIM截圖20181127124452.png

想更直觀的感受下,請戳 boxopened.com

相關文章