概要

HTTP/2(还被称之为 HTTP/2.0 和 HTTP 2.0)是万维网使用的 HTTP 网络协议的第二大版本。2015 年 5 月获准创建 HTTP/2 以解决 HTTP 1.1 存在的某些重大性能问题。可进入 此处 了解该协议的优势。目前大部分主流 web 浏览器都支持 HTTP/2。

自 12.5.30 Update #28 版本起,Plesk 客户则可以使用 HTTP/2,该支持需要 nginx 最新版本。

注解: HTTP/2 只支持 SSL 站点,非 SSL 站点将继续在 HTTP/1.x 协议下运行。

如何为您的网站启用 HTTP/2 支持

请务必更新 NGINX web 服务器到最新版本且运行该版本。实现方式是进入 工具与设置 -> 服务器组件工具与设置 -> 服务管理 页面进行操作。

image-76462.png

image-76463.png

root 身份通过 SSH 登录到服务器并使用以下命令行工具在 Plesk 中启用 HTTP/2:

# plesk bin http2_pref enable

最后一个步骤过程中,您的 NGINX web 服务器将会转向使用 TLS 协议和现代的安全密码,整个 web 服务器配置将会被重建,而有 ‘SSL 支持’ 的所有客户端站点都将移向使用 HTTP/2。

在切换到 HTTP/2 的过程中请检查命令输出查找错误或警告。如果有任何问题,请参阅 故障排除 小节。

注解: 您可以使用如 https://tools.keycdn.com/http2-test 的在线服务检查是否已在某个域名上启用了 HTTP/2 支持。

如果您想要返回 HTTP 1.x 而禁用 HTTP/2,请使用以下命令:

# plesk bin http2_pref disable

ALPN 支持

为了在 Google Chrome 中正确使用 HTTP/2,nginx web 服务器必须支持 ALPN (Application-Layer Protocol Negotiation)。详情请参阅 ALPN 文档

nginx web 服务器的 ALPN 支持在以下操作系统中的 Plesk 中可用。CentOS 7, RedHat Enterprise Linux 7, Ubuntu 14.04, Ubuntu 16.04, Debian 8.

也就是说 Plesk 支持的 HTTP/2 可在提及的操作系统上于所有现代浏览器中运行。

故障排除

如果您在为某个网站启用 HTTP/2 支持时遇到问题,或通过 https://tools.keycdn.com/http2-test 检查站点的结果中显示只启用了 HTTP 1.x 协议,请根据以下步骤进行故障排除。

  1. 请务必在域名的 主机设置 部分启用 SSL 支持。HTTP/2 只支持 SSL 站点,非 SSL 站点将继续在 HTTP/1.x 协议下运行。这对于 NGINX web 服务器和 web 浏览器来说无疑是一种限制。

  2. 检查是否启用 nginx:

    # plesk sbin nginxmng -s
    

    必要时请启用:

    # plesk sbin nginxmng -e
    
  3. 检查 OpenSSL 包是否有 1.0.1 或更新版本。

    # rpm -qa | grep openssl
    openssl-1.0.1e-42.el6_7.4.x86_64.
    
  4. 检查 /usr/local/psa/admin/conf/templates/custom/domain/nginxDomainVirtualHost.php 确定没有自定义配置模板。如果有找到请移除,并重新创建配置文件:

    # plesk sbin httpdmng --reconfigure-all
    

    另外,如果您不想移除自定义设置,您可以如下修改文件 /usr/local/psa/admin/conf/templates/custom/domain/nginxDomainVirtualHost.php

    找到类似下面的几行

    ($OPT['default'] ? ' default_server' : '') . ($OPT['ssl'] ? ' ssl' : '') ?>;
    

    使用下面两行进行替换:

    ($OPT['default'] ? ' default_server' : '') . ($OPT['ssl'] ? ' ssl' : '') .
    ($OPT['ssl'] && $VAR->domain->physicalHosting->proxySettings['nginxHttp2'] ? ' http2' : '') ?>;
    

    然后运行命令:

    # plesk bin http2_pref enable
    
  5. 如果已启用的 HTTP/2 有 ssl 连接问题,请确保 ssl_ciphers 指令(在 /etc/nginx/conf.d/ssl.conf 或在自定义的 nginxDomainVirtualHost.php 文件中) 有以下值:

    ssl_ciphers EECDH+AESGCM+AES128:EECDH+AESGCM+AES256:EECDH+CHACHA20:EDH+AESGCM+AES128:EDH+AESGCM+AES256:EDH+CHACHA20:EECDH+SHA256+AES128:EECDH+SHA384+AES256:EDH+SHA256+AES128:EDH+SHA256+AES256:EECDH+SHA1+AES128:EECDH+SHA1+AES256:EDH+SHA1+AES128:EDH+SHA1+AES256:EECDH+HIGH:EDH+HIGH:AESGCM+AES128:AESGCM+AES256:CHACHA20:SHA256+AES128:SHA256+AES256:SHA1+AES128:SHA1+AES256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!KRB5:!aECDH:!EDH+3DES;
    
  6. 如果启用了 HTTP/2 后站点无法在某些浏览器中运行,可能的原因是没有 HTTP/2 必需的密码和协议。在启用 HTTP/2 后使用来自 Plesk 的 sslmng 工具设置可用的协议和 TLS 密码列表。例如,如果您想要使用与 Plesk 使用的相同的密码,可执行以下命令:

    #plesk sbin sslmng --services=nginx --custom --ciphers="EECDH+AESGCM+AES128:EECDH+AESGCM+AES256:EECDH+CHACHA20:EDH+AESGCM+AES128:EDH+AESGCM+AES256:EDH+CHACHA20" --protocols="TLSv1 TLSv1.1 TLSv1.2"
    

    配置将会存储在 /etc/nginx/conf.d/ssl.conf 文件中。我们不建议手动编辑该文件。

  7. 如果上面的步骤没有帮助,请联系 Plesk 技术支持