A Reverse Proxy akkor lehet hasznos számodra, ha van legalább 1 szervered, és azon több weboldalt szeretnél futtatni, különböző domain vagy aldomainekről.
Példa:
Van több webszervered, szolgáltatásod amit elszeretnél érni távolról. Ezek virtualizálva vannak (Docker, Hyper-V, stb...), vagy más-más vason helyezkednek el. Összesen 1 db 80-as és 443-as portot tudsz csak kiengedni a tűzfalon, tehát csak az egyik szolgáltatásod lesz elérhető az alapértelmezett porton, a többihez más portot kell írnod, hogy eltud érni.
Ha beüzemelsz egy reverse proxyt és az ő 80-as és 443-as portját engeded, ki és beállítod a többi szerver IP címét, és portját, akkor az összes szolgáltatásod elérhető lesz az alapértelmezett portokon, és csak 2 portot kell kiengedned a tűzfalon. Ha külön-külön vason vannak a szerverek akkor csak az IP-t kell beállítani, viszont ha ugyan azon a vason van mint a Reverse Proxy, akkor természetesen módosítani kell a szolgáltatások portját.
Példa konfiguráció:
Szeretnék távolról elérni a weboldalunkat, a valami.hu és a valamimas.hu docker konténerben futnak a következő portokon: 8830, 8831 a masik.valami.hu pedig egy dedikált szerveren fut a 80-as porton.

Nginx telepítése és konfigurálása
apt install nginx -y
Miután sikeresen feltelepítettük a webszervert hozzuk létre a következő konfigurációs fájlokat a /etc/nginx/sites-available/ könyvtár alatt:
- valami.hu
- masik.valami.hu
- valamimas.hu
Érdemes beszédes konfigurációs fájlokat létrehozni, hogy könnyedén megtudjuk állapítani, hogy az adott fájlban melyik webszerverünk beállításai találhatóak meg.
Nyissuk meg egy szövegszerkesztővel a valami.hu-fájt:
vi /etc/nginx/sites-available/valami.hu
Illesszük be a következő sorokat:
Ha vi szövegszerkesztőt használunk, akkor először nyomjuk meg az I billentyűzetet, hogy tudjuk a fájlba írni.
Mentéshez nyomjuk meg az Esc billentyűzetet, majd gépeljük be, hogy :w
Kilépés: Esc majd :q
Mentés és kilépés Esc majd :wq
Kilépés mentés nélkül: Esc majd :q!
server {
listen 80;
server_name valami.hu, www.valami.hu;
root /var/www/html;
location /.well-known/ {
root /var/www/html/;
}
location / {
return 301 https://valami.hu$request_uri;
}
}
Beállítottuk a valami.hu és a www.valami.hu webes elérést is. A Let's Encrypt-nek beállítottuk, hogy a /var/www/html/.well-known mappában keresse a hitelesítéshez szükséges fájlokat, majd minden más beérkező kérést a https://valami.hu-ra irányítottunk. Tehát ha valaki a www-ről érkezik, automatikusan át lesz irányítva a www nélküli címre. Ha jobban preferálod a www-s címet, egyszerűen csak írd elé a www.-ot. Ha pedig nem szeretnéd beállítani a www-s címet, egyszerűen a server_name második www-s értékét hagyd el.
A másik két webszerver fájlja is ugyan így fog kinézni, annyi különbséggel, hogy fent más lesz a server_name, alul pedig máshova kell irányítani, tehát másoljuk le a most létrehozott fájt és mentsük el masik.valami.hu és valamimas.hu néven.
cp /etc/nginx/sites-available/valami.hu /etc/nginx/sites-available/masik.valami.hu
cp /etc/nginx/sites-available/valami.hu /etc/nginx/sites-available/valamimas.hu
Nyissuk meg a fájlokat és írjuk át a server_name-et és lentebb a valami.hu-t masik.valami.hu-ra és valamimas.hu-ra
Engedélyezzük a weboldalakat, ellenőrizzük, hogy a konfigurációs fájlok nem hibások, majd indítsuk újra a webszervert:
# Engedélyezés:
ln -s /etc/nginx/sites-available/valami.hu /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/masik.valami.hu /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/valamimas.hu /etc/nginx/sites-enabled/
# Tesztelés:
nginx -t
# Ha nincs hiba, inditsuk újra a webszerver
systemctl reload nginx
Ha nincs hiba az nginx -t parancsra a következőt fogjuk visszakapni:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Let's Encrypt telepítése és tanúsítvány igénylés
apt install certbot -y
Telepítés után igényeljünk tanúsítványokat a weboldalaknak.
certbot certonly --authenticator webroot -w /var/www/html -d valami.hu -d www.valami.hu
certbot certonly --authenticator webroot -w /var/www/html -d masik.valami.hu -d www.masik.valami.hu
certbot certonly --authenticator webroot -w /var/www/html -d valamimas.hu -d www.valamimas.hu
Nginx SSL és Reverse Proxy beállítása
Miután sikeresen elkészültek az SSL tanúsítványaink nyissuk meg újra a webszerver konfigurációs fájlt:
vi /etc/nginx/sites-available/valami.hu
Majd illesszük be a következő sorokat a fájl végébe.
A Let's Encrypt a /etc/letsencrypt/live/DomainNév/ mappában tárolja a domainhoz tartozó tanúsítványt.
server {
listen 443 ssl;
server_name valami.hu;
ssl_certificate /etc/letsencrypt/live/valami.hu/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/valami.hu/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8830;
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_redirect off;
}
}
server {
listen 443 ssl;
server_name www.valami.hu;
ssl_certificate /etc/letsencrypt/live/valami.hu/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/valami.hu/privkey.pem;
location / {
return 301 https://valami.hu$request_uri;
}
}
Beállításra került az SSL és a Reverse Proxy is. A fenti példa alapján ugyan ezen a gépen van telepítve a docker amiben konténerben fut két webszerver a valami.hu és a valamimas.hu, ezért a proxy_pass-hoz a localhostot, vagyis a 127.0.0.1-et adtam meg. A masik.valami.hu esetén pedig a belső hálózat IP címét kell írni és a 80-as portot, mert egy másik szerveren fut pl.: 192.168.1.210:80
Mivel korábban azt állítottuk, be hogy a www nélküli címre legyen irányítva minden forgalom, itt is meg kell tenni, de vigyázzunk, nem lehet 1 server_name alatt a www-s és a www nélküli cím, mert végtelen átirányításba fog kerülni az oldalunk ami miatt elérhetetlen lesz.
Adjuk hozzá ezeket a sorokat, a másik két webszerverhez is, majd teszteljük az nginx -t paranccsal, hogy nincs benne hiba, majd indítsuk újra a webszervert a systemctl reload nginx paranccsal.
Végezetül a valami.hu végleges konfigurációs fájlja így nézz ki:
server {
listen 80;
server_name valami.hu www.valami.hu;
root /var/www/html;
location /.well-known/ {
root /var/www/html/;
}
location / {
return 301 https://valami.hu$request_uri;
}
}
server {
listen 443 ssl;
server_name valami.hu;
ssl_certificate /etc/letsencrypt/live/valami.hu/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/valami.hu/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8830;
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_redirect off;
}
}
server {
listen 443 ssl;
server_name www.valami.hu;
ssl_certificate /etc/letsencrypt/live/valami.hu/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/valami.hu/privkey.pem;
location / {
return 301 https://valami.hu$request_uri;
}
}
SSL Tanúsítvány automatikus megújítása
A Let's Encrypt tanúsítványok 90 napig érvényesek, ezért mindig meg kell újítani. Adjuk hozzá a megújító parancsot a crontab-hoz, amit minden nap 0:30-kor lefuttat és a lejáró tanúsítványokat automatikusan megújítja.
crontab -e
Adjuk a következő sort a fájl végéhez:
30 0 * * * certbot renew
Hiba megoldás a következőre: Túl nagy a fájlméret! Nem tudok fájt feltölteni!
Bizonyos esetekben előfordulhat, hogy fájlt kell feltöteni, de közli a rendszer velünk, hogy túl nagy a fájlméret. Ezt úgy tudjuk megoldani, hogy hozzáadjuk Az SSL-es verzióhoz a client_max_body_size beállítást és megadjuk, hogy mekkora a maximális megengedett feltölthető fájlméret (pl.: client_max_body_size 64M;)
A konfigurációs fájlban ez a beállítás pedig valahogy így nézz ki:
...
server {
listen 443 ssl;
server_name valami.hu;
ssl_certificate /etc/letsencrypt/live/valami.hu/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/valami.hu/privkey.pem;
client_max_body_size 64M;
location / {
proxy_pass http://127.0.0.1:8830;
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_redirect off;
}
}
...
A beállítás után ne felejtsük el, újraindítani a nginx szervert!
systemctl reload nginx