前言
虽然博客目前在国内全局使用腾讯云 CDN 加速访问,但还是有一些服务需要直连服务器,并且出于测试考虑,准备想体验一把 Quic
准备
咱服务器主要使用的是 Ubuntu 系统(十几台全都是也懒得改了,目前也没有换系统的硬需求)
Nginx 基本上是 LNMP 祖传下来的编译参数以及加入了 Lua、GeoIP 和 Verynginx 的支持,所以还是在保留之前的基础上支持 Quic
之前咱一直再用 openssl 但是 openssl 表示对于 Quic 的支持会有但不会包含在 openssl 3.0 中所以这里咱要改用 Google 维护的 boringSSL 顺带一提拉这玩意的时候正值 22:37 事实证明,百度云加速的回源质量真的很烂,未缓存到的文件速度直接降到20+KiB/s(草)
过程
替换 OpenSSL
全部过程建议你在通常用来编译程序的目录下面进行
首先 clone 下由 Google 维护的支持 QUIC 的 OpenSSL 分支
码云(码云的同步真的很糟,吐嘈直接拉到最下面)
git clone https://gitee.com/mi1k/boringssl.git
Github 官方源
git clone https://github.com/google/boringssl.git
编译boringSSL
cd boringssl && mkdir build cd build cmake ../ make
至此 boringssl 结束
编译 Nginx-Quic
回到平时编译目录
下载官方的 nginx-quic
curl -O https://hg.nginx.org/nginx-quic/archive/tip.zip unzip tip.zip
这里随着版本不同解压出来的目录名称也不同,注意区分
cd nginx-quic-12576ac9556d
预编译
如果你之前有自己的参数
比如这是我修改过之后的编译参数
./auto/configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-http_ssl_module --with-http_v2_module --with-http_v3_module --with-cc-opt=-I../boringssl/include --with-ld-opt='-L../boringssl/build/ssl -L../boringssl/build/crypto -Wl,-rpath,/usr/local/luajit/lib' --add-module=/root/lnmp1.7/src/lua-nginx-module-0.10.15 --add-module=/root/lnmp1.7/src/ngx_devel_kit-0.3.1 --with-google_perftools_module --with-http_stub_status_module --add-dynamic-module=/root/lnmp1.7/src/ngx_http_geoip2_module
加粗的部分是替换之前 openssl 的参数
如果你想“全新安装”体验一下 Quic 可以用下面这段
./auto/configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --with-http_v3_module --with-cc-opt="-I../boringssl/include" --with-ld-opt="-L../boringssl/build/ssl -L../boringssl/build/crypto"
编译
make
如果你核心多的话也可以
make -j(你的核心数+1)
等待编译完成
升级原有的 Nginx
找到你的 nginx binary 位置
mv (你的 nginx binary 位置)nginx (你的 nginx binary 位置)nginx.bak cp objs/nginx (你的 nginx binary 位置)nginx nginx -t #测试是否正常
查看老 nginx master 进程的 pid
ps -ef | grep nginx
发出 USR2 信号
kill -USR2 (老 nginx master 进程 pid)
访问你的网站查看是否有异常
如果没有问题
kill -WINCH (老 nginx master 进程 pid)
升级完成
全新安装
make install
修改配置
找到你的配置文件找到 443 端口的 server 块(大多数人应该都是 80 443 放在一个块里的吧)
添加
listen 443 http3 reuseport; listen [::]:443 http3 reuseport; #这行没有 ipv6 需求就不用了
注意目前好像只有一个 server 块可以添加后面的 reuseport 不然会报端口重复...
然后加个 http 头表示自己支持 Quic 的端口和版本
add_header Alt-Svc 'quic=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"';
验证
鉴于目前国内运营商的客观情况,个人使用浏览器很难查看效果
所以这里推荐在这里测试对于 Quic 的支持情况
最后还是没在自己的站点上看到绿色小闪电哭唧喞
遇到的困难
Nginx-Quic 代码编译不通过
测试刚开始就吃了个闭门羹,最新的版本写错个变量名(草
改!编译通过
码云的同步源
上一次 commit 居然是四个月前,折腾了一晚上预编译时都显示无 0-RTT 支持
第二天才发现,赶紧去码云自己同步了一份(结果上午同步的下午才整好)
去自己的 Git 同步了一份,完美(Gogs 超棒)
发表评论
冷冷清清