Brotliは、Gzip、Zopfli、およびDeflateの代替としてGoogleによって開発された汎用のロスレス圧縮アルゴリズムであり、LZ77アルゴリズムの最新のバリアント、ハフマンコーディング、および2次コンテキストモデリングの組み合わせを使用してデータを圧縮します。現在利用可能な最良の汎用圧縮方法に匹敵します。速度はデフレートと似ていますが、より高密度の圧縮を提供します。
BrotliはMITライセンスの下でオープンソースです。
Nginxには公式のサポートはありませんが、Googleが開発したngx_brotliというサードパーティのモジュールがあり、これを利用してNginxにサポートを追加できます。
このチュートリアルでは、CentOS8サーバー上のNginxウェブサーバーにBrotliサポートを追加する方法を説明します。
注: このガイドでは、「johndoe"
サンプルユーザーとして、「 example.com
「ドメインの例として。名前に応じて置き換えてください。
- CentOS8サーバー
- Nginxバージョン1.11.5以降
-
A
のドメイン名 /AAAA
設定されたレコード - TLS証明書
CentOSのバージョンを確認してください:
cat /etc/centos-release
# CentOS Linux release 8.0.1905 (Core)
タイムゾーンを設定します:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
オペレーティングシステムパッケージ(ソフトウェア)を更新します。これは、オペレーティングシステムのデフォルトのソフトウェアパッケージの最新の更新とセキュリティ修正を確実に行うための重要な最初のステップです。
sudo dnf update -y
CentOSオペレーティングシステムの基本的な管理に必要ないくつかの重要なパッケージをインストールします。
sudo dnf install -y curl wget vim git unzip socat bash-completion epel-release socat && sudo dnf groupinstall "Development Tools"
ステップ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.6
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
公式のNginxリポジトリから最新のメインラインNginxをダウンロードしてインストールする必要があります :
前提条件をインストールします:
sudo yum install yum-utils
yumリポジトリーをセットアップするには、/etc/yum.repos.d/nginx.repo
という名前のファイルを作成します。 次の内容で:
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
デフォルトでは、安定したnginxパッケージのリポジトリが使用されます。メインラインのnginxパッケージを使用する必要があります。メインラインソースを使用するには、次のコマンドを実行します。
sudo yum-config-manager --enable nginx-mainline
nginxをインストールするには、次のコマンドを実行します:
sudo yum install -y nginx
Nginxのバージョンを確認してください:
sudo nginx -v
# nginx version: nginx/1.17.8
Nginxサービスを有効にして開始します:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Nginxをインストールした後、Brotliモジュール(ngx_brotli
)をビルドする必要があります )動的Nginxモジュールとして。 Nginxバージョン1.11.5から、完全なNginxソフトウェアをコンパイルせずに個々の動的モジュールをコンパイルすることが可能です。次のいくつかの手順では、完全なNginxをコンパイルせずに、Brotliモジュールを動的としてビルドします。
メインラインのNginxソースコードの最新バージョンをダウンロードして抽出します:
wget https://nginx.org/download/nginx-1.17.8.tar.gz && tar zxvf nginx-1.17.8.tar.gz
注: NginxパッケージとNginxソースコードのバージョン番号が一致していることが非常に重要です。公式のNginxリポジトリからNginx1.17.8をインストールした場合は、同じバージョンのソースコードをダウンロードする必要があります 、この場合は1.17.8。
nginx-1.17.8.tar.gz:
を削除します
rm nginx-1.17.8.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.8
必要なライブラリをダウンロードします:
sudo dnf install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
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
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圧縮が機能していることを示しています。
それでおしまい。 CentOS8システムでBrotli圧縮を有効にしました。
- https://brotli.org/
- https://github.com/google/brotli
- https://github.com/google/ngx_brotli
- https://en.wikipedia.org/wiki/Brotli