Bevezetés
Az Nginx egy nyílt forráskódú webszerver-szoftver, amelyet nagy párhuzamosságra terveztek, és használható HTTP/HTTPS szerverként, fordított proxyszerverként, levelezőproxyszerverként, szoftveres terheléselosztóként, TLS terminátorként, gyorsítótárazó szerverként és még sok másként!
Ez egy erősen moduláris szoftver. Még a szoftver egyes látszólag "beépített" részei is, mint például a GZIP vagy az SSL, valójában modulokként jönnek létre, amelyeket a felépítés során engedélyezni és letiltani lehet.
A közösség által létrehozott alapvető (natív) modulokkal és harmadik féltől származó (külső) modulokkal rendelkezik . Jelenleg több mint száz külső féltől származó modult használhatunk.
C nyelven írva ez egy gyors és könnyű szoftver.
Az Nginx forráskódból történő telepítése viszonylag egyszerű – töltse le az Nginx forráskód legújabb verzióját, konfigurálja, készítse el és telepítse.
Ki kell választania, hogy a fővonalat vagy a stabil verziót szeretné letölteni, de ezek elkészítése ugyanaz.
Ebben az útmutatóban az Nginx fő verzióját fogjuk összeállítani Debian 10-en (buster). Az összes elérhető modult az Nginx nyílt forráskódú verziójában fogjuk használni.
Miért fordítsa le és telepítse az Nginxet forrásból?
Valószínűleg azt kérdezed, hogy miért fordítanád le az Nginxet egy forrásból, ha használhatod az előkészített csomagokat. Íme néhány ok, amiért érdemes saját maga összeállítania egy adott szoftvert:
- A konfigurációs opciók vezérléséhez.
- A szoftver telepítéséhez bárhová, ahol csak akarja. Akár ugyanannak a szoftvernek több különböző verzióját is telepítheti.
- A telepített verzió szabályozása. A disztribúciók nem mindig maradnak naprakészen az összes csomag legújabb verziójával, különösen a szoftvercsomagok kiegészítőivel.
- A szoftver működésének jobb megértése érdekében.
Stabil vs. mainline verzió
Az Nginx nyílt forráskódú két verzióban érhető el:
- Fővonal – Tartalmazza a legújabb szolgáltatásokat és hibajavításokat, és mindig naprakész. Megbízható, de tartalmazhat néhány kísérleti modult, és lehet néhány új hiba is.
- Stabil – Nem tartalmazza az összes legújabb funkciót, de kritikus hibajavításokat tartalmaz, amelyek mindig visszaportálódnak a fő verzióra.
Alapvető modulok kontra harmadik féltől származó modulok
Az Nginx kétféle modullal rendelkezik, amelyeket használhat: alapvető modulokat és harmadik féltől származó modulokat.
Az alapvető Nginx fejlesztők alapmodulokat készítenek, és ezek magának a szoftvernek a részét képezik.
A közösség harmadik féltől származó modulokat épít, és ezek segítségével bővítheti a funkcionalitást. Számos hasznos, harmadik féltől származó modul létezik.
Statikus modulok kontra dinamikus modulok
Statikus modulok léteznek az Nginxben az első verziótól kezdve. A dinamikus modulokat 2016 februárjában vezették be az Nginx 1.9.11+ verziójával.
Statikus modulok esetén a ./configureszkript fordításkor rögzíti az Nginx binárist alkotó modulok készletét . A statikus modulok használata --with-foo_bar_modulevagy --add-module=PATHszintaxisa.
Egy alap (standard) modul dinamikusként történő fordításához hozzáadjuk =dynamicpéldául a --with-http_image_filter_module=dynamic.
Harmadik féltől származó modulok dinamikus fordításához --add-dynamic-module=/path/to/moduleszintaxist használunk , majd load_modulea nginx.conffájl globális kontextusában lévő direktíva használatával betöltjük őket .
Az Nginx forrásból történő építésének követelményei
Más UNIX/Linux szoftverekkel összehasonlítva az Nginx meglehetősen könnyű, és nem rendelkezik sok könyvtárfüggőséggel. Az alapértelmezett build konfiguráció csak három telepítendő könyvtártól függ: OpenSSL/LibreSSL/BoringSSL, Zlib és PCRE.
- Kötelező követelmények:
- Választható követelmények:
MEGJEGYZÉS : Az Nginx az OpenSSL helyett a LibreSSL és BoringSSL kriptokönyvtárak ellen is lefordítható.
Mielőtt elkezded
Ellenőrizze a Debian verziót.
lsb_release -ds # Debian GNU/Linux 10 (buster)
Hozzon létre egy normál felhasználót sudohozzáféréssel.
adduser johndoe --gecos "John Doe" usermod -aG sudo johndoe
MEGJEGYZÉS : Cserélje johndoeki a felhasználónevével .
Váltás új felhasználóra.
su - johndoe
Állítsa be az időzónát.
sudo dpkg-reconfigure tzdata
Frissítse operációs rendszere szoftverét.
sudo apt update && sudo apt upgrade -y
Telepítse a szükséges csomagokat.
sudo apt install -y software-properties-common ufw
Nginx készítése forrásból
Az Nginx egy C nyelven írt program, ezért először telepítenie kell egy fordítóeszközt. Telepítse build-essential, gités tree.
sudo apt install -y build-essential git tree
Töltse le az Nginx forráskód legújabb verzióját, és csomagolja ki a forráskód-archívumot. Az Nginx forráskódja tömörített archívumként kerül terjesztésre, mint a legtöbb Unix és Linux szoftver.
wget https://nginx.org/download/nginx-1.17.2.tar.gz && tar zxvf nginx-1.17.2.tar.gz
Töltse le a kötelező Nginx-függőségek forráskódját, és bontsa ki.
# 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
Telepítse az opcionális Nginx-függőségeket.
sudo apt install -y perl libperl-dev libgd3 libgd-dev libgeoip1 libgeoip-dev geoip-bin libxml2 libxml2-dev libxslt1.1 libxslt1-dev
Tisztítsa meg az összes .tar.gzfájlt. Nincs többé szükségünk rájuk.
rm -rf *.tar.gz
Lépjen be az Nginx forráskönyvtárába.
cd ~/nginx-1.17.2
A jó mérés érdekében listázza ki azokat a könyvtárakat és fájlokat, amelyek az Nginx forráskódot a tree.
tree -L 2 .
Másolja a kézikönyv oldalát ide /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
Segítségért megtekintheti a naprakész Nginx fordítási idő opciók teljes listáját a következő futtatásával.
./configure --help # To see want core modules can be built as dynamic run: ./configure --help | grep -F =dynamic
Az Nginx konfigurálása, fordítása és telepítése.
./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
Az összeállítást követően navigáljon a kezdőkönyvtárába ( ~).
cd ~
Symlink ide /usr/lib/nginx/modules: /etc/nginx/modules. Ez az Nginx modulok szabványos helye.
sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules
Nyomtassa ki az Nginx verziót, a fordítóverziót, és konfigurálja a szkriptparamétereket.
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 . . . # . . . # . . .
Hozzon létre egy Nginx rendszercsoportot és felhasználót.
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
Ellenőrizze az Nginx szintaxisát és a lehetséges hibákat.
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
Hozzon létre egy Nginx systemd unit fájlt.
sudo vim /etc/systemd/system/nginx.service
Töltse fel a /etc/systemd/system/nginx.servicefájlt a következő tartalommal.
[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
Engedélyezze az Nginx-et a rendszerindításkor, és azonnal indítsa el az Nginxet.
sudo systemctl enable nginx.service sudo systemctl start nginx.service
Ellenőrizze, hogy az Nginx automatikusan elindul-e az újraindítás után.
sudo systemctl is-enabled nginx.service # enabled
Ellenőrizze az állapotot.
sudo systemctl status nginx.service
MEGJEGYZÉS : Ellenőrizheti, hogy az Nginx fut-e, ha egy webböngészőben felkeresi webhelye domainjét vagy IP-címét. Látni fogja az Nginx üdvözlő oldalát. Ez azt jelzi, hogy az Nginx működik és fut a VPS-en.
Hozzon létre egy UFW Nginx alkalmazásprofilt.
sudo vim /etc/ufw/applications.d/nginx
Másolja/illessze be a következő tartalmat a /etc/ufw/applications.d/nginxfájlba.
[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
Ellenőrizze, hogy az UFW-alkalmazásprofilok létrejöttek és felismerhetők-e.
sudo ufw app list # Available applications: # Nginx Full # Nginx HTTP # Nginx HTTPS # OpenSSH
Az Nginx alapértelmezés szerint biztonsági mentési .defaultfájlokat hoz létre a /etc/nginx. .defaultFájlok eltávolítása a /etc/nginxkönyvtárból.
sudo rm /etc/nginx/*.default
Helyezze el a Vim szerkesztő Nginx konfigurációjának szintaxiskiemelését a ~/.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/
MEGJEGYZÉS : A fenti lépés végrehajtásával szép szintaxiskiemelést kap, amikor az Nginx konfigurációs fájljait szerkeszti a Vim szerkesztőben.
Hozzon létre conf.d, snippets, sites-availableés sites-enabledkönyvtárakat itt: /etc/nginx.
sudo mkdir /etc/nginx/{conf.d,snippets,sites-available,sites-enabled}
Módosítsa az Nginx naplófájlok engedélyeit és csoportos tulajdonjogát.
sudo chmod 640 /var/log/nginx/* sudo chown nginx:adm /var/log/nginx/access.log /var/log/nginx/error.log
Hozzon létre egy naplóforgatási konfigurációt az Nginx számára.
sudo vim /etc/logrotate.d/nginx
Töltse ki a fájlt a következő szöveggel, majd mentse és lépjen ki.
/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 }
Távolítsa el az összes letöltött fájlt a kezdőkönyvtárból.
cd ~ rm -rf nginx-1.17.2/ openssl-1.1.1c/ pcre-8.43/ zlib-1.2.11/
Összegzés
Ez az. Most telepítette az Nginx legújabb verzióját. Statikusan fordítják néhány fontos könyvtár ellen, mint például az OpenSSL. Az OpenSSL rendszer által biztosított verziója gyakran elavult. Az OpenSSL újabb verziójával történő telepítés ezen módszerével kihasználhatja az OpenSSL-ben elérhető modern titkosításokat, CHACHA20_POLY1305például a TLS 1.3-at és a protokollokat 1.1.1. Sőt, saját bináris összeállításával személyre szabhatja, hogy az Nginx milyen funkciókat biztosítson, ami sokkal rugalmasabb, mint egy előre beépített bináris telepítése.