fakessh.eu
fakessh.eu
Čierny sieťový prepínač v otvorenej serverovej skrini, do ktorého vchádza jeden modrý opletený kábel, zatiaľ čo tri čierne káble z neho vedú dole do troch serverov označených studenými modrými diódami.

Nginx: inštalácia, nastavenie webu a reverzný proxy krok za krokom

aktualizované 27. októbra 2026

ZHRNUTIENginx je webserver pre Linux, ktorý posiela statické súbory, funguje ako reverzný proxy pred aplikáciou a rozdeľuje záťaž medzi servery. Nainštalujete ho z balíčkov distribúcie (apt install nginx, dnf install nginx), nastavíte v nginx.conf, zmenu skontrolujete príkazom nginx -t a načítate príkazom nginx -s reload.

Nginx je webserver, ktorý na Linuxe zvládne tri úlohy: posiela statické súbory, funguje ako reverzný proxy pred aplikáciou a rozdeľuje záťaž medzi niekoľko serverov. Na novom VPS ho nainštalujete jedným príkazom z balíčkov distribúcie, nastavíte v súbore nginx.conf a každú zmenu overíte príkazom nginx -t. Nižšie je postup od inštalácie po chyby 502 a 403 a ich hľadanie v logoch.

Podľa hesla Nginx na Wikipédii ho vytvoril ruský vývojár Igor Sysoev a verejne vyšiel v roku 2004. Projekt sám seba opisuje ako HTTP webserver, reverzný proxy, cache, load balancer a proxy pre TCP, UDP a poštu pod licenciou 2-clause BSD.

Na čo nginx slúži

ÚlohaČo nginx robíHlavná direktíva
Webserverposiela súbory z diskuroot
Reverzný proxyprijme požiadavku a odovzdá ju aplikáciiproxy_pass
Load balancerrozdeľuje požiadavky medzi skupinu serverovupstream
Aplikácia cez FastCGI, napríklad PHPodovzdá požiadavku FastCGI serverufastcgi_pass

Reverzný proxy prijíma požiadavky od klientov, posiela ich inému serveru, preberá jeho odpoveď a vracia ju klientovi. Aplikácia tak môže počúvať len na lokálnej adrese a z internetu je vidieť iba nginx. Load balancer bez ďalšieho nastavenia rozdeľuje požiadavky postupne (round-robin), k dispozícii sú aj metódy least_conn a ip_hash.

Inštalácia z balíčkov distribúcie

sudo apt update && sudo apt install nginx   # Debian, Ubuntu
sudo dnf install nginx                       # RHEL
sudo systemctl enable nginx                  # RHEL: spúšťanie pri štarte
sudo systemctl start nginx                   # RHEL: spustenie

Podľa dokumentácie Ubuntu inštalácia nginx aj spustí a predvolená stránka s textom Welcome to nginx! je dostupná na adrese servera. Predvolený web číta Ubuntu z /var/www/html a RHEL z /usr/share/nginx/html/. Ak firewall z článku Prvých tridsať minút na novom VPS pustí len SSH, pridajte porty webu: sudo ufw allow 80/tcp a rovnako pre 443.

Verziu zistíte príkazom nginx -v. Ak potrebujete inú verziu, než ponúka distribúcia, nginx.org prevádzkuje vlastné repozitáre pre RHEL, Debian, Ubuntu a ďalšie systémy. Predvolene používajú stabilnú vetvu, mainline sa zapína osobitne.

Štruktúra konfigurácie

Hlavný súbor sa volá nginx.conf a v balíčkoch pre Debian, Ubuntu aj RHEL leží v /etc/nginx. Skladá sa z direktív: jednoduchá končí bodkočiarkou, blok má zložené zátvorky. Blok, ktorý smie obsahovať ďalšie direktívy, sa volá kontext. Direktívy events a http ležia v hlavnom kontexte, server v http a location v server.

Každý server je jeden virtuálny server. Nginx ho vyberie podľa portu v listen a hlavičky Host porovnanej so server_name. Ak nesedí žiadny, odpovie predvolený server pre daný port, teda prvý v poradí alebo ten s parametrom default_server. Vnútri servera vyberie najdlhší zhodný prefix medzi blokmi location, potom skúša regulárne výrazy v poradí zápisu a prvý zhodný vyhráva. Ak žiadny nesedí, platí zapamätaný prefix. Výnimkou je prefix s modifikátorom ^~, po ktorom sa regulárne výrazy už nekontrolujú.

Na Debiane a Ubuntu je každý web v samostatnom súbore v /etc/nginx/sites-available/ a zapína sa symlinkom v sites-enabled/:

sudo ln -s /etc/nginx/sites-available/example.org /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default

Druhý príkaz vypne predvolený web, ak ho už nepotrebujete. Na RHEL podľa dokumentácie Red Hat upravujete /etc/nginx/nginx.conf.

Statický web a reverzný proxy

Statický web v adresári /srv/example.org/html:

server {
    listen 80;
    server_name example.org www.example.org;
    root /srv/example.org/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Direktíva root k ceste len pripočíta adresu z požiadavky, takže /about.html sa hľadá v /srv/example.org/html/about.html. Direktíva index určuje súbor pre adresy zakončené lomkou. Direktíva try_files skúša súbory v zadanom poradí ($uri/ s lomkou na konci kontroluje adresár) a ak nenájde žiadny, vráti kód z posledného parametra, tu 404.

Reverzný proxy pred aplikáciou na porte 3000:

server {
    listen 80;
    server_name app.example.org;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Nginx štandardne neodovzdáva aplikácii hlavičku Host z pôvodnej požiadavky, ale hodnotu $proxy_host, teda adresu z proxy_pass. Riadok s $host to mení. Hlavičky X-Real-IP a X-Forwarded-For nesú adresu klienta, aby aplikácia nevidela iba 127.0.0.1. Skupinu serverov pre load balancer definuje blok upstream v kontexte http a na jeho názov ukáže proxy_pass http://aplikacia;:

upstream aplikacia {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

Kontrola, načítanie a logy

  1. Po úprave spustite sudo nginx -t. Príkaz skontroluje syntax a potom sa pokúsi otvoriť súbory spomenuté v konfigurácii.
  2. Ak test prejde, načítajte zmeny príkazom sudo nginx -s reload alebo sudo systemctl reload nginx. Hlavný proces overí novú konfiguráciu a pri chybe ostane pri starej, staré pracovné procesy dokončia rozbehnuté požiadavky. Bez načítania sa zmeny neprejavia.
  3. Správny server otestujete z terminálu: curl -I -H 'Host: example.org' http://127.0.0.1/. O tom, ktorý server odpovie, rozhoduje práve hlavička Host.
  4. Pri probléme sledujte log: sudo tail -f /var/log/nginx/error.log.

Logy access.log a error.log sú podľa dokumentácie v /var/log/nginx alebo v /usr/local/nginx/logs. Do error.log sa predvolene zapisuje úroveň error a závažnejšie.

Typické chyby

PríznakPríčina a postup
502 Bad GatewayNginx ako proxy nedostal od aplikácie použiteľnú odpoveď. Ak sa nevie ani pripojiť, error.log obsahuje connect() failed (111: Connection refused) while connecting to upstream. Overte, či aplikácia beží a či počúva na porte z proxy_pass: sudo ss -tlnp.
504 Gateway TimeoutAplikácia neodpovedala včas. Limity proxy_connect_timeout a proxy_read_timeout sú predvolene 60 s. Najprv zistite, prečo je aplikácia pomalá, až potom limit zvyšujte.
403, v logu directory index of ... is forbiddenAdresa končí lomkou, v adresári chýba súbor z index a autoindex je predvolene vypnutý. Pridajte index.html.
403, v logu Permission deniedPracovný proces nemá právo čítať súbor alebo prejsť adresárom na ceste k nemu. Pri adresári ide o právo x. Používateľa určuje direktíva user (predvolene nobody), práva po celej ceste ukáže namei -l /srv/example.org/html/index.html.
404 pri existujúcom súboreZlý root: nginx k nemu pripočíta adresu z požiadavky, súbor teda hľadá inde, než čakáte.
Namiesto webu Welcome to nginx!Hlavička Host nesedí so žiadnym server_name, napríklad pri prístupe cez IP adresu, takže odpovedal predvolený server. Alebo ostal zapnutý default v sites-enabled.
Zmena sa neprejavilaChýba načítanie konfigurácie, pozri predošlý postup.

Časté otázky

Čo je nginx a na čo slúži?

Nginx je HTTP webserver, reverzný proxy, cache, load balancer a proxy pre TCP, UDP a poštu. Môže posielať statické súbory z disku aj odovzdávať požiadavky aplikácii cez proxy_pass.

Ako skontrolovať konfiguráciu nginx a načítať zmeny?

Príkaz nginx -t skontroluje syntax a pokúsi sa otvoriť súbory z konfigurácie. Zmeny sa uplatnia po nginx -s reload alebo systemctl reload nginx. Pri chybe ostane v behu stará konfigurácia.

Kde je konfigurácia a logy nginx?

Hlavný súbor je nginx.conf, predvolene v /etc/nginx. Na Debiane a Ubuntu sú weby v sites-available a zapínajú sa symlinkom v sites-enabled. Logy access.log a error.log sú v /var/log/nginx.

Čo znamená chyba 502 Bad Gateway v nginx?

Nginx ako proxy nedostal od aplikácie použiteľnú odpoveď, napríklad sa k nej nevedel pripojiť. Skontrolujte, či aplikácia beží na porte z proxy_pass, a pozrite error.log.

Prečo nginx vracia 403 Forbidden?

Buď chýba index súbor pri vypnutom autoindexe, alebo pracovný proces nemá právo čítať súbor či prejsť adresármi k nemu. Rozhodne error.log: directory index is forbidden alebo Permission denied.

Ďalšie návody

SEO optimalizácia webu: rýchlosť servera, HTTPS a technický základ

SEO optimalizácia webu na úrovni servera: stavové kódy, HTTPS a presmerovania, TTFB a Core Web Vitals, robots.txt, sitemap.xml a logy Googlebota.

Vypratávanie Bratislava: čo so servermi a diskami, kým sa kancelária vyprázdni

Vypratávanie Bratislava z pohľadu IT: inventúra techniky, overená záloha, vymazanie disku (shred, nwipe, secure erase SSD) a odovzdanie elektroodpadu.

Písanie bakalárskych prác z informatiky: praktická časť na serveri

Písanie bakalárskych prác z informatiky: rozsah a náležitosti podľa usmernenia 56/2011, praktická časť na serveri, dokumentácia, citovanie a originalita.