CentOS 8의 Nginx에서 Brotli 압축을 활성화하는 방법
이 페이지에서
- 요구 사항\n
- 초기 단계
- 1단계 - Acme.sh를 설치하고 Lets Encrypt에서 TLS 인증서 가져오기\n
- 2단계 – 공식 Nginx 저장소에서 Nginx 설치
- 3단계 – Brotli 소스 코드 다운로드 및 컴파일
- 4단계 – Nginx 구성
- 링크
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.so
및 ngx_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