如何在Ubuntu 18.04上设置具有HTTP/2支持的Nginx

时间:2020-02-23 14:41:06  来源:igfitidea点击:

Nginx是一种健壮,快速,可靠和动态的开源Web服务器,常用于为高流量站点提供服务。
此外,它以易于配置,高度可扩展性以及对多种协议的支持而闻名。
Nginx支持的协议中包括新的HTTP/2协议,它比之前的HTTP 1.1的主要优势是内容丰富的所需的高传输速度。

在本教程中,我们将深入研究具有HTTP/2支持的安全Nginx服务器的安装和设置:

步骤1 –启用HTTP /2.0支持

首先,假设您已经在以下位置配置了Nginx服务器块:

/etc/nginx/sites-available/your_domain

在我们的例子中,服务器块是" /etc/nginx/sites-available/crazytechgeek.info"。

使用您喜欢的文本编辑器,打开服务器阻止文件并找到listen指令,如图所示

第一个指令指示IPv6连接,而第二个指令则用于IPv4连接

现在,我们将修改每个指令以包括一个" http2"标志,如下所示

这将指示Nginx在支持的浏览器上使用HTTP/2

保存配置文件并退出编辑器。

接下来,打开/etc/nginx/sites-available/default文件并进行相同的更改

保存并退出文本编辑器。

为了确保所有Nginx文件中没有语法错误,请运行以下命令

$sudo nginx -t

输出

步骤2 –清除旧的和不安全的密码

为了使HTTP/2正常工作,我们必须避免使用HTTP/2黑名单中的旧密码和不安全密码。
密码套件是加密算法,指示如何加密流量。

如果使用certbot获得证书,则路径" /etc/letsencrypt/options-ssl-nginx.conf"中的密码对于HTTP/2而言不够安全。
但是,对该文件的修改只会导致错误并阻止certbot应用更新。
这意味着我们必须指定密码列表并指示Nginx忽略文件

打开您的Nginx域服务器块的配置文件

$vim /etc/nginx/sites-available/crazytechgeek.info

注释这行

# include /etc/letsencrypt/options-ssl-nginx.conf;

在该行下方,追加以下行以定义允许的密码

ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

保存文件并退出文本编辑器

如果使用了自定义证书或者第三方证书,请打开文件

/etc/nginx/snippets/ssl-params.conf
$sudo vim /etc/nginx/snippets/ssl-params.conf

找到如下所示的行

...
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
...

相应地修改文件,如下所示

...
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

最后保存并退出配置文件

再次检查是否有任何Nginx配置错误

$sudo nginx -t

如果一切顺利,您应该看到下面的输出,如之前所示

重新启动Nginx

$sudo systemctl reload nginx

在下一步中,我们将测试服务器是否可以处理HTTP/2页

步骤3 –测试是否启用了HTTP/2

现在,让我们测试Nginx Web服务器上是否正在运行并启用HTTP。
在您的终端中,执行以下命令

curl -I -L https://your_domain

在我们的情况下,

curl -I -L https://crazytechgeek.info

输出

或者,您可以通过点击来打开Google开发人员工具来验证HTTP/2

Ctrl + Shift + I

接下来,点击"网络"标签。

在"协议"列中,确保找到标签" h2"

步骤4 –部署HTTP严格传输安全性

最后,即使我们非常清楚地知道我们的服务器可以将HTTP请求重定向到HTTPS,我们仍希望启用HSTS HTTP Strict Transport Security来消除此类重定向。
如果浏览器碰巧遇到了HSTS标头,它将在一段时间内不尝试再次连接到服务器。
IT仅通过安全和加密的HTTPS协议交换数据。

为此,请打开Nginx配置文件

$vim /etc/nginx/nginx.conf

追加以下行

add_header Strict-Transport-Security "max-age=15768000" always;

以秒为单位设置"最大年龄"

如果您的站点有子域,并且您希望将所有子域都应用HSTS,请在行末尾附加includeSubDomains标志

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;

保存并退出配置文件。

和往常一样,检查是否有任何错误

$sudo nginx -t

最后,重新启动Nginx

$sudo systemctl restart nginx