最近HTTP-over-QUIC 協議被正式命名爲 HTTP/3,協議帶來的最大改變是協議底層將採用UDP協議,而再也不是TCP協議,這樣的好處嗎,就是更低時延,更好的擁塞控制,更精確的RTT時間,更高效率的多路複用...谷歌萬歲,要知道現有的http/2(spdy)協議也是源於谷歌。node
這麼多的好處,還等什麼,開搞。ios
boxopened總體基於的nodejs開發,經過nginx反代對外提供服務,以前經過配置,boxopened已經支持了http/2協議,可是目前nginx還不支持quic協議,因而只能想別的辦法。通過一番谷歌(再次感謝偉大的谷歌)之後,發現了Caddy,一個新一代的web 服務器。caddy的官網:caddyserver.com/ 。caddy宣稱是比nginx更人性化的web server,基於go語言開發,簡單易用的配置,原生的http/2支持,自動的https證書管理....nginx
caddy的部署有不少方式,因爲boxopened總體是基於docker化的部署,因此這裏caddy的部署也是基於docker部署的,好在官方提供了docker鏡像(這裏給caddy點個贊)。接下來就是配置了,官方文檔寫的簡單又清楚,一看就懂。目前對quic的支持還處於實驗性質,因此要開啓quic,要加上-quic 標誌。web
下面是docker-compose.yml 中caddy服務的配置,你們能夠參考下。chrome
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 配置docker
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
}
}
複製代碼
就這麼幾行配置,完事兒,簡單吧!bash
再給你們說說我中間遇到的坑,首先quic協議的底層是基於udp協議的,因此在進行docker端口配置的時候,要expose相應的udp端口,而且打開主機的防火牆配置。。。(我能說我在這上面搞到凌晨三點麼。。。)服務器
全部的一切完成後,我覺得一切都ok了,又發現怎麼都沒法進行quic鏈接,反覆嘗試仍是不行。原來chrome只支持最新的quic協議,因此更新了下caddy的版本,一些搞定!ui
最後展現下效果 spa
想更直觀的感覺下,請戳 boxopened.com