웹사이트 검색

CentOS 8의 Nginx에서 Brotli 압축을 활성화하는 방법


이 페이지에서

  1. 요구 사항\n
  2. 초기 단계
  3. 1단계 - Acme.sh를 설치하고 Lets Encrypt에서 TLS 인증서 가져오기\n
  4. 2단계 – 공식 Nginx 저장소에서 Nginx 설치
  5. 3단계 – Brotli 소스 코드 다운로드 및 컴파일
  6. 4단계 – Nginx 구성
  7. 링크

Brotli는 Google에서 Gzip, Zopfli 및 Deflate의 대안으로 개발한 범용 무손실 압축 알고리즘으로, LZ77 알고리즘의 최신 변형, Huffman 코딩 및 2nd 조합을 사용하여 데이터를 압축합니다. 현재 사용 가능한 최상의 범용 압축 방법에 필적하는 압축 비율로 주문 컨텍스트 모델링. deflate와 속도는 비슷하지만 더 조밀한 압축을 제공합니다.

Brotli는 MIT 라이센스에 따라 오픈 소스입니다.

Nginx는 공식 지원이 없지만 Nginx에 지원을 추가하는 데 활용할 수 있는 ngx_brotli라는 Google에서 개발한 타사 모듈이 있습니다.

이 튜토리얼에서는 CentOS 8 서버의 Nginx 웹 서버에 Brotli 지원을 추가하는 방법을 보여줍니다.

참고: 이 가이드에서는 "johndoe"를 예시 사용자로 사용하고 "example.com\\'을 예시 도메인으로 사용합니다. 귀하의 이름에 따라 교체하십시오.

요구 사항

  • CentOS 8 서버
  • 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를 설치하고 Lets Encrypt에서 TLS 인증서 받기

Brotli에서는 HTTPS를 설정하고 사용해야 합니다. 이 부분에서는 Lets Encrypt에서 신뢰할 수 있는 인증서를 얻습니다.

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
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 --ocsp-must-staple --keylength ec-256

위의 명령을 실행하면 인증서와 키가 다음 위치에 있습니다.

  • RSA: /etc/letsencrypt/example.com
  • ECC/ECDSA: <코드>/etc/letsencrypt/example.com_ecc

2단계 – 공식 Nginx 저장소에서 Nginx 설치

공식 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

3단계 – Brotli 소스 코드 다운로드 및 컴파일

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 저장소에서 Nginx 1.17.8을 설치한 경우 동일한 버전의 소스 코드(이 경우 1.17.8)를 다운로드해야 합니다.

nginx-1.17.8.tar.gz 제거:

rm nginx-1.17.8.tar.gz

GitHub에서 ngx_brotli 복제:

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.songx_http_brotli_static_module.so:가 표시됩니다.

ls /etc/nginx/modules

모든 .so 파일에 대해 권한을 644로 설정합니다.

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 압축이 작동하고 있다는 표시입니다.

그게 다야. CentOS 8 시스템에서 Brotli 압축을 사용하도록 설정했습니다.

연결

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