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.



Leave a Comment

Configurare partajare NFS pe Debian

Configurare partajare NFS pe Debian

NFS este un sistem de fișiere bazat pe rețea care permite computerelor să acceseze fișiere într-o rețea de calculatoare. Acest ghid explică modul în care puteți expune folderele peste NF

Utilizarea vizualizărilor MySQL pe Debian 7

Utilizarea vizualizărilor MySQL pe Debian 7

Introducere MySQL are o caracteristică excelentă cunoscută sub numele de vizualizări. Vizualizările sunt interogări stocate. Gândiți-vă la ele ca la un alias pentru o întrebare altfel lungă. În acest ghid,

Cum se instalează Thelia 2.3 pe Debian 9

Cum se instalează Thelia 2.3 pe Debian 9

Folosind un sistem diferit? Thelia este un instrument open source pentru crearea de site-uri web pentru e-business și gestionarea conținutului online scris în PHP. Codul sursă Thelia i

Configurarea unui chroot pe Debian

Configurarea unui chroot pe Debian

Acest articol vă va învăța cum să configurați o închisoare chroot pe Debian. Presupun că utilizați Debian 7.x. Dacă executați Debian 6 sau 8, acest lucru poate funcționa, bine

Cum se instalează PiVPN pe Debian

Cum se instalează PiVPN pe Debian

Introducere Un mod ușor de a configura un server VPN pe Debian este cu PiVPN. PiVPN este un instalator și un pachet pentru OpenVPN. Creează comenzi simple pentru tine

Instalați Nginx, Wordpress și permiteți criptarea în minute cu EasyEngine pe Debian 8 sau Ubuntu 16.04

Instalați Nginx, Wordpress și permiteți criptarea în minute cu EasyEngine pe Debian 8 sau Ubuntu 16.04

EasyEngine (ee) este un instrument Python care vă permite să gestionați ușor și automat site-urile Wordpress de pe Nginx. Folosind EasyEngine, nu va trebui să dați

Cum se instalează BlogoText CMS pe un VPS Debian 9 LAMP

Cum se instalează BlogoText CMS pe un VPS Debian 9 LAMP

Folosind un sistem diferit? BlogoText CMS este un sistem simplu și ușor, gratuit și liber de gestionare a conținutului de conținut (CMS) și un motor de blog minimalist

Cum se instalează InvoicePlane pe Debian 9

Cum se instalează InvoicePlane pe Debian 9

Folosind un sistem diferit? InvoicePlane este o aplicație gratuită și deschisă de facturare a sursei. Codul sursă al acestuia poate fi găsit în acest depozit Github. Acest ghid

Cum se instalează Backdrop CMS 1.8.0 pe un Debian 9 LAMP VPS

Cum se instalează Backdrop CMS 1.8.0 pe un Debian 9 LAMP VPS

Folosind un sistem diferit? Fundalul CMS 1.8.0 este un sistem de management al conținutului (CMS), simplu și flexibil, mobil, prietenos și gratuit, care ne permite

Cum se instalează BookStack pe Debian 9

Cum se instalează BookStack pe Debian 9

Folosind un sistem diferit? BookStack este o platformă simplă, self-gazdată, ușor de utilizat pentru organizarea și stocarea informațiilor. BookStack este complet gratuit și deschis

Cum se instalează Pagekit 1.0 CMS pe un VPS Debian 9 LAMP

Cum se instalează Pagekit 1.0 CMS pe un VPS Debian 9 LAMP

Folosind un sistem diferit? Pagekit 1.0 CMS este un sistem frumos de gestionare a conținutului (CMS), modular, extensibil și ușor, gratuit și deschis, cu

Instrumente de monitorizare mai bune pentru Ubuntu și CentOS

Instrumente de monitorizare mai bune pentru Ubuntu și CentOS

Introducere Sistemele Linux sunt livrate cu instrumente de monitorizare în mod implicit, cum ar fi top, df și du care ajută la monitorizarea proceselor și a spațiului pe disc. De multe ori însă, acestea sunt

Monitorizați starea serverului Debian cu Munin

Monitorizați starea serverului Debian cu Munin

Munin este un instrument de monitorizare pentru a analiza procesele și resursele din mașina dvs. și prezintă informațiile în grafice printr-o interfață web. Utilizați următoarea

Cum se activează TLS 1.3 în Apache pe Debian 10

Cum se activează TLS 1.3 în Apache pe Debian 10

Folosind un sistem diferit? TLS 1.3 este o versiune a protocolului Transport Layer Security (TLS) care a fost publicat în 2018 ca standard propus în RFC 8446

Cum se instalează Flarum Forum pe Debian 10

Cum se instalează Flarum Forum pe Debian 10

Folosind un sistem diferit? Flarum este un software gratuit și open source de generație viitoare care face discuția online distractivă. Este simplu, rapid și gratuit

Cum se instalează Redaxscript 3.2 CMS pe un VPS Debian 9 LAMP

Cum se instalează Redaxscript 3.2 CMS pe un VPS Debian 9 LAMP

Folosind un sistem diferit? Redaxscript 3.2 CMS este un sistem de gestionare a conținutului (CMS) modern și ultra ușor, gratuit și deschis, cu rachetă

Adaugă un interval de adrese IP la serverul tău (CentOS / Ubuntu / Debian)

Adaugă un interval de adrese IP la serverul tău (CentOS / Ubuntu / Debian)

Introducere În acest tutorial, vom acoperi procesul de adăugare a întregului interval / subrețea IP la un server Linux care rulează CentOS, Debian sau Ubuntu. Procesul

Configurarea Counter Strike: Source pe Debian

Configurarea Counter Strike: Source pe Debian

În acest ghid, vom stabili un Counter Strike: Server de joc sursă pe Debian 7. Aceste comenzi au fost testate pe Debian 7, dar ar trebui să funcționeze o

Instalați PBX într-un Flash 5 pe Debian 8

Instalați PBX într-un Flash 5 pe Debian 8

PBX In A Flash 5 (PIAF5) este un sistem de operare bazat pe Debian 8, care transformă Vultr VPS-ul dvs. într-un PBX complet. Acesta posedă următoarele caracteristici și multe altele.

Cum se instalează Dolibarr pe Debian 9

Cum se instalează Dolibarr pe Debian 9

Folosind un sistem diferit? Dolibarr este un plan de resurse pentru întreprinderi open source (ERP) și managementul relațiilor cu clienții (CRM) pentru companii. Dolibarr

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

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.

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.

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.

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?

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.

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