如何在Ubuntu 18.04上设置具有HTTP/2支持的Nginx
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