# 通过 Nginx 让网站支持 HTTP/2

https://www.nginx.com/blog/http2-module-nginx/

目前，HTTP 的主流版本是 1.1。它是 1997 年发布的。站点使用 Nginx 作为 Web 服务器，让它支持 HTTP/2 是非常简单的。

只需要在 Nginx 的配置文件中（一般位于 `/etc/nginx/nginx.conf` ）的对应位置添加 `http2` 即可。

但是，在此之前，需检查 Nginx 是否支持 http2，并且 Openssh 的版本是否达到最低要求（>=1.0.2）。

```bash
nginx -V
... --with-http_v2_module
```

如果能在输出中找到 `--with-http_v2_module` 就说明当前版本 Nginx 支持开启 HTTP/2。

具体操作如下：
```ini
http {
  server {
    listen 443 ssl http2;
  }
}
```

修改完成后，执行 `sudo systemctl restart nginx` 来重启 Nginx。

如何检查网站是否支持 HTTP/2？

可以通过开发者工具，对于 Firefox 可通过 F12 打开，在 Network 标签页下面，可以看到由 Status、Method、Domain 等组成的列表，其中有一项为 Protocol，如果修改成功，这一栏的值会由 HTTP/1.1 变为 HTTP/2。

再后来，我把博客域名改为 `www.yidajiabei.xyz` 。我查看域名是否是 HTTP/2 协议时，发现它改变了：变成 `HTTP/1.1` 或者是 `HTTP1.1 + h2` 。当协议是 `HTTP/1.1` 我看到 Transferred 那一栏是 `service worker` ，也就是说：从目标服务器直接获取，协议是 HTTP/2，经过缓存则变为 HTTP/1.1。那么问题来了？缓存为什么能够改变协议呢？还有一个问题，为什么缓存里不能有 HTTP/2呢？
