데비안 10의 소스에서 Nginx를 컴파일하는 방법

소개

Nginx 는 높은 동시성을 염두에두고 설계된 오픈 소스 웹 서버 소프트웨어로, HTTP / HTTPS 서버, 리버스 프록시 서버, 메일 프록시 서버, 소프트웨어로드 밸런서, TLS 터미네이터, 캐싱 서버 등으로 사용할 수 있습니다!

매우 모듈화 된 소프트웨어입니다. GZIP 또는 SSL과 같은 소프트웨어의 "내장"부분 중 일부조차도 실제로 빌드 시간 동안 활성화 및 비활성화 할 수있는 모듈로 생성됩니다.

커뮤니티에 의해 작성된 핵심 (네이티브) 모듈과 타사 (외부) 모듈 이 있습니다. 현재 우리가 활용할 수있는 백여 개 이상의 타사 모듈이 있습니다.

C로 작성된이 소프트웨어는 빠르고 가벼운 소프트웨어입니다.

소스 코드에서 Nginx를 설치하는 것은 비교적 쉽습니다. 최신 버전의 Nginx 소스 코드를 다운로드하여 구성, 빌드 및 설치하십시오.

메인 라인을 다운로드할지 안정적인 버전을 다운로드할지 선택해야하지만 빌드는 동일합니다.

이 안내서에서는 데비안 10 (버스터)에서 메인 라인 버전의 Nginx를 컴파일합니다. Nginx의 오픈 소스 버전에서 사용 가능한 모든 모듈을 사용합니다.

소스에서 Nginx를 컴파일하고 설치하는 이유

준비된 패키지를 사용할 수있을 때 소스에서 Nginx를 컴파일하는 이유를 물을 것입니다. 특정 소프트웨어를 직접 컴파일해야하는 이유는 다음과 같습니다.

  • 구성 옵션을 제어합니다.
  • 원하는 곳에 소프트웨어를 설치합니다. 동일한 소프트웨어의 여러 버전을 설치할 수도 있습니다.
  • 설치 한 버전을 제어합니다. 배포판이 모든 패키지의 최신 버전, 특히 소프트웨어 패키지에 대한 애드온을 항상 최신 상태로 유지하는 것은 아닙니다.
  • 소프트웨어 작동 방식을 더 잘 이해합니다.

안정적인 대 메인 라인 버전

Nginx 오픈 소스는 두 가지 버전으로 제공됩니다.

  • 메인 라인 – 최신 기능 및 버그 수정이 포함되어 있으며 항상 최신 상태입니다. 신뢰할 수 있지만 일부 실험 모듈을 포함 할 수도 있으며 몇 가지 새로운 버그가있을 수도 있습니다.
  • 안정적 – 모든 최신 기능을 포함하지는 않지만 항상 기본 버전으로 백 포트되는 중요한 버그 수정이 있습니다.

핵심 모듈 및 타사 모듈

Nginx에는 활용할 수있는 두 가지 유형의 모듈이 있습니다 : 코어 모듈과 타사 모듈.

핵심 Nginx 개발자는 핵심 모듈을 구축하며 소프트웨어 자체의 일부입니다.

커뮤니티는 써드 파티 모듈을 빌드하고이를 사용하여 기능을 확장 할 수 있습니다. 유용한 타사 모듈이 많이 있습니다.

정적 모듈과 동적 모듈

정적 모듈은 첫 번째 버전부터 Nginx에 존재합니다. 동적 모듈은 2016 년 2 월 Nginx 1.9.11+에서 도입되었습니다.

정적 모듈을 사용하면 Nginx 바이너리를 구성하는 모듈 세트가 ./configure스크립트에 의해 컴파일시 고정됩니다 . 정적 모듈 사용 --with-foo_bar_module또는 --add-module=PATH구문.

=dynamic예를 들어 코어 (표준) 모듈을 동적으로 컴파일하기 위해 추가 --with-http_image_filter_module=dynamic합니다.

타사 모듈을 동적으로 컴파일하려면 --add-dynamic-module=/path/to/module구문을 사용한 load_module다음 nginx.conf파일 의 글로벌 컨텍스트에서 지시문 을 사용하여로드합니다 .

소스에서 Nginx를 빌드하기위한 요구 사항

다른 일부 UNIX / Linux 소프트웨어와 비교할 때 Nginx는 매우 가벼우 며 많은 라이브러리 종속성이 없습니다. 기본 빌드 구성은 설치할 3 개의 라이브러리 (OpenSSL / LibreSSL / BoringSSL, Zlib 및 PCRE)에만 의존합니다.

참고 : Nginx는 OpenSSL 대신 LibreSSL 및 BoringSSL 암호화 라이브러리에 대해서도 컴파일 할 수 있습니다.

시작하기 전에

데비안 버전을 확인하십시오.

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

sudo액세스 권한이 있는 일반 사용자를 작성하십시오 .

adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe

참고 : 대체 johndoe사용자 이름과 함께 .

새로운 사용자로 전환하십시오.

su - johndoe

시간대를 설정하십시오.

sudo dpkg-reconfigure tzdata

운영 체제 소프트웨어를 업데이트하십시오.

sudo apt update && sudo apt upgrade -y

필요한 패키지를 설치하십시오.

sudo apt install -y software-properties-common ufw

소스에서 Nginx 빌드

Nginx는 C로 작성된 프로그램이므로 먼저 컴파일러 도구를 설치해야합니다. 설치 build-essential, gittree.

sudo apt install -y build-essential git tree

최신 메인 라인 버전의 Nginx 소스 코드를 다운로드하고 소스 코드 아카이브를 압축 해제하십시오. Nginx 소스 코드는 대부분의 Unix 및 Linux 소프트웨어와 같이 압축 된 아카이브로 배포됩니다.

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

필수 Nginx 의존성 소스 코드를 다운로드하여 추출하십시오.

# PCRE version 8.43
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz && tar xzvf pcre-8.43.tar.gz

# zlib version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz

# OpenSSL version 1.1.1c
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.tar.gz

선택적 Nginx 종속성을 설치하십시오.

sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev

모든 .tar.gz파일을 정리 하십시오. 더 이상 필요하지 않습니다.

rm -rf *.tar.gz

Nginx 소스 디렉토리를 입력하십시오.

cd ~/nginx-1.17.2

Nginx 소스 코드를 구성하는 디렉토리 및 파일을 제대로 측정하려면를 사용하십시오 tree.

tree -L 2 .

매뉴얼 페이지를에 복사하십시오 /usr/share/man/man8/.

sudo cp ~/nginx-1.17.2/man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls /usr/share/man/man8/ | grep nginx.8.gz
# Check that man page for Nginx is working
man nginx

도움이 필요하면 다음을 실행하여 최신 Nginx 컴파일 타임 옵션의 전체 목록을 볼 수 있습니다.

./configure --help
# To see want core modules can be built as dynamic run:
./configure --help | grep -F =dynamic

Nginx를 설정, 컴파일 및 설치하십시오.

./configure --prefix=/etc/nginx \
            --sbin-path=/usr/sbin/nginx \
            --modules-path=/usr/lib/nginx/modules \
            --conf-path=/etc/nginx/nginx.conf \
            --error-log-path=/var/log/nginx/error.log \
            --pid-path=/var/run/nginx.pid \
            --lock-path=/var/run/nginx.lock \
            --user=nginx \
            --group=nginx \
            --build=Debian \
            --builddir=nginx-1.17.2 \
            --with-select_module \
            --with-poll_module \
            --with-threads \
            --with-file-aio \
            --with-http_ssl_module \
            --with-http_v2_module \
            --with-http_realip_module \
            --with-http_addition_module \
            --with-http_xslt_module=dynamic \
            --with-http_image_filter_module=dynamic \
            --with-http_geoip_module=dynamic \
            --with-http_sub_module \
            --with-http_dav_module \
            --with-http_flv_module \
            --with-http_mp4_module \
            --with-http_gunzip_module \
            --with-http_gzip_static_module \
            --with-http_auth_request_module \
            --with-http_random_index_module \
            --with-http_secure_link_module \
            --with-http_degradation_module \
            --with-http_slice_module \
            --with-http_stub_status_module \
            --with-http_perl_module=dynamic \
            --with-perl_modules_path=/usr/share/perl/5.26.1 \
            --with-perl=/usr/bin/perl \
            --http-log-path=/var/log/nginx/access.log \
            --http-client-body-temp-path=/var/cache/nginx/client_temp \
            --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
            --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
            --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
            --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
            --with-mail=dynamic \
            --with-mail_ssl_module \
            --with-stream=dynamic \
            --with-stream_ssl_module \
            --with-stream_realip_module \
            --with-stream_geoip_module=dynamic \
            --with-stream_ssl_preread_module \
            --with-compat \
            --with-pcre=../pcre-8.43 \
            --with-pcre-jit \
            --with-zlib=../zlib-1.2.11 \
            --with-openssl=../openssl-1.1.1c \
            --with-openssl-opt=no-nextprotoneg \
            --with-debug

make
sudo make install

편집 후 홈 ( ~) 디렉토리로 이동하십시오 .

cd ~

심볼릭 링크 /usr/lib/nginx/modules/etc/nginx/modules. 이것은 Nginx 모듈의 표준 장소입니다.

sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules

Nginx 버전, 컴파일러 버전을 인쇄하고 스크립트 매개 변수를 구성하십시오.

sudo nginx -V

# nginx version: nginx/1.17.2 (Debian)
# built by gcc 8.3.0 (Debian 8.3.0-6)
# built with OpenSSL 1.1.1c  28 May 2019
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules . . .
# . . .
# . . .

Nginx 시스템 그룹 및 사용자를 작성하십시오.

sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx
# Check that user and group are created
sudo tail -n 1 /etc/passwd /etc/group /etc/shadow

Nginx 구문과 잠재적 오류를 확인하십시오.

sudo nginx -t
# Will throw this error -> nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (2: No such file or directory)

# Create NGINX cache directories and set proper permissions
sudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*

# Re-check syntax and potential errors. 
sudo nginx -t

Nginx 시스템 단위 파일을 작성하십시오.

sudo vim /etc/systemd/system/nginx.service

/etc/systemd/system/nginx.service다음 내용으로 파일을 채우십시오 .

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

부팅시 Nginx를 시작하고 Nginx를 즉시 시작하십시오.

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

재부팅 후 Nginx가 자동으로 시작되는지 확인하십시오.

sudo systemctl is-enabled nginx.service
# enabled

상태를 확인하십시오.

sudo systemctl status nginx.service

참고 : 웹 브라우저에서 사이트의 도메인 또는 IP 주소로 이동하여 Nginx가 실행 중인지 확인할 수 있습니다. Nginx 시작 페이지가 나타납니다. 이는 Nginx가 VPS에서 가동되고 있음을 나타내는 지표입니다.

UFW Nginx 애플리케이션 프로파일을 작성하십시오.

sudo vim /etc/ufw/applications.d/nginx

다음 내용을 /etc/ufw/applications.d/nginx파일에 복사 / 붙여 넣기 하십시오.

[Nginx HTTP]
title=Web Server (Nginx, HTTP)
description=Small, but very powerful and efficient web server
ports=80/tcp

[Nginx HTTPS]
title=Web Server (Nginx, HTTPS)
description=Small, but very powerful and efficient web server
ports=443/tcp

[Nginx Full]
title=Web Server (Nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server
ports=80,443/tcp

UFW 애플리케이션 프로파일이 작성되고 인식되는지 확인하십시오.

sudo ufw app list

# Available applications:
  # Nginx Full
  # Nginx HTTP
  # Nginx HTTPS
  # OpenSSH

Nginx는 기본적으로에 백업 .default파일을 생성 합니다 /etc/nginx. 디렉토리 .default에서 파일을 제거하십시오 /etc/nginx.

sudo rm /etc/nginx/*.default

Vim 편집 기용 Nginx 구성의 구문 강조 표시를에 삽입하십시오 ~/.vim.

# For regular non-root user
mkdir ~/.vim/
cp -r ~/nginx-1.17.2/contrib/vim/* ~/.vim/
# For root user
sudo mkdir /root/.vim/
sudo cp -r ~/nginx-1.17.2/contrib/vim/* /root/.vim/

참고 : 위의 단계를 수행하면 Vim 편집기에서 Nginx 구성 파일을 편집 할 때 구문 강조 표시가 나타납니다.

conf.dsnippets, sites-availablesites-enabled디렉토리를 만듭니다 /etc/nginx.

sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}

Nginx 로그 파일의 권한 및 그룹 소유권을 변경하십시오.

sudo chmod 640 /var/log/nginx/*
sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log

Nginx에 대한 로그 회전 구성을 작성하십시오.

sudo vim /etc/logrotate.d/nginx

다음 텍스트로 파일을 채우고 저장하고 종료하십시오.

/var/log/nginx/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 nginx adm
    sharedscripts
    postrotate
            if [ -f /var/run/nginx.pid ]; then
                    kill -USR1 `cat /var/run/nginx.pid`
            fi
    endscript
}

홈 디렉토리에서 다운로드 한 파일을 모두 제거하십시오.

cd ~
rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/

요약

그게 다야. 이제 최신 버전의 Nginx가 설치되었습니다. OpenSSL과 같은 일부 중요한 라이브러리에 대해 정적으로 컴파일됩니다. 종종 시스템 제공 버전의 OpenSSL이 오래되었습니다. 최신 버전의 OpenSSL과 함께 설치하는이 방법을 사용하면 OpenSSL에서 CHACHA20_POLY1305사용 가능한 TLS 1.3과 같은 최신 암호 및 프로토콜 을 활용할 수 있습니다 1.1.1. 또한, 자신의 바이너리를 컴파일함으로써 Nginx가 제공 할 기능을 맞춤화 할 수 있으며, 이는 사전 빌드 된 바이너리를 설치하는 것보다 훨씬 유연합니다.

댓글 남기기

NTLite를 사용하여 업데이트로 Windows 사용자 지정 ISO를 만드는 방법

NTLite를 사용하여 업데이트로 Windows 사용자 지정 ISO를 만드는 방법

NTLite를 사용하여 Vultr 시스템과 호환되는 Windows 사용자 지정 ISO를 만드는 방법을 단계별로 설명합니다. 최신 드라이버와 업데이트 통합을 포함한 완벽 가이드.

Vultr에서 BGP 구성

Vultr에서 BGP 구성

Vultr BGP 설정을 위한 단계별 튜토리얼. ASN 할당부터 IP 라우팅 구성, BIRD 데몬 설정, FreeBSD 특이사항 및 실전 문제 해결 팁 7가지 포함한 최종 가이드

WsgiDAV를 사용하여 Debian 10에 WebDAV 배포

WsgiDAV를 사용하여 Debian 10에 WebDAV 배포

WebDAV (Web Distributed Authoring and Versioning)를 이용한 원격 파일 작성을 위한 프레임워크로, WsgiDAV 설치 및 구성 방법을 안내합니다.

데비안 7에 Mailcow 설치

데비안 7에 Mailcow 설치

Mailcow는 DoveCot, Postfix 및 기타 여러 오픈 소스 패키지를 기반으로 하는 경량 메일 서버입니다. 데비안에서 Mailcow 설치 방법을 안내합니다.

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

랜섬웨어 공격이 증가하고 있지만 AI가 최신 컴퓨터 바이러스를 처리하는 데 도움이 될 수 있습니까? AI가 답인가? AI boone 또는 bane인지 여기에서 읽으십시오.

ReactOS: 이것이 Windows의 미래입니까?

ReactOS: 이것이 Windows의 미래입니까?

오픈 소스이자 무료 운영 체제인 ReactOS가 최신 버전과 함께 제공됩니다. 현대 Windows 사용자의 요구 사항을 충족하고 Microsoft를 무너뜨릴 수 있습니까? 이 구식이지만 더 새로운 OS 환경에 대해 자세히 알아보겠습니다.

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

Whatsapp은 마침내 Mac 및 Windows 사용자용 데스크톱 앱을 출시했습니다. 이제 Windows 또는 Mac에서 Whatsapp에 쉽게 액세스할 수 있습니다. Windows 8 이상 및 Mac OS 10.9 이상에서 사용 가능

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

인공 지능이 소규모 회사에서 어떻게 인기를 얻고 있으며 어떻게 인공 지능이 성장할 가능성을 높이고 경쟁자가 우위를 점할 수 있는지 알아보려면 이 기사를 읽으십시오.

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

최근 Apple은 문제를 해결하기 위해 macOS Catalina 10.15.4 추가 업데이트를 출시했지만 이 업데이트로 인해 Mac 컴퓨터의 브릭킹으로 이어지는 더 많은 문제가 발생하는 것 같습니다. 자세히 알아보려면 이 기사를 읽어보세요.

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구