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

在本教程中,我们将学习如何在 Ubuntu 上设置支持 HTTP/2 的 Nginx。 Nginx 是一个 Web 服务器,用作保留代理、负载均衡器、邮件代理和 HTTP 缓存。 让我们深入了解 Nginx。

什么是 Nginx?

你知道什么是网络服务器吗? 它是提供客户请求的网页的软件。 用户通过网络浏览器请求任何域,请求通过HTTP协议到达网络服务器。 服务器处理它,并通过 HTTP 响应请求的页面。 这通常发生在客户端和服务器之间。

每个 Web 服务器都有一个 IP 地址和一个域名。 任何计算机都可以成为网络服务器。 用户需要安装 XAMPP 等软件, Apache、NGINX、龙卷风等。

Nginx 是提供以下功能的 Web 服务器:

  • 一种用于 Web 服务的开源软件。
  • 它是用于反向代理、缓存和负载平衡的网络服务器。
  • 它提供 HTTP 服务器功能
  • 它旨在实现最佳性能和稳定性,即减少页面加载时间。
  • IT 充当 IMAP、POP3 和 SMTP 等电子邮件的代理服务器。
  • 它使用非线程和事件驱动的架构。

查看 Nginx 官方文档以获取更多详细信息。

HTTP/1 和 HTTP/2 有什么区别?

由于我们要设置支持 HTTP/2 的 Nginx,因此了解 HTTP 1 和 HTTP 2 之间的区别很重要。HTTP/2 是 HTTP 的最新版本。 HTTP的版本如下:

HTTP 版本
HTTP/0.9 1991年
HTTP/1.0 1996年
HTTP/1.1 1997年
SPDY / 2 2012年
HTTP/2 2015年

HTTP 的版本

HTTP/1 有一些缺点,但 HTTP/2 解决了。 我们来看看下表:

特点 HTTP/1 HTTP/2
线路阻塞负责人 TCP 连接被前面的请求阻塞
直到服务器响应。 其他请求必须等待。
阻塞时间完全减少。 同一个 TCP 连接本身通过多路复用服务多个 HTTP 请求
请求头中的冗余 由于 HTTP 协议是无状态的,因此相同的 HTTP 标头参数必须与请求和响应一起一次又一次地发送出去。 它使用 H-pack 压缩器来压缩所有的头参数。 它在连接级别工作。
HTTP/1 中没有这样的功能 它允许响应甚至尚未发送的请求,但客户端肯定会要求这些请求。 例如 index.html、style.css 或 script.js。 这些文件已经发送到客户端。

我希望这个概念被清除。 让我们了解如何安装和设置 Nginx。

更新存储库

第一步是更新和升级存储库。 使用更新命令,我们将下载系统中安装的最新版本的软件包列表。 升级将安装列表中最新版本的软件包。

我们将使用 apt 命令来更新和升级包。 查看教程以了解 Linux 中 apt 和 apt-get 命令之间的区别。

让我们看看下面的命令:

sudo apt update && apt upgrade 

安装 Nginx 包

一旦我们完成了软件包的升级,下一步就是安装 Nginx 软件包。 请注意,HTTP/2 支持 Nginx 1.9.5 或更高版本。 因此,我们需要安装最新版本的 Nginx 包。

用户可以使用 apt install 命令安装 Nginx 包。 让我们看看下面的命令:

sudo apt install nginx 
安装 Ngnix 1

系统将提示您确认安装过程。 回答是 YES 并完成安装过程。

下一步是检查包的版本是否我们安装了正确的版本。 使用 -v 选项检查版本。 让我们看看下面的命令:

sudo nginx -v 
检查版本

启用 HTTP/2 支持

安装包后,我们需要启用 HTTP/2 端口。 用户必须将端口从 80 更改为 443。端口 80/HTTP 是万维网,而端口 443/HTTP 是基于 TLS/SSL 的 HTTP 协议。

用户需要在位于文件夹 /etc/nginx/sites-available 目录中名为“default”的配置文件中进行更改。 让我们看看下面的命令:

sudo nano /etc/nginx/sites-available/default 

您可以使用您选择的任何文本编辑器。 您可以看到 Listen 的默认值设置为 80。有两个不同的“listen”变量,如下图所示。 第一个监听变量表示 IPv4 连接,而第二个表示 IPv6 连接。 将端口号更改为 443 并添加 SSL 连接,如下所示。

进行如下更改:

listen 443 ssl http2;  listen [::]:443 ssl http2; 

让我们看看下面的图片:

更改 Sites.conf 中的配置 更改 Sites.conf 中的配置

Nginx 现在可以使用支持 HTTP/2 协议的浏览器。 Save 配置文件使用“Ctrl + O”.

更改并添加服务器块

前面我们更改了端口,下一步是更改服务器名称。 它为什么如此重要? 因为服务器名称与域名相关联,否则它将接受所有传入的请求。 用户只需要更改配置文件中的服务器名称。

服务器名称默认设置为“_”(下划线)。 因此,您需要对此进行更改。 让我们看看下面的命令:

server_name example.com 

您可以在此处使用您的域名。

用户还需要添加 server 块,它将所有 HTTP 请求定向到 HTTPS。 不要忘记更改配置文件中的服务器名称。 让我们看看下面的代码:

server {   listen         80;   listen    [::]:80;   server_name    example.com www.example.com;   return      301 https://example.com;   } 

Save 配置文件使用“Ctrl+O”如前所述。

删除密码

什么是密码? 它是密码学中用于执行加密和解密的算法。 这些用于保护网络连接。 密码套件是一组算法。 查看密码套件官方文档了解更多详细信息。

HTTP/2 有大量旧的和不安全的密码需要删除或避免。 因此,我们将提及比 HTTP/2 密码更安全的密码列表。 我们需要在 /etc/nginx/ 目录下的 nginx.conf 文件中进行配置。 使用任何您喜欢的编辑器。

让我们看看下面的命令:

sudo nano /etc/nginx/nginx.conf 

添加以下代码行,如下所示 ssl_prefer_server_ciphers 上。 此行包括 HTTP2 浏览器理解的所有最新密码的列表。

ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; 
在 Nginx.conf 文件 1 中添加代码行在 Nginx.conf 文件 1 中添加代码行

Save 并使用“:wq!”退出文件。

检查语法错误

最后一步是检查语法错误,即配置文件中所做的更改是否正确。 使用 -t 选项通过 nginx 命令检查语法。 如果没有错误,输出将成功。

为此,请在终端中键入以下内容:

sudo nginx -t 
检查语法错误检查语法错误

启动服务

完成所有基本配置后,下一步是启动服务。 用户必须使用 start 命令来启动 Nginx 服务。 我们还可以使用 status 命令检查服务的状态。

让我们看看下面的命令:

sudo systemctl start nginx.service sudo systemctl status nginx.service 
检查服务状态 1检查服务状态 1

您可以看到上图中突出显示的状态。 有时会发生,该服务已经启动。 在这种情况下,您需要再次重新加载 nginx.service 文件。 让我们看看下面的命令:

sudo systemctl restart nginx.service 

测试nginx

最后一步是检查它是否已启用。 为此,我们将使用 curl 命令。 它会让我们知道 HTTP/2 端口是否已启用。 如果它显示日期、位置或内容长度等详细信息,即已启用。

为此,请键入以下内容:

curl -I -L https://your_domain 

可以看到服务已启用。

结论

我们已经成功地学习了如何设置支持 HTTP/2 的 Nginx。 我们还清除了 HTTP/1 和 HTTP 2 之间的区别。如果您仍然遇到任何问题,请在评论部分告诉我们。