Uvod
Nginx je softver web poslužitelja otvorenog koda dizajniran s visokom konkurentnošću na umu, koji se može koristiti kao HTTP/HTTPS poslužitelj, obrnuti proxy poslužitelj, mail proxy poslužitelj, balansiranje softverskog opterećenja, TLS terminator, poslužitelj za predmemoriju i još mnogo toga!
To je vrlo modularan komad softvera. Čak su i neki od naizgled "ugrađenih" dijelova softvera, poput GZIP-a ili SSL-a, zapravo kreirani kao moduli koji se mogu omogućiti i onemogućiti tijekom izrade.
Ima osnovne (nativne) module i module treće strane (vanjske) koje je kreirala zajednica. Trenutno postoji preko stotinu modula treće strane koje možemo koristiti.
Napisan na C, to je brz i lagan komad softvera.
Instaliranje Nginxa iz izvornog koda relativno je jednostavno - preuzmite najnoviju verziju izvornog koda Nginxa, konfigurirajte ga, izgradite i instalirajte ga.
Morat ćete odabrati hoćete li preuzeti glavnu ili stabilnu verziju, ali njihova izrada je ista.
U ovom vodiču sastaviti ćemo glavnu verziju Nginxa na Debianu 10 (buster). Koristit ćemo sve dostupne module u otvorenoj verziji Nginxa.
Zašto kompajlirati i instalirati Nginx iz izvora
Vjerojatno se pitate zašto bi se kompilirao Nginx iz izvora kada možete koristiti pripremljene pakete. Evo nekoliko razloga zašto biste mogli sami sastaviti određeni softver:
- Za kontrolu opcija konfiguracije.
- Za instaliranje softvera gdje god želite. Možete čak instalirati nekoliko različitih verzija istog softvera.
- Za kontrolu verzije koju instalirate. Distribucije ne ostaju uvijek ažurne s najnovijim verzijama svih paketa, posebno dodataka softverskim paketima.
- Da biste bolje razumjeli kako softver radi.
Stabilna u odnosu na glavnu verziju
Nginx Open Source dostupan je u dvije verzije:
- Mainline – Uključuje najnovije značajke i ispravke grešaka i uvijek je ažuriran. Pouzdan je, ali može uključivati neke eksperimentalne module, a može imati i određeni broj novih grešaka.
- Stabilan – Ne uključuje sve najnovije značajke, ali ima kritične ispravke bugova koji se uvijek vraćaju na glavnu verziju.
Osnovni moduli u odnosu na module treće strane
Nginx ima dvije vrste modula koje možete koristiti: osnovne module i module treće strane.
Osnovni Nginx programeri grade osnovne module i oni su dio samog softvera.
Zajednica gradi module treće strane, a vi ih možete koristiti za proširenje funkcionalnosti. Postoji mnogo korisnih modula treće strane.
Statički moduli naspram dinamičkih modula
Statički moduli postoje u Nginxu od prve verzije. Dinamički moduli predstavljeni su s Nginxom 1.9.11+ u veljači 2016.
Sa statičkim modulima, skup modula koji čine Nginx binarni program fiksira ./configureskripta u vrijeme prevođenja . Statički moduli koriste --with-foo_bar_moduleili --add-module=PATHsintaksu.
Za kompiliranje jezgrenog (standardnog) modula kao dinamičkog dodajemo =dynamic, na primjer --with-http_image_filter_module=dynamic.
Za kompiliranje modula treće strane kao dinamičkog, koristimo --add-dynamic-module=/path/to/modulesintaksu, a zatim ih učitavamo korištenjem load_moduledirektive u globalnom kontekstu nginx.confdatoteke.
Zahtjevi za izgradnju Nginxa iz izvora
U usporedbi s nekim drugim UNIX/Linux softverom, Nginx je prilično lagan i nema mnogo ovisnosti o knjižnici. Zadana konfiguracija gradnje ovisi o samo 3 biblioteke koje treba instalirati: OpenSSL/LibreSSL/BoringSSL, Zlib i PCRE.
- Obvezni zahtjevi:
- Izborni zahtjevi:
NAPOMENA : Nginx se također može kompajlirati protiv LibreSSL i BoringSSL kripto biblioteka umjesto OpenSSL-a.
Prije nego što počneš
Provjerite verziju Debiana.
lsb_release -ds # Debian GNU/Linux 10 (buster)
Stvorite redovitog korisnika s sudopristupom.
adduser johndoe --gecos "John Doe" usermod -aG sudo johndoe
NAPOMENA : Zamijenite johndoesvojim korisničkim imenom .
Prijeđite na novog korisnika.
su - johndoe
Postavite vremensku zonu.
sudo dpkg-reconfigure tzdata
Ažurirajte softver svog operativnog sustava.
sudo apt update && sudo apt upgrade -y
Instalirajte potrebne pakete.
sudo apt install -y software-properties-common ufw
Napravi Nginx iz izvora
Nginx je program napisan u C-u, tako da ćete prvo morati instalirati alat za prevođenje. Instalirajte build-essential, giti tree.
sudo apt install -y build-essential git tree
Preuzmite najnoviju glavnu verziju Nginx izvornog koda i raspakirajte arhivu izvornog koda. Izvorni kod Nginxa distribuira se kao komprimirana arhiva, kao i većina Unix i Linux softvera.
wget https://nginx.org/download/nginx-1.17.2.tar.gz && tar zxvf nginx-1.17.2.tar.gz
Preuzmite obavezni izvorni kod ovisnosti o Nginxu i raspakirajte ga.
# 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
Instalirajte izborne ovisnosti o Nginxu.
sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev
Očistite sve .tar.gzdatoteke. Ne trebaju nam više.
rm -rf *.tar.gz
Unesite izvorni direktorij Nginxa.
cd ~/nginx-1.17.2
Za dobru listu mjernih direktorija i datoteka koje sastavljaju izvorni kod Nginxa s tree.
tree -L 2 .
Kopirajte stranicu priručnika na /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
Za pomoć možete vidjeti cijeli popis ažuriranih opcija vremena prevođenja Nginxa tako što ćete pokrenuti sljedeće.
./configure --help # To see want core modules can be built as dynamic run: ./configure --help | grep -F =dynamic
Konfigurirajte, kompajlirajte i instalirajte 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
Nakon kompilacije, idite na svoj početni ( ~) direktorij.
cd ~
Simbolna veza /usr/lib/nginx/modulesna /etc/nginx/modules. Ovo je standardno mjesto za Nginx module.
sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules
Ispišite verziju Nginxa, verziju kompajlera i konfigurirajte parametre skripte.
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 . . . # . . . # . . .
Napravite grupu i korisnika Nginx sustava.
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
Provjerite Nginx sintaksu i moguće pogreške.
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
Napravite Nginx systemd jediničnu datoteku.
sudo vim /etc/systemd/system/nginx.service
Popunite /etc/systemd/system/nginx.servicedatoteku sljedećim sadržajem.
[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
Omogućite Nginx da se pokrene pri pokretanju i odmah pokrenite Nginx.
sudo systemctl enable nginx.service sudo systemctl start nginx.service
Provjerite hoće li se Nginx automatski pokrenuti nakon ponovnog pokretanja.
sudo systemctl is-enabled nginx.service # enabled
Provjerite status.
sudo systemctl status nginx.service
NAPOMENA : Možete provjeriti je li Nginx pokrenut tako da u web-pregledniku odete na domenu ili IP adresu svoje stranice. Vidjet ćete stranicu dobrodošlice Nginxa. To je pokazatelj da je Nginx pokrenut i radi na vašem VPS-u.
Napravite UFW Nginx profil aplikacije.
sudo vim /etc/ufw/applications.d/nginx
Kopirajte/zalijepite sljedeći sadržaj u /etc/ufw/applications.d/nginxdatoteku.
[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
Provjerite jesu li profili UFW aplikacija stvoreni i prepoznati.
sudo ufw app list # Available applications: # Nginx Full # Nginx HTTP # Nginx HTTPS # OpenSSH
Nginx prema zadanim postavkama generira .defaultdatoteke sigurnosne kopije u /etc/nginx. Uklonite .defaultdatoteke iz /etc/nginxdirektorija.
sudo rm /etc/nginx/*.default
Stavite isticanje sintakse Nginx konfiguracije za Vim editor u ~/.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/
NAPOMENA : Ako izvršite gornji korak, dobit ćete lijepo isticanje sintakse kada uređujete Nginx konfiguracijske datoteke u uređivaču Vim.
Stvorite conf.d, snippets, sites-availablei sites-enableddirektorije u /etc/nginx.
sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}
Promijenite dopuštenja i vlasništvo grupe nad Nginx datotekama dnevnika.
sudo chmod 640 /var/log/nginx/* sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log
Napravite konfiguraciju rotacije dnevnika za Nginx.
sudo vim /etc/logrotate.d/nginx
Popunite datoteku sljedećim tekstom, zatim spremite i izađite.
/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 }
Uklonite sve preuzete datoteke iz matičnog direktorija.
cd ~ rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/
Sažetak
To je to. Sada imate instaliranu najnoviju verziju Nginxa. Sastavlja se statički prema nekim važnim knjižnicama poput OpenSSL-a. Često je verzija OpenSSL-a koju isporučuje sustav zastarjela. Korištenjem ove metode instalacije s novijom verzijom OpenSSL-a, možete iskoristiti prednosti modernih šifri poput CHACHA20_POLY1305i protokola kao što je TLS 1.3 koji su dostupni u OpenSSL-u 1.1.1. Štoviše, kompajliranjem vlastite binarne datoteke možete prilagoditi funkcionalnost koju će vaš Nginx pružiti, što je mnogo fleksibilnije od instaliranja unaprijed izgrađene binarne datoteke.