QUIC
(Quick UDP Internet Connection
)是谷歌制定的一种基于UDP
的低时延的互联网传输层协议,较http2
具有0RTT
的优势,虽然TLS1.3
也具有0RTT
的特点,QUIC
是有Google
主导,只在Google
、Opera
等浏览器上支持,且需要手动开启 开启方法:在 chrome://flags/
中找到 Experimental
中 QUIC protocol
, 设置为Enabled
,重启浏览器生效。服务器部署了nginx
,通过nginx
来进行代理转发各个请求,但是搜索一圈,了解到nginx
暂时没有计划支持quic
,于是另寻他径,功夫不负有心人,查阅众多资料了解到caddy
支持quic
(caddy
是一款可以自动部署https
的服务器,百度一番,用他来自动部署https
的不多,倒是用来支持quic
的挺多,这大概不是caddy
开发者的初衷吧),caddy
虽好,但是不如nginx
生态丰富,我也不想放弃nginx
,于是采取一个折衷的办法,通过docker
镜像来部署caddy
支持quic
。废话不多说,现在来细说升级步骤:
docker
安装要求参考:docker CE on CentOS
先决条件:
1、
linux
内核4.0+
2、linux
磁盘格式为ext4
或xfs
一、检查内核版本
uname -r
若内核版本低于4.0,需要升级内核,升级内核方法如下
#安装ELRepo仓库,使用清华镜像 rpm -Uhv https://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el7/x86_64/RPMS/elrepo-release-7.0-3.el7.elrepo.noarch.rpm #yum升级内 yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y #修改启动内核 cat /boot/grub2/grub.cfg |grep menuentry #查看内核 grub2-set-default "CentOS Linux (4.13.0-1.el7.elrepo.x86_64) 7 (Core)" #默认内核改为最新内核 #重启服务器 reboot
2、安装docker
yum install docker-ce docker-ce-cli containerd.io
3、修改docker镜像源,加快下载速度
cd /etc/docker && vi daemon.json #添加如下内容 { "registry-mirrors":["http://registry.docker-cn.com"] } wq #保存退出
4、启动docker
systemctl start docker
安装步骤部署完docker
现在进入配置quic
。
1、在用户目录下新建caddy
文件夹,新建Dockerfile
文件,添加如下内容
FROM ubuntu:latest LABEL maintainer="[email protected]" RUN apt-get update RUN set -x \ && apt-get install curl -y \ && curl https://getcaddy.com | bash -s personal && which caddy
2、制作镜像
docker image build -t docker-caddy .
在开启docker
服务前检查443
端口是否放开udp
安全限制
1、编写Caddyfile 配置文件
https:YOUR_DOMAIN gzip tls /path/YOUR.pem /path/YOUR.key proxy / http://172.17.0.1:8080 { header_upstream Host {host} header_upstream X-Real-IP {remote} header_upstream X-Forwarded-For {remote} header_upstream X-Forwarded-Proto {scheme} } log /path/logs/caddy_access.log errors /path/logs/caddy_errors.log
2、在ng中添加如下请求头,告诉浏览器服务器支持quic
add_header alt-svc 'quic=":443"; ma=2592000; v="46,44,43,39"';
此请求头的作用是告诉浏览器服务器支持quic
,若浏览器也支持quic
,后续的所有请求都是通过quic
来发出,若浏览器不支持quic
,还是走正常的http
请求
3、启动docker镜像
docker container run -d -p 443:443/udp -v /YOUR_PATH:/path docker-caddy:latest caddy -quic -conf /path/Caddyfile
至此,quic
已完成了部署,在浏览器窗口输入对应网址,查看network
中的protocol
是否是http2+quic/XX
1、最开始,Caddyfile
中 proxy
配置是转发到127.0.0.1
,但是访问网址的时候,总是报502
错误,查看日志了解到服务并没有真正转发出去,因为docker
容器运行的时候有host
、bridge
、none
三种网络可供配置,默认是bridge
,与宿主机网络是互相隔离的。在安装Docker
的时候,会在宿主机安装一个虚拟网关docker0
,我们可以使用宿主机在docker0
上的IP
地址来代替localhost/127.0.0.1
,查看docker0
命令:
ip addr show docker0
2、网站服务由node
提供,node
启动服务是app.listen
绑定了127.0.0.1
这个host
,导致docker0
网段访问不到服务,注释掉绑定的host
服务便正常了。
本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!