如何在Debian 10上向Nginx添加Brotli Compression支持

如何在Debian 10上向Nginx添加Brotli Compression支持

Brotli是由Google开发的通用无损压缩算法,是Gzip,Zopfli和Deflate的替代产品,它结合了LZ77算法的现代变体,霍夫曼编码和2阶上下文建模以及压缩率来压缩数据与目前可用的最佳通用压缩方法相当。它的速度与放气相似,但压缩更紧密。

Brotli是根据MIT许可证开源的。

Nginx没有官方支持,但是谷歌开发了一个名为ngx_brotli的第三方模块,您可以利用该模块向Nginx添加支持。

本指南将向您展示如何在Debian 10系统上向Nginx Web服务器添加Brotli支持。

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

要求

  • Debian 10(破坏者)服务器
  • Nginx版本1.11.5或更高版本
  • 域名用 A/AAAA 记录建立
  • TLS证书

初始步骤

检查您的Debian版本:

lsb_release -ds
# Debian GNU/Linux 10 (buster)

设置时区:

sudo dpkg-reconfigure tzdata

更新您的操作系统软件包(软件)。这是必不可少的第一步,因为它可以确保您具有操作系统默认软件包的最新更新和安全修复程序:

sudo apt update && sudo apt upgrade -y

安装一些基本软件包,这些软件包是Debian操作系统的基本管理所必需的:

sudo apt install -y curl wget vim git unzip socat bash-completion apt-transport-https

步骤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.2

取得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/debian/ `lsb_release -sc` nginx ndeb-src https://nginx.org/packages/mainline/debian/ `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

检查Nginx版本:

sudo nginx -v
# nginx version: nginx/1.17.4

启用并启动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.17.4.tar.gz && tar zxvf nginx-1.17.4.tar.gz

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

去掉 nginx-1.17.4.tar.gz:

rm nginx-1.17.4.tar.gz

克隆 ngx_brotli 来自GitHub:

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

导航到Nginx源代码目录:

cd ~/nginx-1.17.4

下载所需的库:

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.com 并创建 index.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压缩正在起作用。

Nginx中的Brotli支持

内容编码

而已。您已在Debian 10系统上启用Brotli压缩。

链接

  • https://brotli.org/
  • https://github.com/google/brotli
  • https://github.com/google/ngx_brotli
  • https://zh.wikipedia.org/wiki/布罗特利

资讯来源:由0x资讯编译自HOWTOFORGE,版权归作者所有,未经许可,不得转载
你可能还喜欢