Nginx – Konfigurace Reverzní Proxy (NGINX Reverse Proxy)

By | 28/10/2024

Last Updated on 27/10/2025 by administrator

Nginx – Konfigurace Reverzní Proxy (NGINX Reverse Proxy)

Nginx – Konfigurace Reverzní Proxy (NGINX Reverse Proxy)

Motivace:

Nginx lze nakonfigurovat tak, aby fungoval jako reverzní server. Reverzní proxy (reverse proxy) je server, který přijímá požadavky od klientů (např. webových prohlížečů) a přeposílá je na backendový server (např. webový server nebo aplikaci). Nginx je populární webový server a reverzní proxy server.

Návod ukazuje tak nakonfigurovat Reverzní proxy pro dva webové servery a následně pro ně získat SSL certifikát.

Ačkoliv je mnoho účelu proč použít reverzní proxy, hlavní motivací bylo mít více webových serveru pod jednou veřejnou IP adresou.

OS:

Implementace byla prováděna na Ubuntu 22.04 LTS. Nicméně návod bude pravděpodobně aplikovatelný na nižší verze Ubuntu.

Topologie sítě:

nginx reverse proxy

Princip funkce:

Mějme dva webové servery (tzn. backend servery) pod IP adresama 192.168.0.150 a 192.168.0.151. Ty jsou schované za Nginx reverzní proxy pod IP adresou 192.168.0.120.

Klient (například webový prohlížeč) zadá webovou adresu mujweb1.mooo.com do svého prohlížeče a odešle HTTPS požadavek na tuto adresu. Doménové jméno mujweb1.mooo.com je je přeloženo na nějakém DNS serveru na IP adresu 7.47.97.41. Požadavek od klienta nejprve dorazí k routeru, který přeloží IP adresu 7.47.97.41 na 192.168.0.120 a tímto požadavek dorazí na Nginx reverse proxy. Nginx reverse proxy analyzuje příchozí HTTPS požadavek od klienta. Podle své konfigurace rozhodne, na který backend server přesměrovat požadavek. V tomto případě požadavek na mujweb1.mooo.com přesměruje na IP adresu 192.168.0.150.

Implementace [1]:

Veškterá implemetace se provádí na Nginx reverzním proxy serveru (192.168.0.120).

Instalace Nginx:

Aktualizace seznamu balíčků z repozitářů:

sudo apt update

Instalace služby Nginx:

apt install nginx -y

Pokud je nakonfigurovaný firewall (lze zjistit příkazem sudo ufw status), je nutné povolit provoz TCP/443 a TCP/80:

sudo ufw allow 443/tcp
sudo ufw allow 80/tcp

Konfigurace Virtualhosta pro doménu mujweb1.mooo.com:

Vytvořit soubor s názvem mujweb1.mooo.com:

vi /etc/nginx/sites-available/mujweb1.mooo.com

a vložit do něj tento konfigurační blok níže:

server {
  listen 80;
  server_name mujweb1.mooo.com;

  location / {
    proxy_pass http://192.168.0.150;
    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;
  }
}

Legenda:

  • listen 80; – Nginx naslouchá na portu 80, který je obvyklým portem pro HTTP.
  • server_name your_domain.com; – Definuje doménu pro tento virtuálního host.
  • location / { … }: Konfigurace pro lokalitu, ve které se nastavuje reverzní proxy.
  • proxy_pass http://192.168.0.151; – Nastavuje IP adresu a port backendového serveru (jeho reálnou IP adresu), na který budou směrovány požadavky.
  • proxy_set_header: – Nastavuje některé HTTP hlavičky pro předání informací z původního požadavku na backendový server.

Pozn. Pokud backend server běží pod HTTPS, stačí upravit proxy_pass na https://192.168.0.151

Vytvořit symbolický link mezi konfiguračním souborem pro virtuálního hosta /etc/nginx/sites-available/mujweb1.mooo.com a adresářem /etc/nginx/sites-enabled/, který Nginx načítá pro aktivní virtuální hosty:

sudo ln -s /etc/nginx/sites-available/mujweb1.mooo.com /etc/nginx/sites-enabled/

Konfigurace Virtualhosta pro doménu mujweb2.mooo.com:

Vytvořit soubor s názvem mujweb2.mooo.com:

vi /etc/nginx/sites-available/mujweb2.mooo.com

a vložit do něj tento konfigurační blok níže:

server {
  listen 80;
  server_name mujweb2.mooo.com;

  location / {
    proxy_pass http://192.168.0.151; 
    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;
  }
}

Vytvořit symbolický link mezi konfiguračním souborem pro virtuálního hosta /etc/nginx/sites-available/mujweb2.mooo.com a adresářem /etc/nginx/sites-enabled/, který Nginx načítá pro aktivní virtuální hosty:

sudo ln -s /etc/nginx/sites-available/mujweb2.mooo.com /etc/nginx/sites-enabled/

Pro zkontrolování Nginx syntaxe použít:

sudo nginx -t

Provést restart služby Nginx:

sudo systemctl reload nginx

Ověření funkčnosti:

Pokud ještě nejsou doménová jména mujweb1.mooo.com a mujweb2.mooo.com namapována na veřejných DNS serverech, lze si ověřit funkčnost pomocí přidáním záznamu do hosts file souboru, počítače přistupující k webovému serveru. U Windowsu se hosts file nachází v lokaci C:\Windows\System32\drivers\etc\hosts a u linuxových distribucí v /etc/hosts.

Následně je možné odzkoušet v prohlížeči http://mujweb1.mooo.com a http://mujweb2.mooo.com

Při problémech doporučuji vymazat cache prohlížeče.

Zabezpečení serverů pomocí SSL:

Pro zabezpečení webových serverů (pro každé doménové jméno) je možné získat certifikát zdarma na 3 měsíce. Vše se opět konfiguruje na Nginx reverzním proxy serveru (192.168.0.120).

V tomto článku je uvedeno jak nainstalovat Certbota na Nginx server.

Install Certbot Nginx (Instalace Certbot Nginx)

Ověření certifikátů doménových jmen:

Pro mujweb1.mooo.com:

Nginx - Konfigurace Reverzní ProxyPro mujweb2.mooo.com:

Nginx - Konfigurace Reverzní ProxyPři problémech doporučuji vymazat cache prohlížeče.

Zvýšení zabezpečení – Security headers

Nasazením hlaviček lze nastavit bezpečnostní pravidla mezi webovým prohlížečem a serverem a lze ochránit nejen web před různými typy útoků, ale také návštěvníky, na které můžou být útoky vedeny. Je to novější způsob aktivní ochrany webu a aplikací a podporují je všechny moderní webové prohlížeče, zatímco starší prohlížeče by je měly ignorovat.

Vše se opět konfiguruje na Nginx reverzním proxy serveru (192.168.0.120).

V tomto článku je uvedeno jak bezpečnostní hlavičky nasadit na Nginx server

Your .htaccess file does not contain all recommended security headers

Zdroj:

[1] https://blog.knoldus.com/nginx-understanding-and-setting-up-a-reverse-proxy-server/

[2] ChatGPT

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *