跳转至

sxg: NGINX 的签名 HTTP 交换 (SXG) 支持

安装

您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:

  • RedHat Enterprise Linux 7、8、9 和 10
  • CentOS 7、8、9
  • AlmaLinux 8、9
  • Rocky Linux 8、9
  • Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-sxg
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-sxg

通过在 /etc/nginx/nginx.conf 的顶部添加以下内容来启用模块:

load_module modules/ngx_http_sxg_filter_module.so;

本文档描述了 nginx-module-sxg v4.5,于 2021 年 3 月 11 日发布。


为 nginx 提供签名 HTTP 交换 (SXG) 支持。当客户端请求包含 Accept: application/signed-exchange;v=b3 HTTP 头并具有最高的 qvalue 时,nginx 将把来自上游应用程序的响应转换为 SXG。

配置

Nginx-SXG 模块需要在 nginx 中进行配置。

指令

sxg

SXG 模块的激活标志。

  • on: 启用此插件。
  • off: 禁用此插件。

默认值为 off

sxg_certificate

证书文件的完整路径。证书需要满足以下所有条件。

  • 具有 CanSignHttpExchanges 扩展。
  • 使用 ECDSA256 或 ECDSA384。

此指令始终是必需的。

sxg_certificate_key

证书的私钥的完整路径。

此指令始终是必需的。

sxg_cert_url

CBOR 编码证书文件的 URL。协议必须为 https

此指令始终是必需的。

sxg_validity_url

有效性信息文件的 URL。必须为 https,并且必须与网站具有相同的来源。

此指令始终是必需的。

sxg_max_payload

此模块可以生成 SXG 的最大 HTTP 主体大小。默认值为 67108864 (64 MiB)。

sxg_cert_path

nginx 将生成并提供 CBOR 编码证书文件的绝对路径。但请确保证书的 OCSP 响应者可以从您的 nginx 服务器访问,以获取 OCSP 响应。此指令是可选的。

sxg_expiry_seconds

生成的 SXG 文件的生命周期(以秒为单位)。不得大于 604800(1 周)。此指令是可选的。默认值为 86400(1 天)。

sxg_fallback_host

生成的 SXG 文件的回退 URL 的主机名。此指令是可选的。默认值为 HTTP 请求头的 Host 字段参数。

配置示例

load_module "modules/ngx_http_sxg_filter_module.so";

http {
    upstream app {
        server 127.0.0.1:3000;
    }
    include       mime.types;
    default_type  application/octet-stream;
    subrequest_output_buffer_size   4096k;

    server {
        listen    80;
        server_name  example.com;

        sxg on;
        sxg_certificate     /path/to/certificate-ecdsa.pem;
        sxg_certificate_key /path/to/private-key-ecdsa.key;
        sxg_cert_url        https://cdn.test.com/example.com.cert.cbor;
        sxg_validity_url    https://example.com/validity/resource.msg;
        sxg_expiry_seconds 604800;
        sxg_fallback_host  example.com;

        location / {
            proxy_pass http://app;
        }
    }
}

子资源支持

nginx-sxg-module 会自动在其响应中包含子资源的签名,允许最终用户从分发者处预取它。当在来自上游的 HTTP 响应头中找到 link: rel="preload" 条目时,此插件将收集指定的资源到上游,并自动将 rel="allowed-alt-sxg";header-integrity="sha256-...." 附加到原始 HTTP 响应中。此功能对于更快的跨站导航的子资源预加载至关重要。

GitHub

您可以在 nginx-module-sxg 的 GitHub 仓库 中找到此模块的其他配置提示和文档。