在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

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 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。