在Ubuntu 16.04上的Nginx中启用HTTP / 2

HTTP / 2是现已过时的HTTP / 1.1协议的新版本,该协议早在1999年就已标准化。此后,网络上发生了许多变化。我们的应用程序比返回的应用程序要复杂得多,因此,为解决这一问题,必须更改基础传输协议。关于 HTTP / 2的最重要的事情是它将使最终用户的网页速度更快。

简而言之,HTTP / 2添加了5个关键功能:

  • 单一持久连接
  • 多路复用
  • 标头压缩
  • 资源优先级
  • 保护传输层(仅对浏览器有效)

解释所有这些功能不在本教程的讨论范围之内,但是如果您想更深入地研究本主题,我可以推荐《高性能浏览器网络》一书的摘录-HTTP / 2摘录

在本指南中,我们将在Ubuntu 16.04(Xenial)上安装Nginx的最新稳定版本,生成自签名SSL证书,在Nginx中启用HTTP / 2协议,并安装基于文本的浏览器elinks以充当HTTP客户端。

安装Nginx

要安装最新的Nginx稳定版本,我们需要发出很多命令:

  1. 我们需要下载用于对软件包和存储库进行签名的Nginx公共PGP密钥,并将其添加到软件包管理器使用的密钥环中,以验证从存储库下载的软件包的真实性。

    wget https://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key
    
  2. 从文件系统中删除PGP密钥:

    rm nginx_signing.key
    
  3. 添加新的存储库

    printf "deb http://nginx.org/packages/ubuntu/ xenial nginx \ndeb-src http://nginx.org/packages/ubuntu/ xenial nginx \n" >> /etc/apt/sources.list.d/nginx.list
    
  4. 更新您的软件包列表并安装Nginx:

    apt update && apt install nginx -y
    
  5. 要验证Nginx版本,我们可以使用以下命令:

    nginx -v 
    # nginx version: nginx/1.10.1
    

    如果一切顺利1.10.x,运行nginx -v命令时,您应该会在输出中看到类似的模式。

自签名证书和HTTP / 2

虽然HTTP / 2规范没有强制浏览器实现HTTP / 2 TLS上,所有主要浏览器决定只实现HTTP / 2通过TLS,但不是任何TLS版本,仅TLS 1.2或更高版本。

我们将为虚构example.com域创建自签名证书,对于生产,您需要有效域并使用受信任的CA。

  1. 生成私钥:

    openssl genrsa -aes128 -out example.com.key 2048
    

    运行此命令后,您需要输入两次密码。因为密码短语很烦人,所以我们将其删除。

  2. 从私钥中删除密码:

    openssl rsa -in example.com.key -out example.com.key
    
  3. 生成证书签名请求(CSR):

    openssl req -new -sha256 -key example.com.key -out cert-request.csr 
    

    我们正在创建单域证书,因此我们需要将公共名称字段设置为等于example.com

  4. 创建证书:

    openssl x509 -req -days 365 -in cert-request.csr -signkey example.com.key -out example.com.crt
    
  5. 整理证书和私钥:

    mkdir -p /etc/ssl/testing/private && mkdir /etc/ssl/testing/certs
    mv example.com.key /etc/ssl/testing/private && mv example.com.crt /etc/ssl/testing/certs
    
  6. 制作Nginx虚拟主机目录

    mkdir /etc/nginx/sites-available && mkdir /etc/nginx/sites-enabled
    
  7. 然后运行nano /etc/nginx/nginx.conf并找到指令include /etc/nginx/conf.d/*.conf;。在此伪指令下添加include /etc/nginx/sites-enabled/*;保存(CTRL + O),然后退出(CTRL + X)。

    ##
    # Virtual Hosts
    ##
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    
  8. 使用此命令example.com.conf/etc/nginx/sites-available目录内创建一个文件,nano /etc/nginx/sites-available/example.com.conf然后复制/粘贴以下代码:

    server {
        listen 80;
        listen [::]:80;
        server_name example.com;
        return 301 https://$host$request_uri;
    }
    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name example.com;
        root /var/www/html;
        index index.nginx-debian.html;
    
        ssl_certificate /etc/ssl/testing/certs/example.com.crt;
        ssl_certificate_key /etc/ssl/testing/private/example.com.key;
    
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
        ssl_prefer_server_ciphers on;
    }
    

    恭喜,您现在已启用HTTP / 2的 Web服务器。在HTTPS虚拟主机内部http2listen指令中添加参数将为您提供HTTP / 2支持。

  9. /etc/nginx/sites-available/example.com.conf使用以下命令为其创建符号链接:

    ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled
    
  10. 测试配置语法

    nginx -t
    
  11. 重新启动Nginx以应用您的更改:

    systemctl restart nginx
    
  12. example.com域添加到/etc/hosts文件

    echo '127.0.0.1    example.com' >> /etc/hosts
    

要测试您的虚拟主机,我们需要基于文本的浏览器-elinks。

  1. 要安装elink,请使用以下命令:

    apt install elinks
    
  2. 要测试您的example.com虚拟主机运行:

    elinks https://example.com
    
  3. 要退出elinks浏览器,请按键盘上的q,然后按Enter

测试HTTP / 2

要查看服务器发布哪种协议的最简单方法是使用openssl工具箱。

    openssl s_client -connect example.com:443 -nextprotoneg ''

在此命令的输出中,您应该看到如下所示:

    CONNECTED(00000003)
    Protocols advertised by server: h2, http/1.1      

要查看运行中的HTTP / 2,可以使用浏览器开发人员工具。HTTP / 2协议用h2HTTP/2.0标识符表示。在开发工具中打开网络面板,然后刷新页面。

结论

现在,您应该知道在Nginx配置中启用HTTP / 2是多么“容易” ,但这并不是整体的全部。首先,您应该考虑使用强大的密码套件在服务器上启用TLS / SSL,并确保您没有使用列入黑名单的密码。只有在服务器上启用了强大的TLS / SSL之后,您才可以开始考虑启用HTTP / 2



Leave a Comment

如何在CentOS 7上安装Oxwall

如何在CentOS 7上安装Oxwall

Oxwall是一个开源社交网络软件平台,可用于免费构建自定义社交网站(SNS)。在这篇文章中,

如何在Ubuntu 16.10上安装Review Board

如何在Ubuntu 16.10上安装Review Board

使用其他系统?Review Board是一个免费且开源的工具,用于检查源代码,文档,图像等。这是基于网络的软件战

如何在Debian 9 LAMP VPS上安装October 1.0 CMS

如何在Debian 9 LAMP VPS上安装October 1.0 CMS

使用其他系统?October 1.0 CMS是基于Laravel框架构建的简单,可靠,免费和开源的内容管理系统(CMS)

如何使用Ubuntu 15.10在Vultr服务器上安装Xubuntu桌面

如何使用Ubuntu 15.10在Vultr服务器上安装Xubuntu桌面

Xubuntu是XFCE + Ubuntu!XFCE是Ubuntu的轻量级GUI /桌面。Vultr服务器需要其他依赖项,默认情况下未安装这些依赖项。

如何在Debian 9上安装Monica

如何在Debian 9上安装Monica

使用其他系统?Monica是一个开源的个人关系管理系统。可以将其视为CRM(销售团队使用的一种流行工具

如何使用SSL和安全密码保护由Nginx驱动的网站

如何使用SSL和安全密码保护由Nginx驱动的网站

简介SSL(代表安全套接字层)及其后续版本TLS(代表传输层安全性)是需要加密的加密协议。

如何在Fedora 26 LAMP VPS上安装MODX Revolution

如何在Fedora 26 LAMP VPS上安装MODX Revolution

使用其他系统?MODX Revolution是一种快速,灵活,可扩展,免费和开源的企业级内容管理系统(CMS),由

如何在Ubuntu 17.04上安装JuliaLang

如何在Ubuntu 17.04上安装JuliaLang

朱莉娅(Julia)通常称为JuliaLang,是一种用于数值计算的编程语言。Julia的速度和C一样快,但是却不牺牲可读性

在Ubuntu 14.04上安装Ruby on Rails

在Ubuntu 14.04上安装Ruby on Rails

Ruby on Rails(RoR)是用Ruby编程语言编写的框架,可让您将Ruby与HTML,CSS和类似的程序结合使用。

在Fedora 28上安装Anchor CMS

在Fedora 28上安装Anchor CMS

使用其他系统?Anchor是用PHP编写的轻量级开源博客CMS。Anchors源代码托管在GitHub上。本指南将向您展示

将Debian 9升级到Debian 10

将Debian 9升级到Debian 10

简介Debian 10(Buster)是Debian 9(Stretch)的后继产品。它于2019年7月6日发布。在本教程中,我们将升级一个existin

如何管理Linux服务器时区设置

如何管理Linux服务器时区设置

在Linux服务器上正确设置日期和时间非常重要。您的服务器日志和其他重要信息都将反映时区

如何在Ubuntu 16.04上安装Taiga项目管理工具

如何在Ubuntu 16.04上安装Taiga项目管理工具

使用其他系统?Taiga是用于项目管理的免费和开源应用程序。与其他项目管理工具不同,Taiga使用增量

在Ubuntu上配置Nagios:第1部分-Nagios服务器

在Ubuntu上配置Nagios:第1部分-Nagios服务器

本文是有关在Ubuntu 14.04上安装和配置Nagios的2部分系列文章的一部分。第1部分:Nagios服务器第2部分:远程主机概述Nagio

如何访问Vultr VPS

如何访问Vultr VPS

Vultr提供了几种不同的方式来访问VPS以进行配置,安装和使用。访问凭据VPS ar的默认访问凭据

如何在Debian 9上安装Grav CMS

如何在Debian 9上安装Grav CMS

使用其他系统?Grav是用PHP编写的开源平面文件CMS。Grav源代码公开托管在GitHub上。本指南将向您展示如何

如何在Fedora 26 LAMP VPS上安装Pagekit 1.0 CMS

如何在Fedora 26 LAMP VPS上安装Pagekit 1.0 CMS

使用其他系统?Pagekit 1.0 CMS是一个美观,模块化,可扩展,轻量级,免费和开源的内容管理系统(CMS),具有

如何在Ubuntu 16.04 LAMP VPS上安装BigTree CMS

如何在Ubuntu 16.04 LAMP VPS上安装BigTree CMS

使用其他系统?BigTree CMS 4.2是一种快速,轻量级,免费和开源的企业级内容管理系统(CMS),具有广泛的功能。

如何在CentOS 7上设置vsFTPd

如何在CentOS 7上设置vsFTPd

FTP是用于通过Internet传输文件的有用协议,本指南将向您展示如何设置vsFTPd(非常安全的文件传输协议守护程序)o

在Debian / Ubuntu中使用Rsync设置文件镜像

在Debian / Ubuntu中使用Rsync设置文件镜像

简介如果您经营一个重要的网站,则最好将文件镜像到辅助服务器。如果您的主服务器有网络

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。

如何在Ubuntu 16.04上安装OpenSIPS控制面板

如何在Ubuntu 16.04上安装OpenSIPS控制面板

快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。

在Fedora 28上安装Akaunting

在Fedora 28上安装Akaunting

学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

诊断Minecraft服务器延迟和低TPS

诊断Minecraft服务器延迟和低TPS

了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息