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