如何使用Nginx Web服务器在Debian 8上启用HTTP2

更新资料:由于网络浏览器放弃了对NPN(下一协议协商)的支持,因此以下描述的方法变得无用。 这是最新的工作方法。

您可能已经知道,HTTP2是HTTP / 1.1协议的最新更新。 据说HTTP2可以显着加快网页访问速度,因为它能够像在单个TCP连接上一样发送与浏览器一样多的HTTP请求。

HTTP2基于SPDY。 本教程展示了如何在Debian 8服务器上使用Nginx启用HTTP2并解释一些Nginx知识。 有关为何HTTP2比HTTP / 1.1更快的原因的详细说明,请查看以下文章。

什么是SPDY和HTTP / 2

如果您只想知道如何启用HTTP2,则可以跳过它并阅读以下文本。

在Debian 8 Jessie上安装最新版本的Nginx

Nginx仅在1.9.5版之后支持HTTP2。 Debian 8存储库具有Nginx 1.6.2。 我们可以从Nginx官方存储库中安装最新版本。

Nginx有两个分支:nginx稳定版和nginx主线。 顾名思义,nginx stable是较稳定的版本,而较老的版本是nginx mainline,是较新的版本。 这并不一定意味着nginx主线是不稳定的。 实际上,如果您没有充分的理由使用较早版本,nginx.org建议使用nginx主线。

要在Debian 8上安装Nginx主线,首先我们需要获取Nginx GPG公钥。

wget http://nginx.org/keys/nginx_signing.key

然后使用以下命令将密钥导入Debian 8:

sudo apt-key add nginx_signing.key

在那之后 /etc/apt/sources.list 文件。

sudo nano /etc/apt/sources.list

在文件末尾添加以下两行。

deb http://nginx.org/packages/mainline/debian/ jessie nginx
deb-src http://nginx.org/packages/mainline/debian/ jessie nginx

按Ctrl + O保存文件,然后按Ctrl + X关闭nano文本编辑器。

在安装过程中,Nginx将自动安装新的配置文件。 因此,在安装之前,您应该备份配置文件。 以下命令会将主配置文件和服务器块配置文件复制到主目录。

cp /etc/nginx/nginx.conf /etc/nginx/sites-available/*.conf /etc/nginx/conf.d/*.conf ~

如果您以前安装过Nginx,请将其删除:

sudo apt-get remove nginx nginx-common nginx-full nginx-core

现在更新本地包索引并安装Nginx主线分支。

sudo apt-get update && sudo apt-get install nginx

安装完成后,请检查您的nginx版本。

[email protected]:~$ sudo nginx -v
nginx version: nginx/1.11.1

有关不同Nginx软件包的一点说明

在Debian和Ubuntu上,您会发现 /etc/nginx/sites-available/etc/nginx/sites-enabled 目录和一个 /var/www 目录作为默认文档根目录。 这遵循Apache Web服务器的传统。

但是,官方的Nginx软件包集 /usr/share/nginx/html 作为默认文档根目录和服务器块配置文件存储在 /etc/nginx/conf.d/ 目录。 RHEL,CentOS和Fedora遵循官方的方式。 要使用此目录, http 本节在/etc/nginx/nginx.conf文件中需要以下指令。

include /etc/nginx/conf.d/*.conf;

Debian软件包维护者认为,使用Apache方式启用或禁用Nginx服务器块更容易。 您只需要创建或删除可用站点和启用站点之间的符号链接。

但是我认为用 /etc/nginx/conf.d/。 要禁用Nginx服务器块,您只需要确保文件不以结尾 .conf 延期。 例如:

sudo mv /etc/nginx/conf.d/example.conf /etc/nginx/conf.d/example.conf.save

重命名文件后,重新加载Nginx并禁用服务器块。

sudo service nginx reload         or         sudo systemctl reload nginx

如果仍然需要可用的站点和启用的站点,则可以手动创建它们。

sudo mkdir /etc/nginx/sites-avaiable /etc/nginx/sites-enabled

然后将以下行添加到 http 部分并重新加载Nginx。

include /etc/nginx/sites-enabled/*;

nginx http2

在sites-available目录中创建服务器块配置文件后,运行以下命令以创建符号链接,该符号链接将启用服务器块。

sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/example.conf

要禁用服务器块,只需使用符号链接删除 rm 命令:

sudo rm /etc/nginx/sites-enabled/example.conf

Nginx还是www-data?

另请注意,官方Nginx集 Nginx的 作为nginx用户而不是 www数据。 您要确保php-fpm进程以同一用户身份运行。 检查php www池配置文件。 (我想您已经安装了PHP7。)

sudo nano /etc/php/7.0/fpm/pool.d/www.conf

查找用户名和组名。

user = www-data
group = www-data

您可以看到它以 www数据 用户。 因此,您将需要配置Nginx作为www-data运行。

sudo nano /etc/nginx/nginx.conf

在此文件的顶部,将用户从 Nginx的www数据

Nginx www数据

保存并关闭文件。 然后重新加载Nginx。

使用Nginx Web服务器启用HTTP2

HTTP2规范本身不需要HTTPS。 但是,所有主要的Web浏览器(Firefox,Google Chrome,Edge等)仅支持带有HTTPS站点的HTTP2。 因此,您需要获取TLS / SSL证书。 多亏了“让我们加密”,您现在可以轻松获得免费证书。 查看以下教程。

在Debian 8 Server上使用Nginx安装Let’s Encrypt免费的TLS / SSL证书

在站点上启用HTTPS后,请编辑服务器块配置文件。

sudo nano /etc/nginx/conf.d/example.conf

要么

sudo nano /etc/nginx/sites-available/example.conf

要启用HTTP2,您只需添加 http2 到listen指令的末尾。

更改

listen 443 ssl;

listen 443 ssl http2;

保存并关闭文件。 然后测试nginx的配置。

sudo nginx -t

如果测试成功,请重新加载Nginx

sudo service nginx reload        or          sudo systemctl reload nginx

您完成了。 很容易 !

如何检查HTTP / 2是否在您的站点上正常工作

您可以选择以下方法。

  • https://tools.keycdn.com/http2-test 并输入您的域名。
  • 在Google Chrome和Firefox中安装HTTP / 2和SPDY指示器扩展
Sidebar