内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何在Nginx中開啟HTTP3.0的支持

本篇內(nèi)容介紹了“如何在Nginx中開啟HTTP3.0的支持”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),蘇州企業(yè)網(wǎng)站建設(shè),蘇州品牌網(wǎng)站建設(shè),網(wǎng)站定制,蘇州網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,蘇州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

方案選擇

對于HTTP3.0,由于整個(gè)協(xié)議還是處于草案階段,目前來說沒有一個(gè)完整的標(biāo)準(zhǔn),所以各大瀏覽器廠商還只是在開發(fā)者版本中才會支持,例如Chrome的金絲雀版本Chrome Canary[1],并且各個(gè)服務(wù)器廠商也是在持續(xù)跟進(jìn)中,對于Nginx來說,支持HTTP3.0目前有兩種方案可以選擇:

  • 基于Cloudflare的分支版本Nginx:對于HTTP3.0/QUIC,Cloudflare始終走在了前列,借助于自家維護(hù)的開源項(xiàng)目     quic     [2],從Nginx中拉出了一個(gè)分支來開發(fā),并編譯出了對HTTP3.0支持的Nginx服務(wù)器。
  • Nginx官方Nginx-quic項(xiàng)目:今年6月10日,Nginx     官博     [3]發(fā)布公告稱已經(jīng)在研發(fā)支持HTTP3.0/QUIC協(xié)議的工作,目前項(xiàng)目維護(hù)在     nginx-quic     [4],該項(xiàng)目和基于Cloudflare基于Nginx的分支并無關(guān)系,算是相對于正統(tǒng)的方案。

基于此,本文將會以部署nginx-quic的方式來讓Nginx支持HTTP3.0/QUIC。 

改造過程

我們最終的目的是得到nginx-quic版本的nginx可執(zhí)行文件,需要經(jīng)過一系列的安裝和編譯,期間可能會遇到很多問題,如果各位讀者不想實(shí)際操作,可以直接用我編譯好的版本nginx-quic.linux-x86_64.zip 傳送門[5]。 

準(zhǔn)備工作:

以centos7為例,下載nginx-quic源碼傳送門[6],下載完成之后,需要進(jìn)行編譯安裝,由于nginx-quic依賴boringSSL,所以還需下載boringSSL源碼傳送門[7],然后同樣需要編譯安裝boringSSL,執(zhí)行這些操作之前,需要在linux上安裝一些前置模塊,通過yum來安裝,執(zhí)行以下命令:

sudo yum install build-essential mercurial psmisc lsb-release cmake golang libunwind-dev git libpcre3-dev zlib1g-dev

什么是boringSSL:

對于Nginx來說,在編譯時(shí)需要配置對于的SSL庫,不管是HTTP3.0還是HTTP2.0,始終都要基于HTTPS,而加密算法這塊主要有OpenSSL來提供,而BoringSSL是谷歌創(chuàng)建的OpenSSL分支,用于支持TLS1.3的UDP協(xié)議0-RTT數(shù)據(jù)傳輸?shù)募用芩惴ǎ梢岳斫獬蒚LS1.3是標(biāo)準(zhǔn)協(xié)議,BoringSSL是實(shí)現(xiàn)工具),BoringSSL的一些特性會在合適的時(shí)機(jī)同步給OpenSSl。 

編譯安裝boringSSL:

cd boringssl-master/
mkdir build
cd build
cmake ../
make
 

執(zhí)行之后,可以在build/crypto,和build/ssl下獲得對應(yīng)的文件,如下圖:如何在Nginx中開啟HTTP3.0的支持 如何在Nginx中開啟HTTP3.0的支持

注意編譯安裝boringSSL需要使用cmake3以上的版本。 

編譯安裝nginx-quic:

cd nginx-quic/
./auto/configure --prefix=/root/nginx --with-http_ssl_module --with-http_v2_module --with-http_v3_module --with-cc-opt="-I../boringssl-master/include" --with-ld-opt="-L../boringssl-master/build/ssl -L../boringssl-master/build/crypto"
make 
make install
 

執(zhí)行命令之后,會在/root/nginx目錄下生成對應(yīng)的nginx可執(zhí)行文件,如下圖:

如何在Nginx中開啟HTTP3.0的支持  

其中,配置文件在conf/下,nginx命令在sbin/目錄下。

修改配置文件,啟動nginx:

vi /root/nginx/conf/nginx.conf
 

添加http3配置:

server {
    listen 443 ssl http2;              # TCP listener for HTTP/2
    listen 443 http3 reuseport;  # UDP listener for QUIC+HTTP/3

    ssl_protocols       TLSv1.3; # QUIC requires TLS 1.3
    ssl_certificate     ssl/www.example.com.crt;
    ssl_certificate_key ssl/www.example.com.key;

    add_header Alt-Svc 'quic=":443"; h4-27=":443";h4-25=":443"; h4-T050=":443"; h4-Q050=":443";h4-Q049=":443";h4-Q048=":443"; h4-Q046=":443"; h4-Q043=":443"'; # Advertise that QUIC is available
}
 

其中,要求使用TLSv1.3版本,并且當(dāng)瀏覽器不支持http3時(shí),可以選擇http2。另外,add_header Alt-Svc添加這個(gè)返回頭不可缺少。

  • Alt-Svc 全稱為“Alternative-Service”,直譯為“備選服務(wù)”。該頭部列舉了當(dāng)前站點(diǎn)備選的訪問方式列表,讓服務(wù)器可以告訴客戶端 “看,我在這個(gè)主機(jī)的這個(gè)端口用這個(gè)協(xié)議提供相同的服務(wù)”。一般用于在提供 “QUIC” 等新興協(xié)議支持的同時(shí),實(shí)現(xiàn)向下兼容。參考     MDN     [8]。
 

驗(yàn)證HTTP3生效:

由于目前瀏覽器對HTTP3.0/QUIC的支持性有限,可以通過http3check.net/[9]來驗(yàn)證站點(diǎn)啟用HTTP3是否成功,以我的站點(diǎn)為例:

如何在Nginx中開啟HTTP3.0的支持  
 

坑點(diǎn)總結(jié)

整個(gè)過程看似很簡單,但是真正配置過程中遇到了不少坑,前前后后加上搜索問題花了一天半的時(shí)間才真正解決,把這些問題記錄下來,分享給大家。

 

開啟UDP的443端口:

由于quic協(xié)議使用的是UDP的443端口,這個(gè)端口對于centos7來說是默認(rèn)關(guān)閉的,可以采用下面命令開啟:

firewall-cmd --zone=public --add-port=443/udp --permanent
 

如果項(xiàng)目托管在阿里云上,需要更新ECS的安全組策略來對外開啟對應(yīng)的協(xié)議和端口,如下圖:

如何在Nginx中開啟HTTP3.0的支持     

TLS版本向下兼容:

由于使用了TLS 1.3,所以會修改對應(yīng)加密算法,但是對于一些瀏覽器而言還不支持這么高的版本,尤其是對于蘋果的Safari,所以,在配置nginx配置文件時(shí),要多配置幾個(gè)版本向下兼容,代碼如下:

ssl_protocols       TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

-Werror錯(cuò)誤問題:

在編譯nginx-quic時(shí),有時(shí)會遇到如下錯(cuò)誤:

cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
 -o objs/src/os/unix/ngx_linux_sendfile_chain.o \
 src/os/unix/ngx_linux_sendfile_chain.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
 -o objs/src/event/ngx_event_openssl.o \
 src/event/ngx_event_openssl.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
 -o objs/src/event/ngx_event_openssl_stapling.o \
 src/event/ngx_event_openssl_stapling.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
 -o objs/src/event/ngx_event_quic.o \
 src/event/ngx_event_quic.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
 -o objs/src/event/ngx_event_quic_transport.o \
 src/event/ngx_event_quic_transport.c
src/event/ngx_event_quic_transport.c: In function ‘ngx_quic_create_stream’:
src/event/ngx_event_quic_transport.c:54:9: error: comparison is always true due to limited range of data type [-Werror=type-limits]
      : ((uint32_t) value) <= 16383 ? 2                                        \
         ^
src/event/ngx_event_quic_transport.c:1299:15: note: in expansion of macro ‘ngx_quic_varint_len’
         len = ngx_quic_varint_len(sf->type);
               ^
cc1: all warnings being treated as errors
make[1]: *** [objs/src/event/ngx_event_quic_transport.o] Error 1
make[1]: Leaving directory `/root/nginx-quic'
make: *** [build] Error 2
[root@iz2zehmi1ztqtx8tg6ca7gz nginx-quic]#
 

解決辦法是:

cd nginx-quic\objs

vi Makefile
 

找到 CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include將-Werror參數(shù)去掉。

 

reuseport只需配置一次:

假如有多個(gè)域名需要開啟http3,則reuseport建議只在根域名上配置,如果一個(gè)配置文件中出現(xiàn)多個(gè)reuseport,會報(bào)錯(cuò),配置如下:

    server {
        
        listen 443 ssl http2;              # TCP listener for HTTP/2
        listen 443 http3 reuseport;  # UDP listener for QUIC+HTTP/3

        server_name  www.nihaoshijie.com.cn default_server;

    }

    server {

        listen 443 ssl http2;        # TCP listener for HTTP/2
        listen 443 http3;  # UDP listener for QUIC+HTTP/3

        server_name  app.nihaoshijie.com.cn;

    }
   

編譯安裝時(shí)的性能問題:

如果編譯安裝時(shí)報(bào)類似下面的錯(cuò)誤,可能是主機(jī)的內(nèi)容不足,需要關(guān)閉一些運(yùn)行的程序來往下進(jìn)行。

...
c++: internal compiler error: Killed (program cc1plus)

“如何在Nginx中開啟HTTP3.0的支持”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

分享題目:如何在Nginx中開啟HTTP3.0的支持
URL鏈接:http://www.rwnh.cn/article36/jisssg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、網(wǎng)站導(dǎo)航、自適應(yīng)網(wǎng)站、網(wǎng)站策劃、用戶體驗(yàn)小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
政和县| 五峰| 阿克| 手机| 玉溪市| 龙川县| 阜南县| 怀来县| 姚安县| 河北区| 十堰市| 阿合奇县| 建宁县| 喀喇| 卢氏县| 阿瓦提县| 安丘市| 内丘县| 安丘市| 剑川县| 榆社县| 定襄县| 福鼎市| 大关县| 叶城县| 德江县| 鹤庆县| 通江县| 中西区| 大足县| 广宗县| 武宁县| 晋城| 囊谦县| 长兴县| 武安市| 南通市| 都昌县| 新龙县| 江孜县| 绥芬河市|