启用 HTTP/2 支持

in Tutorials with 5 comments

针对HTTP/1.x的优化

  1. HTTP/2 是复用了一个 TCP 连接进行多次传输,也就是异步连接复用

  2. HTTP/2 会适度地合并资源文件,也就是头压缩

  3. HTTP/2 的 Server Push 特性允许服务器充分利用带宽,并按一定的优先次序向客户端推送资源,也就是请求反馈管线化

  4. 与HTTP 1.1的完全语义兼容···

启用HTTP/2的条件

HTTP/2的支持情况

目前支持 HTTP/2 的浏览器有 Chrome 41+、Firefox 36+、Safari 9+、Windows 10 上的 IE 11 和 Edge

配置HTTP/2

启用 HTTP/2 之前需要配置HTTPS,这里只简单复述一些需要做什么工作

首先、升级 OpenSSL

其次、升级 Nginx 和 OpenSSL 一起编译,同时也要和 --with-http_v2_module --with-http_ssl_module 两个模块一起编译

然后、配置 Nginx 的站点的配置文件

server {
    listen 443 ssl http2 default_server;

    ssl_certificate    server.crt;
    ssl_certificate_key server.key;
    ...
}

最后重启,检查是否正确开启···

一些配置教程

这里再列出以前写过的文章帮助配置,

Let's Encrypt的证书签发与配置
https://www.linpx.com/p/lets-encrypt-certificate-and-configuration.html

用ECC算法签发证书请求文件CSR
https://www.linpx.com/p/ecc-algorithm-is-used-to-issue-the-certificate-request-file-csr.html

串联证书链和配置Nginx开启SSL
https://www.linpx.com/p/the-series-of-certificate-chain-and-configure-nginx-to-open-ssl.html

Nginx的SSL配置优化
https://www.linpx.com/p/ssl-configuration-optimization.html

启用HSTS和申请HSTS Preload List
https://www.linpx.com/p/hsts-and-hsts-preload-list-enabled-applications.html

OpenSSL的ChaCha20-Poly1305密码套件
https://www.linpx.com/p/the-openssl-chacha20poly1305-cipher-suite.html

给Nginx上ChaCha20-Poly1305加密套件
https://www.linpx.com/p/nginx-chacha20poly1305-encryption-suite.html

我对HSTS的一些小了解
https://www.linpx.com/p/i-know-little-about-hsts.html

启用 Certificate Transparency 策略
https://www.linpx.com/p/https-certificate-to-enable-transparency-certificate-policy.html

OCSP Stapling的一些小实践
https://www.linpx.com/p/some-small-practice-of-stapling-ocsp.html

Responses
  1. 军哥的lnmp不知道能不能这么做。你文章中的“其次、升级 Nginx 和 OpenSSL 一起编译,同时也要和 --with-http_v2_module --with-http_ssl_module 两个模块一起编译”这段话不知道怎么去操作,头大。也不知道是lnmp的问题,还是网易蜂巢docker的问题,我觉得应该是我操作不当的问题。

    Reply
    1. @mrjucn

      编译Nginx的时候,直接带上 --with-http_v2_module --with-http_ssl_module 这个两个模板一起编译就可以了,然后下面的工作就是配置了。

      Reply
    2. @mrjucn

      你的意思是开启HTTP/2.0吗?
      如果是的话,又同时是用Nginx做服务器,这两个模块都是需要的;
      编译Nginx需要用到OpenSSL,那么我肯定不用系统自带的,系统自带的OpenSSL一般是1.0.1x,要么升级OpenSSL到1.0.2x,要么Nginx编译的时候就直接用OpenSSL1.0.2x源码。

      Reply
      1. @Chakhsu Lau

        谢谢这么详细的解释,我再研究下。话说用上h2后,你的博客更快了。

        Reply
  2. 已经上了,用的oneinstack ~ 可以直接上~

    Reply