Nginx – Konfigurace Reverzní Proxy (NGINX Reverse Proxy)

By | 17/11/2023

Last Updated on 10/12/2023 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.

Instalace Certbot Nginx (Install 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

Dobrovolný dar

Ahoj čtenáři, rád bych tě poprosil aby ses zamyslel, co je vše potřeba ke vzniku článku.
Jakožto amatérský softwarový kutil musím:

1) Nejdříve vše nastudovat v cizích jazycích.
2) Vše následně prakticky vyzkoušet.
3) Svoje poznatky a zkušenosti napsat do článku který si právě přečetl v jazyku kterému rozumíš.
4) Dát článku hlavu a patu a publikovat.

Každý článek zabere několik hodin práce, za kterou mi nikdo neplatí.
Prosím zvaž, kolik času jsem ti právě ušetřil.
Pokud ti to stojí aspoň za cenu jedné kávy, tak mi ji kup.
Předem moc děkuji.

Příspěvek tak můžeš provést zasláním libovolné částky na mé číslo účtu 1558701011/3030 Nebo můžeš dar poslat kliknutím na tento odkaz Podpořit tento WEB , který tě přesměruje na mou platební bránu Revolut.

Dar je také možné poslat ve formě Bitcoinu na BTC peněženku bc1qqdf5fp42a7srwwhh2rut8zr9x4jm5c8fqc9qw6

Veškeré peněžní prostředky budu také používat na zlepšení kvality své webové tvorby a na psaní nových technických návodů. Za každý dar předem děkuji.

Leave a Reply

Your email address will not be published. Required fields are marked *