GNU/Linux >> Linux の 問題 >  >> Debian

Debian10のNginxにBrotli圧縮サポートを追加する方法

Brotliは、Gzip、Zopfli、およびDeflateの代替としてGoogleによって開発された汎用のロスレス圧縮アルゴリズムであり、LZ77アルゴリズムの最新のバリアント、ハフマンコーディング、および2次コンテキストモデリングの組み合わせを使用してデータを圧縮します。現在利用可能な最良の汎用圧縮方法に匹敵します。速度はデフレートと似ていますが、より高密度の圧縮を提供します。

BrotliはMITライセンスの下でオープンソースです。

Nginxには公式のサポートはありませんが、Googleが開発したngx_brotliというサードパーティのモジュールがあり、これを利用してNginxにサポートを追加できます。

このガイドでは、Debian10システム上のNginxWebサーバーに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'sEncryptからTLS証明書を取得します

Brotliでは、HTTPSを設定して使用する必要があります。このパートでは、Let'sEncryptから信頼できる証明書を取得します。

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

example.com:のRSAおよびECDSA証明書を取得します

# 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 / ECCSA:/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ソフトウェアをコンパイルせずに個々の動的モジュールをコンパイルすることが可能です。次のいくつかの手順では、完全なNginxをコンパイルせずに、Brotliモジュールを動的としてビルドします。

メインラインのNginxソースコードの最新バージョンをダウンロードして抽出します:

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

注: NginxパッケージとNginxソースコードのバージョン番号が一致していることが非常に重要です。公式のNginxリポジトリからNginx1.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.soが表示されます およびngx_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を実行します ファイルの先頭に次の2つのディレクティブを追加して、新しい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

Webブラウザでサイトにアクセスし、開発者ツールの[ネットワーク]タブを開きます。 Content-Encoding: brが表示されます 応答ヘッダー内。これは、Brotli圧縮が機能していることを示しています。

それでおしまい。 Debian10システムでBrotli圧縮を有効にしました。

リンク
  • https://brotli.org/
  • https://github.com/google/brotli
  • https://github.com/google/ngx_brotli
  • https://en.wikipedia.org/wiki/Brotli

Debian
  1. Debian9でソースからBrotli圧縮ツールをコンパイルする方法

  2. Debian 8にNginxをインストールする方法(Jessie)

  3. Debian 9にNginxをインストールする方法(ストレッチ)

  1. Debian9にNginxをインストールする方法

  2. Debian9でHTTP/2サポートを使用してNginxを設定する方法

  3. Debian 10 バスターに LEMP スタックをインストールする方法

  1. Debian9でユーザーを追加および削除する方法

  2. DebianでSudoersにユーザーを追加する方法

  3. Debian9にNginxを使用してInvoicePlaneをインストールする方法