猿学~如何在 Apache 中启用 HTTP/2

Apache 2.4.17开始支持HTTP/2,需要通过配置启用http2模块并确保TLS库支持ALPN。配置Protocols指令启用HTTP/2,支持h2c和h2连接。注意TLS参数、证书和算法要求,以及http2模块与其他协议的兼容性问题和限制。
摘要由CSDN通过智能技术生成

 

刚发布的 Apache httpd 2.4.17 终于支持 HTTP/2 了。这个页面给出了一些如何构建/部署/配置的建议。目的是为了大家发现 bugs 时能升级它,或者给一些能更好工作的建议。

最后,这会归并回到官方 Apache 文档,这里只会留下一个到那里的链接。暂时我们还没做到。

 

源码

你可以从这里得到 Apache 版本。Apache 2.4.17 及其更高版本都支持 HTTP/2。我不会再重复介绍如何构建该服务器的指令。在很多地方有很好的指南,例如这里

(有任何这个试验性软件包的相关链接?在 Twitter 上告诉我吧 @icing)

编译支持 HTTP/2

在你编译版本之前,你要进行一些配置。这里有成千上万的选项。和 HTTP/2 相关的是:

  • --enable-http2

    启用在 Apache 服务器内部实现该协议的 ‘http2’ 模块。

  • --with-nghttp2=<dir>

    指定 http2 模块需要的 libnghttp2 模块的非默认位置。如果 nghttp2 是在默认的位置,配置过程会自动采用。

  • --enable-nghttp2-staticlib-deps

    很少用到的选项,你可能想将 nghttp2 库静态链接到服务器里。在大部分平台上,只有在找不到共享 nghttp2 库时才有用。

如果你想自己编译 nghttp2,你可以到 nghttp2.org 查看文档。最新的 Fedora 以及其它版本已经附带了这个库。

TLS 支持

大部分人想在浏览器上使用 HTTP/2, 而浏览器只在使用 TLS 连接(https:// 开头的 url)时才支持 HTTP/2。你需要一些我下面介绍的配置。但首先你需要的是支持 ALPN 扩展的 TLS 库。

ALPN 用来协商negotiate服务器和客户端之间的协议。如果你服务器上 TLS 库还没有实现 ALPN,客户端只能通过 HTTP/1.1 通信。那么,可以和 Apache 链接并支持它的是什么库呢?

  • OpenSSL 1.0.2 及其以后。
  • ??? (别的我也不知道了)

如果你的 OpenSSL 库是 Linux 版本自带的,这里使用的版本号可能和官方 OpenSSL 版本的不同。如果不确定的话检查一下你的 Linux 版本吧。

配置

另一个给服务器的好建议是为 http2 模块设置合适的日志等级。添加下面的配置:

1

2

3

4

5

6

# 放在某个地方的这样一行

LoadModule http2_module modules/mod_http2.so

 

<IfModule http2_module>

LogLevel http2:info

</IfModule>

当你启动服务器的时候,你可以在错误日志中看来类似的一行:

1

2

[timestamp] [http2:info] [pid XXXXX:tid numbers]

mod_http2 (v1.0.0, nghttp2 1.3.4), initializing...

协议

那么,假设你已经编译部署好了服务器, TLS 库也是最新的,你启动了你的服务器,打开了浏览器。。。你怎么知道它在工作呢?

如果除此之外你没有添加其它的服务器配置,很可能它没有工作。

你需要告诉服务器在哪里使用该协议。默认情况下,你的服务器并没有启动 HTTP/2 协议。因为这样比较安全,也许才能让你已有的部署可以继续工作。

你可以用新的 Protocols 指令启用 HTTP/2 协议:

1

2

3

4

5

6

# 对于 https 服务器

Protocols h2 http/1.1

...

 

# 对于 http 服务器

Protocols h2c http/1.1

你可以给整个服务器或者指定的 vhosts 添加这个配置。

SSL 参数

对于 TLS (SSL),HTTP/2 有一些特殊的要求。阅读下面的“ https:// 连接”一节了解更详细的信息。

http:// 连接 (h2c)

尽管现在还没有浏览器支持,但是 HTTP/2 协议也工作在 http:// 这样的 url 上, 而且 mod_h[ttp]2 也支持。启用它你唯一所要做的是在 Protocols 配置中启用它:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值