Debian 从官方源安装 nginx 并且开启 HTTP/3

Oct 19, 2024 • 预计阅读时间 2 分钟

Debian 12 的仓库带的 Nginx 版本还是 1.22 而且不支持 HTTP/3,官方的版本已经是 1.26 了,而且编译时带上了 HTTP/3 的支持。

配置 Apt 源

以下命令需要使用 root 权限执行:

更新软件源到最新:

apt-get update -y

安装必须的程序,等下需要用到:

apt install -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring

下载官方 Nginx 用来验证签名的 key ,并且存到 /usr/share/keyrings

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

确认刚才下载的 key 是来自 nginx.com 签发的:

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

把官方 Nginx 的软件源地址添加到 apt 源中:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | tee /etc/apt/sources.list.d/nginx.list

设置官方源的优先级为 99 ,在安装的时候可以覆盖 Debian 源的同名软件:

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | tee /etc/apt/preferences.d/99nginx

配置完成了,现在可以更新源和安装 Nginx:

apt update -y
apt install nginx

配置 Nginx 开启 HTTP/3

quic_bpf on;

http {

  http2 on;

  http3 on;
  http3_hq on;
  quic_gso on;

  server {
    listen 443 quic reuseport;
    listen [::]:443 quic reuseport;

    listen 443 ssl reuseport;
    listen [::]:443 ssl reuseport;
  } 
}

以上配置里,使用 http2 on 开启了 HTTP/2 的支持。

因为 HTTP/3 使用的是 quic 传输协议(基于 UDP),所以配置方式和 ssl 的配置是类似的。

可选配置:如果需要告诉浏览器可以从 HTTP/2 升级到 HTTP/3,可以添加 HTTP 头 add_header Alt-Svc 'h3=":443"; ma=86400';

测试 HTTP/3

在 macOS 上,自带的 curl 是不支持 HTTP/3 的,需要使用 macports 安装支持 HTTP/3 的版本:

sudo port install curl +http2+http3+gnutls+brotli+zstd

我的安装参数是表示支持 HTTP 2 和 3 还有 tls,并且添加 brotli 和 zstd 的压缩支持。

测试目标网站是否正确开启了 HTTP/3:

$ curl -v --http3 -X OPTIONS https://quic.nginx.org

* Connected to quic.nginx.org (35.214.218.230) port 443
* using HTTP/3
* [HTTP/3] [0] OPENED stream for https://quic.nginx.org/
* [HTTP/3] [0] [:method: OPTIONS]
* [HTTP/3] [0] [:scheme: https]
* [HTTP/3] [0] [:authority: quic.nginx.org]
* [HTTP/3] [0] [:path: /]
* [HTTP/3] [0] [user-agent: curl/8.10.1]
* [HTTP/3] [0] [accept: */*]
> OPTIONS / HTTP/3
> Host: quic.nginx.org
> User-Agent: curl/8.10.1
> Accept: */*

参考资料

DebianNginxHTTP3
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

Git 设置本地代理

解决阿里云 Debian VPS 启动慢的问题