Kodėl Nginx yra geras pasirinkimas jūsų serveriui
Kai prieš kelerius metus pirmą kartą susidūriau su Nginx, buvau įpratęs prie Apache. Tačiau greitai supratau, kodėl vis daugiau administratorių renkasi būtent šį web serverį. Nginx pasižymi neįtikėtinu našumu tvarkant didelį skaičių vienu metu vykstančių užklausų, o tai ypač svarbu moderniems web aplikacijoms.
Ubuntu 22.04 LTS versija puikiai dera su Nginx – sistema stabili, ilgalaikė palaikymo garantija, o pats diegimo procesas intuityvus net ir pradedantiesiems. Šiame straipsnyje pasidalinsiu praktine patirtimi, kaip tinkamai sukonfigūruoti Nginx serverį, kad jis veiktų efektyviai ir saugiai.
Diegimas ir pirmieji žingsniai
Prieš pradedant bet kokius darbus su serveriu, visada atnaujinkite paketų sąrašus. Tai gera praktika, kuri užtikrina, kad gausite naujausias programų versijas:
sudo apt update
sudo apt upgrade -y
Nginx diegimas Ubuntu 22.04 sistemoje yra itin paprastas. Oficialūs Ubuntu repozitoriai jau turi paruoštą Nginx paketą:
sudo apt install nginx -y
Po sėkmingo diegimo Nginx turėtų automatiškai pasileisti. Galite tai patikrinti naudodami systemctl komandą:
sudo systemctl status nginx
Jei viskas gerai, turėtumėte matyti žalią „active (running)” statusą. Dabar jau galite atidaryti naršyklę ir įvesti savo serverio IP adresą – pamatysite standartinį Nginx pasveikinamąjį puslapį.
Ugniasienės konfigūravimas
Viena dažniausiai pasitaikančių klaidų – užmiršti sukonfigūruoti ugniasienę. Ubuntu 22.04 naudoja UFW (Uncomplicated Firewall), kuris daro šį procesą gana paprastą.
Pirmiausia patikrinkite, kokios aplikacijos profiliai yra prieinami:
sudo ufw app list
Turėtumėte matyti kelis Nginx profilius:
– Nginx Full – atidaro ir 80 (HTTP), ir 443 (HTTPS) portus
– Nginx HTTP – tik 80 portas
– Nginx HTTPS – tik 443 portas
Jei dar neturite SSL sertifikato, pradėkite nuo HTTP:
sudo ufw allow 'Nginx HTTP'
sudo ufw enable
Vėliau, kai sukonfigūruosite SSL, galėsite pereiti prie „Nginx Full” profilio. Nepamirškite taip pat atidaryti SSH porto, jei dar to nepadarėte:
sudo ufw allow OpenSSH
Katalogų struktūra ir pagrindinė konfigūracija
Nginx konfigūracijos failai Ubuntu sistemoje yra organizuoti gana logiškai. Pagrindinis konfigūracijos failas yra /etc/nginx/nginx.conf, tačiau dažniausiai dirbsite su šiais katalogais:
/etc/nginx/sites-available/ – čia saugomi visų svetainių konfigūracijos failai
/etc/nginx/sites-enabled/ – čia yra simbolinės nuorodos į aktyvias svetaines
/var/www/ – standartinė vieta svetainių failams
Ši struktūra leidžia lengvai valdyti kelias svetaines viename serveryje. Galite turėti daug konfigūracijų „sites-available” kataloge, bet tik aktyvios bus „sites-enabled”.
Pažvelkime į pagrindinį konfigūracijos failą:
sudo nano /etc/nginx/nginx.conf
Čia rasite globalius nustatymus, tokius kaip worker procesų skaičius, logging parametrus ir kitas bendras direktyvas. Dažniausiai naudinga pakoreguoti šiuos parametrus:
worker_processes auto;
worker_connections 1024;
Parametras „auto” automatiškai nustato worker procesų skaičių pagal procesorių branduolių kiekį. Tai patogu, nes nereikia rankiniu būdu keisti šio parametro keičiant serverio konfigūraciją.
Naujos svetainės konfigūravimas
Dabar pereikime prie praktinės dalies – sukurkime konfigūraciją naujam projektui. Tarkime, jūsų domenas yra example.com.
Pirmiausia sukurkite katalogą svetainės failams:
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com
Sukurkite paprastą testinį HTML failą:
nano /var/www/example.com/html/index.html
Įdėkite bet kokį HTML turinį, kad galėtumėte patikrinti, ar viskas veikia.
Dabar sukurkime server block konfigūraciją:
sudo nano /etc/nginx/sites-available/example.com
Štai bazinė konfigūracija, kuri puikiai tinka daugumai projektų:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.php;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
Ši konfigūracija gana paprasta, bet apima visus būtinus elementus. Direktyva „try_files” yra ypač naudinga – ji bando rasti failą, jei neranda, bando kaip katalogą, o jei ir tai nepavyksta, grąžina 404 klaidą.
Aktyvuokite naują konfigūraciją sukurdami simbolinę nuorodą:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Konfigūracijos testavimas ir perkrovimas
Prieš perkraudami Nginx, visada patikrinkite konfigūracijos sintaksę. Tai išgelbės nuo nemalonių situacijų, kai serveris nepasileidžia dėl klaidos konfigūracijoje:
sudo nginx -t
Jei viskas gerai, pamatysite pranešimą „syntax is ok” ir „test is successful”. Tik tada perkraukite Nginx:
sudo systemctl reload nginx
Naudoju „reload” vietoj „restart”, nes tai leidžia perkrauti konfigūraciją be aktyvių ryšių nutraukimo. Tai ypač svarbu produkcinėje aplinkoje.
PHP ir kitų aplikacijų palaikymas
Jei jūsų projektas naudoja PHP, reikės papildomos konfigūracijos. Pirmiausia įdiekite PHP-FPM:
sudo apt install php8.1-fpm php8.1-mysql php8.1-common php8.1-cli -y
Ubuntu 22.04 standartiškai naudoja PHP 8.1 versiją, kuri puikiai tinka daugumai šiuolaikinių projektų.
Dabar papildykite savo server block konfigūraciją:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Taip pat pridėkite direktyvą, kuri neleis pasiekti paslėptų failų:
location ~ /\.ht {
deny all;
}
Jei dirbate su Node.js aplikacija, konfigūracija bus kitokia. Nginx veiks kaip reverse proxy:
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
SSL sertifikato įdiegimas su Let’s Encrypt
Šiais laikais SSL sertifikatas yra būtinybė, ne prabanga. Let’s Encrypt suteikia nemokamus sertifikatus, o Certbot įrankis daro diegimo procesą itin paprastą.
Įdiekite Certbot:
sudo apt install certbot python3-certbot-nginx -y
Paleiskite Certbot su Nginx pluginu:
sudo certbot --nginx -d example.com -d www.example.com
Certbot automatiškai modifikuos jūsų Nginx konfigūraciją, pridės reikiamus SSL parametrus ir sukonfigūruos automatinį peradresavimą iš HTTP į HTTPS. Tai neįtikėtinai patogu.
Sertifikatai galioja 90 dienų, bet Certbot automatiškai sukuria cron užduotį jų atnaujinimui. Galite patikrinti atnaujinimo procesą rankiniu būdu:
sudo certbot renew --dry-run
Po SSL įdiegimo jūsų konfigūracija atrodys maždaug taip:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Kita konfigūracija...
}
Našumo optimizavimas ir paskutiniai patarimai
Baigiant šį praktinį vadovą, pasidalinsiu keliais patarimais, kurie padės išspausti maksimalų našumą iš jūsų Nginx serverio.
Gzip kompresija – ji jau įjungta pagal nutylėjimą nginx.conf faile, bet galite ją patobulinti:
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss;
Browser caching – nustatykite tinkamus cache header’ius statiniams failams:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
Rate limiting – apsaugokite serverį nuo per didelio užklausų skaičiaus:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=mylimit burst=20 nodelay;
# Kita konfigūracija...
}
}
Reguliariai stebėkite Nginx logus – jie suteikia vertingos informacijos apie serverio veiklą:
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Nepamirškite reguliariai atnaujinti sistemos ir Nginx:
sudo apt update && sudo apt upgrade -y
Saugumo sumetimais rekomenduoju paslėpti Nginx versiją nuo išorinių naudotojų. Pridėkite http bloke:
server_tokens off;
Jei serveris aptarnauja kelis projektus, naudokite atskirus access ir error logus kiekvienam projektui – tai labai palengvina problemų diagnostiką.
Nginx konfigūravimas iš pirmo žvilgsnio gali atrodyti sudėtingas, bet kai suprantate pagrindinius principus, viskas susidėlioja į vietą. Pradėkite nuo paprastos konfigūracijos ir palaipsniui pridėkite reikiamas funkcijas. Testuokite kiekvieną pakeitimą, stebėkite logus ir nebijokite eksperimentuoti testineje aplinkoje. Su laiku Nginx taps jūsų patikimu įrankiu, kuris efektyviai aptarnaus net ir labai apkrautus projektus.
