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>

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: csdn nginx-http-flv-win32是一个基于Nginx服务器的项目,用于通过HTTP协议实现FLV流媒体的传输和播放。 Nginx是一个高性能的开源Web服务器和反向代理服务器,常用于构建高并发、高可靠性的网站和应用程序。csdn nginx-http-flv-win32则是在Nginx的基础上开发的一个模块,特别用于处理FLV格式的媒体文件的传输和播放。 FLV是一种常用的流媒体格式,常用于实时传输和播放视频和音频内容。通过csdn nginx-http-flv-win32模块,可以将FLV文件进行解析和分片,并以HTTP的方式传输给客户端,实现流媒体的直播和点播功能。 csdn nginx-http-flv-win32还具有一些额外的特性,例如支持跨域访问、实时推流等。通过跨域访问支持,可以实现在不同的域名之间进行流媒体的传输和播放。实时推流功能则可以将实时摄像头的视频流以FLV格式传输给客户端,实现实时直播功能。 此外,csdn nginx-http-flv-win32还支持基于SSL的安全传输,提高传输的安全性。通过将Nginx服务器配置为HTTPS服务器,可以实现对FLV流的加密传输,确保传输过程中的数据安全。 综上所述,csdn nginx-http-flv-win32是一个构建在Nginx服务器上的模块,可以通过HTTP协议实现FLV流媒体的传输和播放,并具有一些额外的特性,如跨域访问和实时推流等。它可以应用于各种需要流媒体传输的场景,如在线直播、点播等。 ### 回答2: csdn nginx-http-flv-win32是一个基于Nginx服务器的开源项目,旨在实现HTTP-FLV(HTTP-based FLV)的流媒体传输和播放。 HTTP-FLV是一种在Web上实现流媒体传输和播放的协议,它使用HTTP协议进行数据传输,并使用FLV(Flash Video)格式来编码和解码音视频数据。 csdn nginx-http-flv-win32项目提供了一个高性能的HTTP-FLV流媒体服务器解决方案,可以轻松地构建自己的流媒体服务。 该项目提供了一个针对Windows系统的编译版本,方便Windows用户快速搭建自己的流媒体服务器,无需自行编译和配置。 使用csdn nginx-http-flv-win32,您可以将音视频文件转换为FLV格式,并通过HTTP协议进行传输和播放。它还支持实时的音视频采集和编码,可以将摄像头或麦克风的输入直接传输到流媒体服务器,并在Web浏览器中进行实时播放。 csdn nginx-http-flv-win32具有低延迟、高并发、高可靠性的特点,适用于各种场景,如网络直播、视频点播、在线教育等。 总之,csdn nginx-http-flv-win32是一个方便快捷的流媒体服务器解决方案,可以帮助用户实现高性能的HTTP-FLV流媒体传输和播放。无论是个人还是企业,都可以利用它搭建自己的流媒体服务,提供更好的音视频体验。 ### 回答3: CSDN是一个IT技术社区,提供了各种技术方面的文章、教程、问答等内容,帮助开发者、工程师等解决问题、学习新知识。其中,nginx-http-flv-win32是一个特定版本的NGINX,用于实现HTTP-FLV协议的流媒体传输。 NGINX是一个轻量级的、高性能的Web服务器,也可以用作反向代理服务器、负载均衡器等。它具有高并发处理能力、低内存消耗以及高度可配置性的特点。而HTTP-FLV是一种基于HTTP协议的流媒体传输协议,可以用于实时视频直播和点播。 nginx-http-flv-win32是NGINX在Windows平台下的一个特殊构建版本。它在原始的NGINX基础上,添加了对HTTP-FLV协议的支持。这就意味着可以使用它来搭建一个能够支持HTTP-FLV协议的流媒体服务器。 通过使用nginx-http-flv-win32,开发者可以借助NGINX的高性能和稳定性,快速搭建一个用于实时视频直播或点播的流媒体服务器。它可以接收来自客户端HTTP-FLV请求,然后将视频数据传输到客户端。 此外,nginx-http-flv-win32还支持一些其他功能,例如断点续传、动态模块加载等。开发者可以根据自己的需求进行配置和扩展,以满足特定的业务要求。 总之,nginx-http-flv-win32是一个运行在Windows平台上的特定版本NGINX,用于支持HTTP-FLV协议的流媒体传输。它具有高性能、稳定性和高度可配置性的特点,可以帮助开发者快速搭建流媒体服务器,并实现实时视频直播和点播的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值