在Ubuntu 18.04上向Nginx添加Brotli支持

Brotli(br)是一种新的开源压缩算法,由Google开发,可以替代Gzip,Zopfli和Deflate。它在Internet工程任务组(IETF)中正式定义为RFC 7932。Google对Brotli的案例研究表明,压缩率比当前方法小26%,而且CPU使用率更低。

Nginx没有官方支持,但是有一个由Google开发的名为ngx_brotli的第三方模块,我们可以用来向Nginx添加支持。

本指南将向您展示如何在新的Ubuntu 18.04 LTS Vultr实例上向Nginx添加Brotli支持。

注意: 本指南将johndoe用作示例用户和example.com示例域。根据您的姓名替换它们。

要求

  • Ubuntu 18.04 LTS服务器
  • Nginx版本1.11.5或更高版本
  • 带有A/ AAAA记录的域名
  • TLS证书

在你开始之前

检查Ubuntu版本。

lsb_release -ds
# Ubuntu 18.04 LTS

创建一个non-root具有sudo访问权限的新用户帐户并切换到该帐户。

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe

注意用您的用户名替换johndoe

更新操作系统的软件。

sudo apt update && sudo apt upgrade -y

设置时区。

sudo dpkg-reconfigure tzdata

安装所需的构建工具和软件包。

sudo apt install -y build-essential git apt-transport-https socat

步骤1-安装Acme.sh并从Let's Encrypt获得TLS证书

Brotli要求您设置和使用HTTPS。在这一部分中,我们将从“加密”中获取受信任的证书。

下载并安装Acme.sh。

sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
cd ~
source ~/.bashrc

检查版本。

acme.sh --version
# v2.8.0

获得RSA和ECDSA证书example.com

# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength 2048

# ECDSA/ECC P-256
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength ec-256

运行上述命令后,您的证书和密钥将位于以下位置:

  • RSA: /etc/letsencrypt/example.com
  • ECC / ECDSA: /etc/letsencrypt/example.com_ecc

第2步–从官方Nginx存储库安装Nginx

从官方Nginx存储库下载并安装最新的主线Nginx。

wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s
printf "deb https://nginx.org/packages/mainline/ubuntu/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/ubuntu/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt

检查版本。

sudo nginx -v
# nginx version: nginx/1.15.2

启用并启动Nginx。

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

步骤3 –下载并编译Brotli源代码

安装Nginx之后,我们需要将Brotli模块(ngx_brotli)构建为动态Nginx模块。从Nginx版本1.11.5起,可以编译单个动态模块,而无需编译完整的Nginx软件。在接下来的几个步骤中,我们将动态构建Brotli模块,而无需编译完整的Nginx。

下载最新版本的主线Nginx源代码并解压缩。

wget https://nginx.org/download/nginx-1.15.2.tar.gz && tar zxvf nginx-1.15.2.tar.gz

注意Nginx软件包的版本号和Nginx源代码相匹配非常重要。如果从官方Nginx存储库安装了Nginx 1.15.2,则在这种情况下,必须下载相同版本的源代码 1.15.2。

删除nginx-1.15.2.tar.gz

rm nginx-1.15.2.tar.gz

ngx_brotli从GitHub 克隆。

git clone https://github.com/eustas/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~

导航到Nginx源代码目录。

cd ~/nginx-1.15.2

下载所需的库。

sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev

将其编译ngx_brotli为动态模块,并将其复制到Nginx模块的标准目录中/etc/nginx/modules

./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /etc/nginx/modules

列出文件,/etc/nginx/modules您将看到ngx_http_brotli_filter_module.songx_http_brotli_static_module.so

ls /etc/nginx/modules

644所有.so文件的权限设置为。

sudo chmod 644 /etc/nginx/modules/*.so

步骤4 –配置Nginx

我们准备在Nginx中配置Brotli支持。

运行sudo vim /etc/nginx/nginx.conf并在文件顶部添加以下两个指令以加载新的Brotli模块。

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

测试配置。

sudo nginx -t

为其创建文档根目录,example.comindex.html在其中创建一些内容。

sudo mkdir -p /var/www/example.com
sudo -s
echo "Hello from example.com" >> /var/www/example.com/index.html
exit

为创建虚拟主机example.com

sudo vim /etc/nginx/conf.d/example.com.conf

用以下配置填充它。

server {
  listen 80;
  server_name example.com; # Replace with your domain name
  return 301 https://$server_name$request_uri;
}

server {    
  listen 443 ssl http2;
  server_name example.com; # Replace with your domain name

  root /var/www/example.com; # Replace with your document root

  # RSA
  ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
  # ECDSA
  ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
  ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;

  brotli on;
  brotli_static on;
  brotli_types text/plain text/css text/javascript application/javascript text/xml application/xml image/svg+xml application/json;
}

测试配置。

sudo nginx -t

重新加载Nginx。

sudo systemctl reload nginx.service

在网络浏览器中访问您的网站,然后打开开发者工具的“网络”标签。您将Content-Encoding: br在响应标题中看到。这表明Brotli压缩正在起作用。

在Ubuntu 18.04上向Nginx添加Brotli支持

在Ubuntu 18.04上向Nginx添加Brotli支持

您已在Web服务器上启用Brotli压缩。



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 年人工智能對醫療保健的影響

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