我们已经创建了一个用于将Web服务器支持HTTP/3的Docker镜像,以Nginx作为反向代理

我想做的事情 (wǒ zuò de

我想将我喜欢的Web服务器升级为HTTP/3。
HTTP/3正在逐渐在Google、Cloudflare等地使用,并且在HTTP/3中,通信是通过UDP进行的,可以比HTTP/1.x和HTTP/2更快地进行通信。有关详细信息,可以参考「HTTP/3が出るらしいという話を雑に書く – Qiita」等资料。

本次我们将Nginx + HTTP/3转化为Docker镜像,让HTTP/3的支持即刻变得更加简便。同时,我还打算提供一个能够轻松支持HTTP/3的Docker Compose示例。

Cloudflare Quiche 云锁

目前,Cloudflare公司发布了一个名为Quiche的OSS,用于支持QUIC和HTTP/3,该公司已在CDN、1.1.1.1和Warp等方面发挥了重要作用。Cloudflare官方发布了一篇关于让Nginx支持HTTP/3的文章,在此基础上我们创建了相应的Docker镜像。

Nginx和HTTP/3的Docker镜像

undefined

可以通过 docker pull nwtgck/nginx-http3 命令获取到 Docker 镜像。
Dockerfile 的内容可以在 https://github.com/nwtgck/docker-nginx-http3/blob/master/Dockerfile 找到。
该 Dockerfile 是基于 cloudflare/quiche 的(quiche/extras/nginx at master)描述,在官方的 GitHub 上创建的 Nginx + HTTP/3。

undefined

例:运行docker

以下是一个使用docker run启动的示例。
在当前目录下创建以下nginx.conf文件。

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    server {
        # Enable QUIC and HTTP/3.
        listen 443 quic reuseport;

        # Enable HTTP/2 (optional).
        listen 443 ssl http2;

        ssl_certificate      /etc/ssl/certs/server.crt;
        ssl_certificate_key  /etc/ssl/private/server.key;

        # 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-23=":443"; ma=86400';
    }
}

在HTTP/3中,为了使用UDP,我们还需要通过-p 443:443/udp命令来开放UDP端口。

docker run -it -p 443:443 -p 443:443/udp \
  -v $PWD/nginx.conf:/usr/local/nginx/conf/nginx.conf \
  -v /etc/letsencrypt/live/nwtgck-nginx-http3.tk/fullchain.pem:/etc/ssl/certs/server.crt \
  -v /etc/letsencrypt/live/nwtgck-nginx-http3.tk/privkey.pem:/etc/ssl/private/server.key \
  nwtgck/nginx-http3

以上是指定了Let’s Encrypt证书。请确保正确指定了…/fullchain.pem和…/privkey.pem两个文件的存在。起初我想在本地环境使用自签名证书,但后来在下文提及的Chrome浏览器中无法进行HTTP/3的确认,所以决定使用Let’s Encrypt。

要将喜欢的Web服务器设置为反向代理并支持HTTP/3,可以进行以下操作:

只需提供一种选择 :
根据上述,我认为我们可以自由地编写nginx.conf,并使用location / {proxy_pass …}等进行反向代理的设置。
使用docker run –net=host …来启动,可以创建一个反向代理,用于运行在主机环境中的其他Web服务器。
关于使用Docker Compose进行反向代理的示例将在后面提到。

确认是否支持HTTP/3。

image.png

通过使用Cloudflare官方博客《HTTP/3: 过去、现在和未来》中提到的方法来确认HTTP/3的支持。在Chrome Canary中加上–enable-quic –quic-version=h3-23标志来启动。

Mac用户可以使用以下命令启动:

/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --enable-quic --quic-version=h3-23
image.png

使用Chrome Canary的版本号为80.0.3959.0 (官方版) canary (64位)。如果想要在命令行界面而不是图形界面的Chrome Canary中进行确认,可以尝试以下方法:
http3-client – HTTP/3 文档。

使用Docker Compose的示例

HTTP/3的兼容由名为Ghost的开源博客平台提供支持。您可以在https://hub.docker.com/_/ghost/找到Docker镜像发布版本。

我在这个GitHub仓库https://github.com/nwtgck/ghost-nginx-http3-docker-compose中创建了一个示例。

只有docker-compose.yml和nginx.conf的简单配置,内容如下:

version: '3.1'
services:
  nginx:
    image: nwtgck/nginx-http3
    ports:
      - '80:80'
      - '443:443'
      - '443:443/udp'
    depends_on:
      - ghost
    restart: always
    volumes:
      - ./nginx.conf:/usr/local/nginx/conf/nginx.conf
      # 適切に証明書のパスを指定してください。
      - /etc/letsencrypt/live/nwtgck-nginx-http3.tk/fullchain.pem:/etc/ssl/certs/server.crt
      - /etc/letsencrypt/live/nwtgck-nginx-http3.tk/privkey.pem:/etc/ssl/private/server.key

  ghost:
    image: ghost
    restart: always
    expose:
      - "2368"
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://ghost:2368;
        }
    }

    server {
        # Enable QUIC and HTTP/3.
        listen 443 quic reuseport;

        # Enable HTTP/2 (optional).
        listen 443 ssl http2;

        ssl_certificate      /etc/ssl/certs/server.crt;
        ssl_certificate_key  /etc/ssl/private/server.key;

        # Enable all TLS versions (TLSv1.3 is required for QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        location / {
            proxy_pass http://ghost:2368;
        }

        # Add Alt-Svc header to negotiate HTTP/3.
        add_header alt-svc 'h3-23=":443"; ma=86400';
    }
}

在我自己的环境中尝试的方法

# リポジトリをクローンする
git clone https://github.com/nwtgck/ghost-nginx-http3-docker-compose.git
cd ghost-nginx-http3-docker-compose

<docker-compose.ymlの...fullchain.pemと...privkey.pemのパスを適切に書き換える>

# サーバーを起動する
docker-compose up
image.png

給予额外的增值礼品。

我分享了一些为了构建Nginx + HTTP/3以及将其打包为Docker镜像而遇到的一些困难 – nwtgck / 太田涼所做的事情。

广告
将在 10 秒后关闭
bannerAds