Nginx HTTP/3服务器-客户端环境搭建

这篇具有很好参考价值的文章主要介绍了Nginx HTTP/3服务器-客户端环境搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、NGINX服务器介绍:

NGINX是一个高性能的开源Web服务器,也可用作反向代理服务器、负载均衡器和HTTP缓存。它由俄罗斯的程序员Igor Sysoev创建,并于2004年首次公开发布。NGINX的设计重点是高性能、高并发和低内存消耗,使其成为了现代Web架构中的关键组件之一。

NGINX的一些主要特点包括:

  1. 高性能: NGINX采用了事件驱动和异步非阻塞的处理方式,能够高效地处理大量并发连接请求。

  2. 低资源消耗: NGINX的内存消耗非常低,适用于在资源受限的环境下部署。

  3. 灵活性: NGINX具有强大的配置选项和模块系统,可以满足各种不同的需求,例如反向代理、负载均衡、静态文件服务等。

  4. 可扩展性: NGINX支持动态模块加载,允许用户根据需要自定义功能。

  5. 可靠性: NGINX经过了长时间的实际生产环境验证,被许多大型网站和公司广泛采用。

二、HTTP/3(QUIC协议)介绍:

HTTP/3是最新的HTTP协议版本,基于QUIC(Quick UDP Internet Connections)协议。QUIC是由Google开发的一种新的传输层协议,旨在提供更快的连接建立和数据传输速度,以及更好的抗丢包特性。

HTTP/3相对于之前的HTTP/2协议有以下一些主要变化和优势

  1. 使用UDP传输: HTTP/3使用UDP而不是TCP来传输数据,减少了连接建立的延迟和传输数据的丢包率。

  2. 多路复用: HTTP/3继承了HTTP/2中的多路复用特性,允许在单个连接上同时传输多个HTTP请求和响应。

  3. 零RTT连接建立: HTTP/3允许零轮回时间(0-RTT)连接建立,进一步减少了连接建立的延迟。

  4. 头部压缩: HTTP/3引入了一种新的头部压缩算法,以提高传输效率和减少带宽消耗。

  5. 更好的流量控制: HTTP/3使用了更先进的流量控制算法,以优化数据传输和网络资源利用。

NGINX与HTTP/3(QUIC协议)的关系:

NGINX作为一种高性能的Web服务器,已经开始支持HTTP/3协议。NGINX官方提供了用于HTTP/3支持的QUIC库(例如,quiche),使得用户可以在NGINX中启用HTTP/3功能,并且可以与现有的HTTP/1.x和HTTP/2协议共存。

通过NGINX服务器与HTTP/3的结合,开发者可以利用HTTP/3的高性能和低延迟特性,为其网站和应用程序提供更好的用户体验和更高的性能。

三、nginx-server环境搭建
1.rust代码仓需要配置cargo国内源


# 【配置】
cd $HOME/.cargo
touch config
vim config

编写以下内容:
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"

# 清华大学
replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

[net]
git-fetch-with-cli = true

2.安装依赖工具


apt install vim net-tools wireshark-qt git git-lfs ssh cmake rustc cargo ffmpeg libssl-dev curl build-essential libtool mercurial libpcre2-dev zlib1g-dev

3.开源工程代码下载


quiche使用0.18.0,--recursive 参数会下载依赖的boringssl子仓,不带此参数则不会下载
git clone --recursive -b 0.18.0 https://github.com/cloudflare/quiche
nginx使用1.16.1
curl -O https://nginx.org/download/nginx-1.16.1.tar.gz

4.安装pcre依赖


git clone https://github.com/PhilipHazel/pcre2.git
make
make install

5.nginx服务器生成ssl证书(也可以使用之前备份的ssl证书)


sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /opt/server/ssl/server.key -out /opt/server/ssl/server.crt

6.编译quiche


在quiche目录下执行(绿区代理网络不稳定,需多次尝试),禁用qlog特性可以减少很多依赖
cargo build --package quiche --release --features ffi,pkg-config-meta
mkdir quiche/deps/boringssl/src/lib
ln -vnf $(find target/release -name libcrypto.a -o -name libssl.a) quiche/deps/boringssl/src/lib/

报错:error: failed to run custom build command for `quiche v0.18.0 (/home/ty/http-client/CodeSpace/Repository/quiche/quiche)`
boringssl文件问题或版本问题,疑难问题

报错:cmake:error while loading libraries:libquiche.so: cannot open shared object file: No such file or directory
cmake版本过低升下载并安装最新cmake即可
https://github.com/Kitware/CMake/releases/

7.安装编译nginx


进入nginx-1.16.1目录,执行

patch -p01 < ../quiche/nginx/nginx-1.16.patch
./configure --prefix=/opt/server --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=../quiche/quiche/deps/boringssl --with-quiche=../quiche --with-http_ssl_module


注意:--prefix=后跟的path为上述nginx.conf所在位置,有些是在/opt/server/conf 下面
--build=括号里的path为quiche的安装目录

make
make install


8.修改nginx配置


或者直接替换压缩包里的nginx.conf
文件位置在./configure --prefix指定的目录/opt/server/下生成conf文件夹

vim nginx.conf
在文件末尾修改如下配置:
    # HTTPS server
    #
    server {
        listen       443 ssl;
        listen       443 quic reuseport; # 监听quiche,并启用端口reuse
        server_name  localhost;

        # quiche ssl证书配置
        ssl_certificate      /opt/server/ssl/server.crt;
        ssl_certificate_key  /opt/server/ssl/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        # quiche ssl配置
        ssl_protocols TLSv1.3;

        location / {
            root   html;
            index  index.html index.htm;
        }

        # https://127.0.0.1/hls/ 访问路径(quiche)
        location /hls {
            alias  /opt/server/hls/;
        }

        # https://127.0.0.1/hls/5g-en/ 访问路径(quiche)
        location /hls/5g-en{
            alias /opt/server/hls/5g-en/;
        }
    }


#开启nginx服务
cd /opt/server/sbin
./nginx -s reload
./nginx

# 查看nginx配置文件路径
./nginx -t

# 重新加载配置
./nginx -s reload

# 查看版本号
/usr/local/nginx/sbin/nginx -V

11.##环境验证
拷贝xxx文件/opt/server/hls

# 浏览器验证nginx服务
http://127.0.0.1

# 测试web路径可否访问下载
https://127.0.0.1/hls/xxx

#无界面可通过w3m访问
w3m https://127.0.0.1/hls/xxx

w3m访问不了的话可以用 (-k跳过证书校验)
curl --output 004.ts https://127.0.0.1/hls/xxx -k


四、nginx-client环境搭建
1.安装依赖工具(同server端)
2.开源工程代码下载

quiche使用0.18,curl使用8.4.0(可自行修改配套版本)
git clone --recursive -b 0.18.0 https://github.com/cloudflare/quiche
git clone --recursive https://github.com/curl/curl/tree/curl-8_4_0
解压tar -xzf


3.安装rustup依赖


snap install rustup
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
curl https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
rustup default nightly
https://blog.csdn.net/weixin_41760738/article/details/108060293

4.安装其他依赖


wget ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar zxvf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure --prefix=/usr/local
make && make install

以下同上,下载,解压,安装
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/automake/automake-1.16.tar.gz
wget http://mirrors.kernel.org/gnu/libtool/libtool-2.2.6b.tar.gz
wget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz

报错:error: --with-quiche was specified but could not find quiche pkg-config file.
wget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
报错:error: Either a previously installed pkg-config or "glib-2.0 >= 2.16" could not be found. Please set GLIB_CFLAGS and GLIB_LIBS to the correct values or pass --with-internal-glib to configure to use the bundled copy.
./configure --prefix=/usr/local --with-internal-glib
make && make install

5.编译quiche(同server端)
6.安装编译curl


进入curl目录,执行
autoreconf -fi
./configure LDFLAGS="-Wl,-rpath,$PWD/../quiche/target/release" --with-openssl=$PWD/../quiche/quiche/deps/boringssl/src --with-quiche=$PWD/../quiche/target/release

make
make install

7.试运行


curl --http3 https://cloudflare-quic.com
如果http3参数没有
apt-get remove curl
重新回到上一步安装编译curl
export LD_LIBRARY_PATH=/usr/local/lib/
curl -v --http3 https://quic.rocks:4433/

client端加上http3以后无法访问server端,server端quiche版本过低升级至0.17.2或更高版本即可

报错:bash:/usr/bin/curl : No such file or directory
https://blog.csdn.net/juexinhao/article/details/81094720

export LD_LIBRARY_PATH=/usr/local/lib/
curl -v --http3 https://quic.rocks:4433/

如下代表安装成功:

*   Trying 216.155.158.183:4433...
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: none
* Connect socket 5 over QUIC to 216.155.158.183:4433
* Sent QUIC client Initial, ALPN: h3,h3-29,h3-28,h3-27
*   Trying 2001:19f0:4:34::1:4433...
* Immediate connect fail for 2001:19f0:4:34::1: Network is unreachable
*  subjectAltName: host "quic.rocks" matched cert's "quic.rocks"
* Verified certificate just fine
* Connected to quic.rocks () port 4433 (#0)
* h2h3 [:method: GET]
* h2h3 [:path: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: quic.rocks:4433]
* h2h3 [user-agent: curl/7.84.0-DEV]
* h2h3 [accept: */*]
* Using HTTP/3 Stream ID: 0 (easy handle 0x561d28c5dcf0)
> GET / HTTP/3
> Host: quic.rocks:4433
> user-agent: curl/7.84.0-DEV
> accept: */*

< HTTP/3 200
< content-type: text/html; charset=UTF-8
< x-original-url: https://quic.rocks/
< alt-svc: h3=":4433"; ma=3600, h3-29=":4433"; ma=3600

<!doctype html>
<html>
<head><title>quic.rocks</title></head>
<body>
<h1>quic.rocks</h1>
<p>You have successfully loaded quic.rocks using QUIC!</p>
</body>
</html>文章来源地址https://www.toymoban.com/news/detail-838376.html

到了这里,关于Nginx HTTP/3服务器-客户端环境搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • HTTP Header定制,客户端使用Request,服务器端使用Response

    HTTP Header定制,客户端使用Request,服务器端使用Response

     在服务器端通过request.getHeaders()是无效的,只能使用response.getHeaders()。  

    2024年02月16日
    浏览(15)
  • 基于Spring Boot2.0 & HTTP/2 实现服务器、客户端

    基于Spring Boot2.0 & HTTP/2 实现服务器、客户端

    HTTP协议由于其无状态的特性以及超高的普及率,是当下大部分网站选择使用的应用层协议。然而,HTTP/1.x的底层传输方式的几个特性,已经对应用的整体性能产生了负面影响。特别是,HTTP/1.0在每次的TCP连接上只允许发送一次请求,在HTTP/1.1中增加了请求管线,但是这仅仅解决

    2023年04月09日
    浏览(37)
  • Docker RTMP服务器搭建与视频流推送示例(流媒体服务器tiangolo/nginx-rtmp,推流客户端ffmpeg)

    Docker RTMP服务器搭建与视频流推送示例(流媒体服务器tiangolo/nginx-rtmp,推流客户端ffmpeg)

    在这篇文章中,我将详述如何搭建一个RTMP(Real-Time Messaging Protocol)服务器,并使用ffmpeg技术进行本地视频的推流。最后,我们将使用VLC播放器来播放这个RTMP流。 首先,我们需要搭建一个RTMP服务器。为了方便起见,我们将选择Docker作为服务器的环境。Docker的轻量化和可移植

    2024年01月17日
    浏览(11)
  • cpp-httplib: 轻量级、高性能的C++ HTTP/HTTPS客户端和服务器库

    cpp-httplib 是一个轻量级且高效的 C++ HTTP/HTTPS 客户端和服务器库。它由 Hideaki Sone(yhirose)开发,并在 MIT 许可下发布。该项目的主要目标是提供一种简单易用的方式,在 C++ 应用程序中实现 HTTP 和 HTTPS 功能。 项目仓库地址:https://gitcode.com/yhirose/cpp-httplib cpp-httplib 可用于以下场

    2024年04月09日
    浏览(10)
  • Mojo:为Web应用程序提供了完整的框架,包括路由、模板、插件、Websocket、HTTP客户端、HTTP服务器、配置文件管理等功能

            Mojo是一种高级的、动态的Perl Web应用程序框架,它可以用来开发Web应用程序,定位于速度、简单和可扩展性。Mojo的设计理念是简洁、灵活、易用和高效,它为Web应用程序提供了完整的框架,包括路由、模板、插件、Websocket、HTTP客户端、HTTP服务器、配置文件管理等

    2024年02月09日
    浏览(39)
  • SAP开发环境ABAP的搭建(客户端和服务器),Developer Key和AccessKey的绕过方法

    SAP开发环境ABAP的搭建(客户端和服务器),Developer Key和AccessKey的绕过方法

    目录 一.前言 二.客户端GUI安装 1.下载好SAP GUI 750 2.解压后找到SAPGUISetup.exe 3.安装 4.安装完整教程 三.服务端搭建 1.安装VmWare虚拟机 2.下载虚拟机镜像 3.打开虚拟机 4.调整内存大小 5.启动虚拟机  四.创建程序 1.创建包 2.创建程序 3.Developer Key和AccessKey问题及绕过方法 这学期选修

    2024年02月16日
    浏览(16)
  • 我的世界Bukkit插件开发-第一章-初始环境搭建-搭建基于spigot核心的服务器-并连接客户端......

    我的世界Bukkit插件开发-第一章-初始环境搭建-搭建基于spigot核心的服务器-并连接客户端......

    基于Spigot核心的插件开发 本章实现本地成功搭建私服并连接客户端 前置开发工具:IDEA JDK环境-JKD-17 构建工具:maven 必备idea插件:Minecraft Development 服务器核心: Spigot-1.20.jar mc客户端 小部分内容来自AI大模型,如需深入,请联系博主或自行了解 手工不易,且看且珍惜 首次开始

    2024年03月21日
    浏览(10)
  • java静默打印PDF(可实现生产环境下服务器写入PDF模板,然后调用客户端打印机打印)

    java静默打印PDF(可实现生产环境下服务器写入PDF模板,然后调用客户端打印机打印)

    需求 写这个的原因主要是因为当时项目中的打印功能是用户打印标签时,每次点击打印是通过把PDF文件下载到客户端浏览器,然后需要通过浏览器去点击打印机实现打印,就非常麻烦,每次都步骤非常复杂,而且每次参数都要重新设置。于是就想着怎么通过java实现自己调用

    2024年02月13日
    浏览(13)
  • 服务器异步客户端

    internal class MessageManagerT:SingletonMessageManagerT {     Dictionaryint, ActionT MsgDic = new Dictionaryint, ActionT();     public void OnAddListen(int id,ActionT action)     {         if(MsgDic.ContainsKey(id))         {             MsgDic[id] += action;         }         else         {             MsgDic.Add(id, ac

    2024年04月09日
    浏览(10)
  • UDP客户端和服务器

    UDP客户端和服务器

    UDP客户端,也就是首先主动发送数据的一方,也就是发起服务请求的一方。 UDP服务器,也就是首先等待接收数据,并对接收的数据进行处理,返回计算结果的一方,也就是提供服务的一方。 在下面实验中使用到的函数 测试代码  UDP接收端(服务器) 执行代码:    实验解析 

    2024年02月13日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包