Skip to content

docker nginx http2 配置

要在你的配置中启用 HTTP/2,你只需在监听 HTTPS 端口的指令中添加http2关键字。

这将允许支持 HTTP/2 的客户端使用该协议与你的服务器通信。

HTTP/2 提供了许多性能改进,包括头部压缩、服务器推送、请求/响应复用等,可以显著提高网站的加载速度和效率。

步骤 1: 确保使用 SSL/TLS

HTTP/2 需要 HTTPS,所以首先确保你有有效的 SSL 证书和密钥。如果你没有这些文件,可以通过阿里云/腾讯云等服务获取免费证书。

步骤 2: 修改 Nginx 配置以启用 HTTP/2

编辑你的 Nginx 配置文件(通常是 nginx.conf),在 listen 指令中添加 http2 关键字。这里是一个配置示例,展示如何为一个域名启用 HTTP/2:

nginx
server {
    listen 443 ssl http2; # 监听443端口,启用SSL和HTTP/2
    server_name yourdomain.com; # 设置服务器的域名

    # SSL证书和密钥位置
    ssl_certificate cert/yourdomain.com.pem; # SSL证书的位置
    ssl_certificate_key cert/yourdomain.com.key; # SSL证书密钥的位置

    # SSL安全设置
    ssl_protocols TLSv1.2 TLSv1.3; # 指定使用TLS 1.2和TLS 1.3协议
    ssl_prefer_server_ciphers on; # 优先使用服务器指定的密码套件
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; # 设置加密算法

    location / {
        root /usr/share/nginx/html; # 网站根目录
        index index.html; # 默认返回的文件
        try_files $uri $uri/ /index.html; # 尝试访问请求的文件或目录,如果不存在则返回 index.html
    }
}

在这个配置中:

  • listen 443 ssl http2; 指定了 Nginx 监听 443 端口,并启用 SSL 与 HTTP/2 协议,这通常用于安全的 HTTPS 连接。
  • ssl_certificatessl_certificate_key 分别指定了 SSL 证书和私钥的文件路径。
  • ssl_protocols 指定使用哪些版本的 TLS 协议,这里设置为 TLS 1.2 和 TLS 1.3,是当前推荐的安全协议版本。
  • ssl_prefer_server_ciphers on; 表示服务器将优先考虑它的密码套件选择,而不是客户端的。
  • ssl_ciphers 用于指定服务器支持的加密套件,以增强安全性。
  • root 定义了 Nginx 服务内容的根目录。
  • index 指定了访问根目录时默认返回的网页文件。

步骤 3:重启 Nginx (Linux)

在修改配置文件后,需要重启 Nginx 以应用更改:

bash
sudo systemctl restart nginx

或者,如果你不是使用 systemctl,可以使用如下命令:

bash
sudo service nginx restart

注意:

  • 确保你的 NGINX 版本支持 HTTP/2。HTTP/2 支持自 NGINX 1.9.5 开始提供。
  • 使用 HTTP/2 时,确保 SSL 配置是安全的,因为不安全的配置可能会降低使用 HTTP/2 带来的好处。
  • 一旦启用了 HTTP/2,支持 HTTP/2 的客户端将自动使用它与你的服务器通信。
  • 不支持 HTTP/2 的客户端将回退到 HTTP/1.x。

通过这样配置,你的服务器将能够利用 HTTP/2 提供的改进,为用户提供更快、更安全的网站访问体验。

http2 优点

  • 二进制协议:

HTTP/2 采用二进制格式传输数据,而不是 HTTP/1.x 中的文本格式。二进制协议更易于解析、更高效且错误更少。

  • 多路复用:

HTTP/2 允许在单个 TCP 连接上同时发送多个请求和响应。这消除了 HTTP/1.x 中的线头阻塞问题,即之前多个 HTTP 请求必须按顺序响应,现在则可以交错请求和响应,从而提高了加载速度和效率。

  • 头部压缩:

HTTP/2 引入了 HPACK 压缩格式,用于减少传输的头部大小。通过压缩这些头部信息,可以减少带宽使用,提高传输速度。

  • 服务器推送:

HTTP/2 中的服务器推送允许服务器在客户端请求之前就发送资源,这可以进一步提高页面加载速度。服务器可以主动推送关联资源,如样式表和 JavaScript 文件,这样客户端就不必单独请求这些资源。

  • 流优先级:

HTTP/2 允许设置请求之间的优先级。这意味着客户端可以指示哪些资源更重要,因此可以先加载关键资源,从而提高用户体验。

  • 连接复用:

通过多路复用,HTTP/2 使得多个请求和响应可以共享同一个连接,这减少了建立多个连接的开销和复杂性,提高了资源的使用效率。 这些特性使 HTTP/2 在 Web 性能和效率方面相比于 HTTP/1.x 有显著的提升。多数现代浏览器和 Web 服务器已支持 HTTP/2,许多网站也已经迁移到这一新的协议。