Az alapszintű Nginx telepítés után (lásd korábbi cikk) a gyakorlatban felmerülő leggyakoribb feladatok: egy statikus weboldal kiszolgálása fájlrendszerből, egy háttérben futó alkalmazás reverse proxy mögé tétele, egy adott útvonal (subpath) átirányítása másik szolgáltatáshoz, valamint mindezek automatikus SSL-lel való ellátása Certbot-tal.

Site konfiguráció létrehozása — fájlrendszer alapú (statikus) hosting

Minden domainhez/site-hoz külön konfigurációs fájlt érdemes létrehozni a sites-available mappában, majd symlinkkel engedélyezni a sites-enabled mappában — ez Apache virtual host mintájához hasonló, jól átlátható elrendezés.

sudo nano /etc/nginx/sites-available/hu.[sajat-domain].conf
server {
    listen 80;
    server_name hu.[sajat-domain] www.hu.[sajat-domain];

    root /var/www/hu.[sajat-domain]/public_html;
    index index.html index.htm;

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

    access_log /var/log/nginx/hu.[sajat-domain].access.log;
    error_log  /var/log/nginx/hu.[sajat-domain].error.log;
}

Reverse proxy — háttérben futó alkalmazás (pl. Node.js, Docker konténer) kiszolgálása

Ha az alkalmazás nem statikus fájlokból áll, hanem egy másik porton (pl. localhost:3000) fut, az Nginx ezt is ki tudja szolgálni a domain mögött, proxyzással.

sudo nano /etc/nginx/sites-available/app.[sajat-domain].conf
server {
    listen 80;
    server_name app.[sajat-domain];

    location / {
        proxy_pass http://localhost:[app_belso_port];
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}

Megjegyzés: Az 'Upgrade' / 'Connection' fejlécek beállítása WebSocket-et használó alkalmazásoknál (pl. élő frissítések, chat) elengedhetetlen — enélkül a WebSocket kapcsolat nem tud létrejönni a proxyn keresztül.

Subpath átirányítás — egy adott útvonal másik szolgáltatáshoz irányítása

Gyakori eset: a fő domain egy statikus oldalt szolgál ki, de egy adott alkönyvtár (pl. /admin/ vagy /api/) egy másik, háttérben futó szolgáltatáshoz tartozik. Ezt location blokkal lehet megoldani ugyanazon a server blokkon belül.

server {
    listen 80;
    server_name [sajat-domain];

    root /var/www/[sajat-domain]/public_html;
    index index.html;

    # Fő oldal: statikus fájlok
    location / {
        try_files $uri $uri/ =404;
    }

    # /api/ alatt minden kérés a háttérben futó API szolgáltatáshoz megy
    location /api/ {
        proxy_pass http://localhost:[api_belso_port]/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # /admin/ átirányítás egy másik, külön portos admin felülethez
    location /admin/ {
        proxy_pass http://localhost:[admin_belso_port]/;
        proxy_set_header Host $host;
    }
}

Megjegyzés: Figyelj a záró perjelekre: a 'proxy_pass http://localhost:port/;' (záró / -lel) levágja a '/api/' előtagot a célszolgáltatás felé, míg a záró / nélküli verzió megtartja azt. Ez gyakori hibaforrás subpath proxyzásnál.

Konfigurációk engedélyezése és tiltása

# Engedélyezés: symlink létrehozása a sites-enabled mappában
sudo ln -s /etc/nginx/sites-available/hu.[sajat-domain].conf /etc/nginx/sites-enabled/

# Tiltás: a symlink törlése (az eredeti fájl a sites-available-ban megmarad)
sudo rm /etc/nginx/sites-enabled/hu.[sajat-domain].conf

# Alapértelmezett 'Welcome to nginx' oldal kikapcsolása, ha saját site-ot
# szeretnél default-ként megjeleníteni
sudo rm /etc/nginx/sites-enabled/default

Konfiguráció ellenőrzése és újratöltése

# Szintaktikai ellenőrzés — MINDIG futtasd módosítás után, mielőtt reload-olnál!
sudo nginx -t

# Zökkenőmentes újratöltés (nem szakítja meg a futó kapcsolatokat)
sudo systemctl reload nginx

# Teljes újraindítás (csak ha a reload nem elég, pl. worker process gondok esetén)
sudo systemctl restart nginx

Automatikus SSL Certbot-tal

A Certbot Nginx pluginja automatikusan felismeri a meglévő server_name bejegyzéseket, és magától kiegészíti a konfigurációt a HTTPS beállításokkal, valamint a HTTP→HTTPS átirányítással.

sudo apt install certbot python3-certbot-nginx

sudo certbot --nginx -d hu.[sajat-domain] -d www.hu.[sajat-domain]

# Több domain/subdomain egyszerre, ha egy szerver több site-ot is kiszolgál:
sudo certbot --nginx -d [sajat-domain] -d app.[sajat-domain] -d api.[sajat-domain]

Megjegyzés: A Certbot a tanúsítvány kiállítása után a konfigurációs fájlt magától kiegészíti egy 'listen 443 ssl;' blokkal és a megfelelő tanúsítvány-elérési utakkal, valamint (alapesetben) egy automatikus redirectet ad hozzá, ami minden HTTP kérést HTTPS-re irányít át.

Megújítás tesztelése és automatizálása

# Próba-megújítás (nem állít ki új tanúsítványt, csak szimulálja a folyamatot)
sudo certbot renew --dry-run

# A Certbot telepítéskor általában már létrehoz egy systemd timert / cron jobot
# az automatikus megújításhoz — ellenőrzés:
systemctl list-timers | grep certbot

← Vissza: Linux