Cum să compilați Nginx din sursă pe Debian 10

Introducere

Nginx este un software de server web open-source proiectat cu o mare concordanță în minte, care poate fi utilizat ca server HTTP / HTTPS, server proxy invers, server proxy mail, echilibrator de software, terminator TLS, server de memorie în cache și multe altele!

Este o piesă software foarte modulară. Chiar și unele părți aparent „încorporate” ale software-ului, cum ar fi GZIP sau SSL, sunt de fapt create ca module care pot fi activate și dezactivate în timpul perioadei de construire.

Are module core (native) și module terțe (externe) create de comunitate. Momentan, există peste o sută de module terțe pe care le putem utiliza.

Scris în C, este o piesă software rapidă și ușoară.

Instalarea Nginx din codul sursă este relativ ușoară - descărcați cea mai recentă versiune a codului sursă Nginx, configurați, construiți și instalați-l.

Va trebui să alegeți dacă descărcați linia principală sau o versiune stabilă, dar construirea acestora este aceeași.

În acest ghid, vom compila o versiune principală a Nginx pe Debian 10 (buster). Vom folosi toate modulele disponibile în versiunea open source a Nginx.

De ce compilați și instalați Nginx de la sursă

Probabil vă întrebați de ce ar compila Nginx dintr-o sursă atunci când puteți utiliza pachete pregătite. Iată câteva motive pentru care poate doriți să compilați software special:

  • Pentru a controla opțiunile de configurare.
  • Pentru a instala software-ul oriunde vă place. Puteți instala chiar și mai multe versiuni diferite ale aceluiași software.
  • Pentru a controla versiunea pe care o instalați. Distribuțiile nu sunt mereu la curent cu cele mai recente versiuni ale tuturor pachetelor, în special cu suplimentele la pachetele software.
  • Pentru a înțelege mai bine cum funcționează software-ul.

Versiune stabilă versiune principală

Nginx Open Source este disponibil în două versiuni:

  • Mainline - Include cele mai recente caracteristici și remedieri de erori și este mereu actualizat. Este de încredere, dar poate include unele module experimentale și poate avea și un număr de bug-uri noi.
  • Stabil - Nu include toate cele mai recente caracteristici, dar are corecții de erori critice, care sunt întotdeauna backportate la versiunea principală.

Module de bază față de module terțe

Nginx are două tipuri de module pe care le puteți utiliza: module de bază și module terțe.

Dezvoltatorii Nginx de bază construiesc module de bază și fac parte din software-ul în sine.

Comunitatea creează module terțe și le puteți utiliza pentru a extinde funcționalitatea. Există o mulțime de module utile pentru terți.

Module statice vs. module dinamice

Module statice există în Nginx încă de la prima versiune. Modulele dinamice au fost introduse cu Nginx 1.9.11+ în februarie 2016.

Cu modulele statice, un set de module care constituie un binar Nginx este fixat în timpul compilării de ./configurescript. Utilizarea modulelor statice --with-foo_bar_modulesau --add-module=PATHsintaxa.

Pentru a compila un modul core (standard) la fel de dinamic adăugăm =dynamic, de exemplu --with-http_image_filter_module=dynamic.

Pentru a compila un modul terț ca dinamic, folosim --add-dynamic-module=/path/to/modulesintaxa, apoi le încărcăm folosind load_moduledirectiva în contextul global al nginx.conffișierului.

Cerințe pentru construirea Nginx de la sursă

În comparație cu un alt software UNIX / Linux, Nginx este destul de ușor și nu are multe dependențe de bibliotecă. Configurația implicită de compilare depinde de doar 3 biblioteci care trebuie instalate: OpenSSL / LibreSSL / BoringSSL, Zlib și PCRE.

NOTĂ : Nginx poate fi, de asemenea, compilat cu LibreSSL și BoringSSL criptografie în loc de OpenSSL.

Înainte de a începe

Verificați versiunea Debian.

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

Creați un utilizator obișnuit cu sudoacces.

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

NOTĂ : Înlocuiți johndoecu numele de utilizator .

Comutați la un utilizator nou.

su - johndoe

Setați fusul orar.

sudo dpkg-reconfigure tzdata

Actualizați software-ul sistemului dvs. de operare.

sudo apt update && sudo apt upgrade -y

Instalați pachetele necesare.

sudo apt install -y software-properties-common ufw

Construiți Nginx de la sursă

Nginx este un program scris în C, așa că mai întâi va trebui să instalați un instrument de compilare. Instalați build-essential, gitși tree.

sudo apt install -y build-essential git tree

Descărcați cea mai recentă versiune principală a codului sursă Nginx și despachetați arhiva codului sursă. Codul sursă Nginx este distribuit ca arhivă comprimată, ca majoritatea software-ului Unix și Linux.

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

Descărcați codul sursă al dependențelor Nginx obligatorii și extrageți-l.

# 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

Instalați dependențe opționale Nginx.

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

Curățați toate .tar.gzfișierele. Nu mai avem nevoie de ele.

rm -rf *.tar.gz

Introduceți directorul sursă Nginx.

cd ~/nginx-1.17.2

Pentru o listă bună a directorilor și fișierelor care compun codul sursă Nginx tree.

tree -L 2 .

Copiați pagina manuală în /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

Pentru ajutor, puteți vedea o listă completă de opțiuni actualizate pentru compilare Nginx, executând următoarele.

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

Configurați, compilați și instalați 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

După compilare, navigați la ~directorul dvs. de acasă ( ).

cd ~

Faceți legătura de legătură /usr/lib/nginx/modulescu /etc/nginx/modules. Acesta este un loc standard pentru modulele Nginx.

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

Tipăriți versiunea Nginx, versiunea compilatorului și configurați parametrii scriptului.

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 . . .
# . . .
# . . .

Creați un grup de sistem Nginx și un utilizator.

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

Verificați sintaxa Nginx și erorile potențiale.

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

Creați un fișier de unitate de sistem Nginx.

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

Populați /etc/systemd/system/nginx.servicefișierul cu următorul conținut.

[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

Activați Nginx pentru a porni la pornire și porniți Nginx imediat.

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

Verificați dacă Nginx va iniția automat după repornire.

sudo systemctl is-enabled nginx.service
# enabled

Verificați starea.

sudo systemctl status nginx.service

NOTĂ : Puteți verifica dacă Nginx rulează accesând domeniul sau adresa IP a site-ului dvs. într-un browser web. Veți vedea pagina de bun venit Nginx. Acesta este un indicator că Nginx funcționează pe VPS.

Creați un profil de aplicație UFW Nginx.

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

Copiați / inserați următorul conținut în /etc/ufw/applications.d/nginxfișier.

[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

Validați că profilurile de aplicații UFW sunt create și recunoscute.

sudo ufw app list

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

În mod implicit, Nginx generează .defaultfișiere de rezervă în /etc/nginx. Ștergeți .defaultfișierele din /etc/nginxdirector.

sudo rm /etc/nginx/*.default

Plasați evidențierea de sintaxă a configurației Nginx pentru editorul Vim ~/.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/

NOTĂ : Făcând pasul de mai sus, veți obține o sintaxă frumoasă evidențiată la editarea fișierelor de configurare Nginx în editorul Vim.

Crearea conf.d, snippets, sites-availableși sites-enableddirectoare în /etc/nginx.

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

Modificați permisiunile și proprietatea de grup a fișierelor de jurnal Nginx.

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

Creați o configurație de rotație a jurnalului pentru Nginx.

sudo vim /etc/logrotate.d/nginx

Populați fișierul cu următorul text, apoi salvați și ieșiți.

/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
}

Eliminați toate fișierele descărcate din directorul principal.

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

rezumat

Asta e. Acum, aveți instalată cea mai recentă versiune de Nginx. Este compilat static cu unele biblioteci importante, cum ar fi OpenSSL. Adesea, versiunea OpenSSL furnizată de sistem este depășită. Utilizând această metodă de instalare cu o versiune mai nouă a OpenSSL, puteți profita de cifre moderne precum CHACHA20_POLY1305și protocoale precum TLS 1.3, care sunt disponibile în OpenSSL 1.1.1. Mai mult, compilând propriul dvs. binar, puteți adapta ce funcționalitate vă va oferi Nginx, care este mult mai flexibil decât instalarea unui binar pre-construit.

Lasă un comentariu

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Citiți blogul pentru a cunoaște diferitele straturi din Arhitectura Big Data și funcționalitățile acestora în cel mai simplu mod.

6 lucruri extrem de nebunești despre Nintendo Switch

6 lucruri extrem de nebunești despre Nintendo Switch

Mulți dintre voi cunoașteți Switch care va fi lansat în martie 2017 și noile sale funcții. Pentru cei care nu știu, am pregătit o listă de funcții care fac din „Switch” un „gadget obligatoriu”.

Promisiuni tehnologice care sunt încă nelivrate

Promisiuni tehnologice care sunt încă nelivrate

Aștepți ca giganții tehnologiei să-și îndeplinească promisiunile? vezi ce a ramas nelivrat.

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Citiți asta pentru a afla cum devine populară inteligența artificială în rândul companiilor la scară mică și cum crește probabilitățile de a le face să crească și de a le oferi concurenților avantaje.

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Pe măsură ce Știința Evoluează într-un ritm rapid, preluând multe dintre eforturile noastre, crește și riscurile de a ne supune unei Singularități inexplicabile. Citiți, ce ar putea însemna singularitatea pentru noi.

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA a devenit destul de dificil de rezolvat pentru utilizatori în ultimii ani. Va fi capabil să rămână eficient în detectarea spam-ului și a botului în viitor?

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Ce este telemedicina, îngrijirea medicală la distanță și impactul acesteia asupra generației viitoare? Este un loc bun sau nu în situația de pandemie? Citiți blogul pentru a găsi o vedere!

Te-ai întrebat vreodată cum câștigă hackerii bani?

Te-ai întrebat vreodată cum câștigă hackerii bani?

Poate ați auzit că hackerii câștigă mulți bani, dar v-ați întrebat vreodată cum câștigă acești bani? sa discutam.

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Recent, Apple a lansat macOS Catalina 10.15.4 o actualizare suplimentară pentru a remedia problemele, dar se pare că actualizarea provoacă mai multe probleme care duc la blocarea mașinilor Mac. Citiți acest articol pentru a afla mai multe