最近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的版本,一些搞定!
最後展示下效果
想更直觀的感受下,請戳 boxopened.com