QUIC实战(一) 通过Quiche部署支持HTTP3 的NGINX
之前研究了下quic相關(guān)的特性,不過(guò)一直沒(méi)有去搭建過(guò),最近需要在公司搭建一個(gè)quic的生產(chǎn)測(cè)試環(huán)境,記錄一下也方便其他需要搭建環(huán)境的開(kāi)發(fā)參考。
QUIC的搭建方案有很多,最后我們選擇了Quiche。CloudFlare 已經(jīng)成功在CDN業(yè)務(wù)中實(shí)現(xiàn)了基于Quiche的QUIC部署,該方案相對(duì)比較成熟。Quiche其中有一個(gè)patch就是NGINX補(bǔ)丁,為了實(shí)現(xiàn)基于Quiche和谷歌Boringssl 實(shí)現(xiàn)的HTTP3 Quic協(xié)議。
我搭建的是nginx+upsync+consul的集群,所以在編譯nginx我將upsync模塊也加入進(jìn)去了
編譯支持HTTP3的nginx
1.下載nginx和quiche
wget https://nginx.org/download/nginx-1.16.1.tar.gz git clone --recursive https://github.com/cloudflare/quiche ## 下載nginx-upsync-module wget https://github.com/weibocom/nginx-upsync-module/archive/master.zip這里我并沒(méi)有重新從github下載quiche,而是直接使用了之前同事下載的,quiche下載比較慢,我將使用的quiche壓縮包上傳到資源里了,需要的可以從我的資源里下載。注意下quiche.zip的存放目錄(/opt/nginx-quic)
2.安裝相關(guān)的依賴環(huán)境
為了實(shí)現(xiàn)QUIC,NGINX編譯必須用到quiche的相關(guān)庫(kù)及BoringSSL的庫(kù)文件。
BoringSSL編譯需要CMake 3.0或更高版本 、 需要Perl 、GCC、Clang 、Go環(huán)境。
QUICHE需要 Rust 1.38或更高版本才能構(gòu)建。
安裝成功后可以看到如下版本信息:
3.正式編譯安裝nginx
## 解壓 如果提示命令不存在,則使用 yum -yinstall unzip安裝 unzip nginx-upsync-module-master.zip tar zxvf nginx-1.16.1.tar.gz cd nginx-1.16.1 yum -y install patch patch -p01 < ../nginx-quic/quiche/extras/nginx/nginx-1.16.patch ./configure \--prefix=/opt/server/nginx \--build="quiche-$(git --git-dir=../quiche/.git rev-parse --short HEAD)" \--with-http_ssl_module \--with-http_v2_module \--with-http_v3_module \--with-openssl=../nginx-quic/quiche/deps/boringssl \--with-quiche=../nginx-quic/quiche \--add-module=../nginx-upsync-module-master ##編譯 make sudo make install注意下這里openssl,quiche以及upsync對(duì)應(yīng)的文件目錄。由于我使用的是同事的quiche,所以quiche的存放路徑需要和他的寫(xiě)成一樣的( /opt/nginx-quic )
遇到的問(wèn)題:
1)
我就是由于存放quiche的路徑不對(duì)導(dǎo)致出現(xiàn)該錯(cuò)誤,放到/opt/nginx-quic之后就可以了。
2)
查看下對(duì)應(yīng)錯(cuò)誤日志文件
C編譯器有問(wèn)題,可以升級(jí)下gcc的版本,我一開(kāi)始使用的4.8版本的gcc編譯就有問(wèn)題,執(zhí)行如下操作更新到7.3及以上就行了
## 安裝gcc7.3及以上 ## 安裝scl源,因?yàn)閏entos7默認(rèn)安裝的gcc就是4.8,使用其編譯nginx會(huì)有問(wèn)題 yum -y install centos-release-scl yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils如果更新不成功,可以參考該博客安裝gcc 7.3
GCC 7.3.0編譯安裝
編譯安裝gcc 7.3 過(guò)程中如果出現(xiàn)如下報(bào)錯(cuò)信息, 安裝下bzip2 就可以了 yum -y install bzip2
修改配置文件
編譯完成后,只要修改配置文件就可以了
# Enable QUIC and HTTP/3.listen 443 quic reuseport;# Enable HTTP/2 (optional).listen 443 ssl http2;## http3 需要申請(qǐng)證書(shū),將申請(qǐng)證書(shū)上傳到服務(wù)器,然后在這里配置對(duì)應(yīng)的存放目錄ssl_certificate /opt/ssl/fullchain.pem;ssl_certificate_key /opt/ssl/privkey.pem;# Enable all TLS versions (TLSv1.3 is required for QUIC).ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;# Add Alt-Svc header to negotiate HTTP/3.add_header alt-svc 'h3-29=":443"; ma=86400';通過(guò)sbin/nginx -c conf/nginx.conf 命令啟動(dòng)nginx就可以了
我是先在本地安裝好nginx之后,直接把安裝目錄/opt/server/nginx 下的文件打包然后在aws上部署就可以了
驗(yàn)證支持QUIC
最后就只要驗(yàn)證下quic是否有生效就可以了,可以通過(guò)如下地址https://www.http3check.net/來(lái)驗(yàn)證下是否支持http3
還可以通過(guò)谷歌瀏覽器來(lái)驗(yàn)證下,下載Google Chrome Canary 并設(shè)置其啟動(dòng)參數(shù)--enable-quic --quic-version=h3-29, 啟動(dòng)后,然后訪問(wèn)nginx的路徑就可以了
這樣就搭建好了
參考資料:
nginx啟用http3.0
使用CloudFlare的Quic實(shí)現(xiàn)Quiche部署NGINX的HTTP3 Quic協(xié)議
How to Test if a Website supports HTTP/3?
總結(jié)
以上是生活随笔為你收集整理的QUIC实战(一) 通过Quiche部署支持HTTP3 的NGINX的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 通过putty和 winscp操作aws
- 下一篇: QUIC实战(二) AWS 搭建ngin