nginx jako reverzní proxy: návod
Na této stránce
Reverzní proxy stojí před vašimi aplikacemi a předává jim požadavky návštěvníků. S nginx vpředu se z aplikace v Node.js, Docker kontejneru nebo dashboardu běžícího na nějakém portu stane https://app.example.com – s HTTPS, správnými hlavičkami a jedním místem pro správu všeho.
Tento návod krok za krokem nastaví nginx jako reverzní proxy na Ubuntu: server blok, hlavičky, WebSockets, HTTPS zdarma a chyby, na které nejspíš narazíte.
Co dělá reverzní proxy
- Jeden veřejný vstupní bod. nginx naslouchá na portech 80 a 443 a každou doménu nebo cestu přepošle správné aplikaci, takže samotné aplikace nikdy nejsou vystavené internetu.
- HTTPS na jednom místě. Certifikáty spravuje nginx; aplikace za ním mohou na localhostu mluvit obyčejným HTTP.
- Více aplikací na jednom serveru.
app.example.com,api.example.comaexample.com/blogmohou každá vést na jinou službu. - Něco navíc: komprese, cache, limity nahrávání a pravidla přístupu, aniž byste sahali do aplikace.
Krok 1: Instalace nginx
sudo apt update sudo apt install nginx
Otevřete http://your-server-ip a měli byste vidět uvítací stránku nginx. Pokud používáte ufw, povolte webový provoz příkazem sudo ufw allow 'Nginx Full'.
Ověřte, že vaše aplikace běží a je dostupná přímo na serveru, například pomocí curl http://127.0.0.1:3000. Pokud to selže, selže i nginx.
Provozujte nginx a své aplikace s plným rootem: HytHost KVM VPS od €2.92/měs.
Zobrazit VPS tarifyKrok 2: Vytvoření proxy server bloku
Na Ubuntu má každý web svůj soubor v /etc/nginx/sites-available/, který se zapíná odkazem v sites-enabled. Vytvořte /etc/nginx/sites-available/app.example.com:
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}
Zapněte ho, otestujte konfiguraci a načtěte ji znovu:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Nasměrujte A záznam domény na svůj server a na http://app.example.com se zobrazí vaše aplikace. Před každým reloadem spusťte nginx -t: zachytí překlepy dřív, než web shodí.
Hlavičky a koncové lomítko
Hostpředává doménu, kterou návštěvník požadoval. Bez ní nginx pošle adresu zproxy_passa aplikace, které skládají odkazy z hostitele, se rozbijí.X-Real-IPaX-Forwarded-Forpředávají IP adresu návštěvníka. Bez nich vypadá každý požadavek, jako by přišel z127.0.0.1.X-Forwarded-Protoříká aplikaci, zda návštěvník použil HTTPS, aby nepřesměrovávala ve smyčce.
Balíček nginx v Ubuntu tyto řádky obsahuje v /etc/nginx/proxy_params, takže include proxy_params; je zkratka.
Na koncovém lomítku záleží. Pro aplikaci pod cestou:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
S lomítkem za portem dorazí /app/login do aplikace jako /login. Bez něj aplikace dostane celé /app/login.
WebSockets
Chatovací aplikace, živé dashboardy a mnoho administračních panelů používá WebSockets, které potřebují dvě hlavičky navíc. Přidejte tuto mapu jednou do bloku http, například v novém souboru /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Potom do location:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx zavře proxované spojení, které 60 sekund nic nepošle; delší proxy_read_timeout udrží tiché WebSockets otevřené. proxy_http_version 1.1 je výchozí až od nginx 1.29.7 a Ubuntu 24.04 dodává 1.24, takže řádek ponechte.
Krok 3: HTTPS zdarma s Certbotem
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot získá bezplatný certifikát Let's Encrypt, doplní nastavení HTTPS do vašeho server bloku a může přesměrovat HTTP na HTTPS. Certifikát obnovuje automaticky; ověřte to příkazem sudo certbot renew --dry-run. Více o certifikátech v návodu jak získat SSL certifikát zdarma.
Řešení chyb 502, 504 a 413
| Chyba | Obvyklá příčina | Řešení |
|---|---|---|
| 502 Bad Gateway | nginx se nedostane k aplikaci: je zastavená, spadla, nebo naslouchá na jiném portu či adrese | Spusťte aplikaci, ověřte port pomocí curl http://127.0.0.1:PORT, přečtěte /var/log/nginx/error.log |
| 504 Gateway Timeout | Aplikaci trvala odpověď déle než 60 sekund | Zrychlete požadavek, nebo pro danou location zvyšte proxy_read_timeout |
| 413 Request Entity Too Large | Nahrávaný soubor je větší než výchozí limit nginx 1 MB | Nastavte client_max_body_size 50m; v server bloku |
| Smyčka přesměrování | Aplikace neví, že návštěvník použil HTTPS | Předávejte X-Forwarded-Proto a řekněte aplikaci, že běží za proxy |
Po každé změně: sudo nginx -t, potom sudo systemctl reload nginx.
Provozujte to na HytHost VPS
Reverzní proxy potřebuje server, kde máte porty 80 a 443 pod kontrolou. HytHost VPS tarify běží na KVM s plným root přístupem, SSD úložištěm a ochranou proti DDoS; zvolte Ubuntu 24.04 a postupujte podle kroků výše. Provozujete aplikace v kontejnerech? Nejdřív nastavte Docker podle návodu jak nainstalovat Docker na Ubuntu a porty kontejnerů navažte na 127.0.0.1, aby se k nim dostal jen nginx.
Časté dotazy
Reverzní proxy přeposílá požadavky jedné nebo více aplikacím za sebou. Load balancer je reverzní proxy, která rozkládá požadavky mezi několik kopií stejné aplikace. nginx zvládne obojí, s blokem upstream, který kopie vyjmenuje.
nginx se nedostane k aplikaci za sebou. Zkontrolujte, že aplikace běží a naslouchá na adrese a portu z proxy_pass, a přesnou příčinu najdete v /var/log/nginx/error.log.
Ne, pokud aplikace běží na stejném serveru. nginx obstará HTTPS pro návštěvníky a s aplikací komunikuje obyčejným HTTP na 127.0.0.1, které nikdy neopustí stroj.
Dejte každé aplikaci vlastní server blok s vlastním server_name, například app.example.com a api.example.com, každý s proxy_pass na jiný port.
Ano. Port každého kontejneru publikujte jen na 127.0.0.1 a nasměrujte na něj proxy_pass. Kontejnery tak zůstanou mimo veřejný internet, což je důležité, protože publikované porty Dockeru obcházejí ufw.
Hostujte své aplikace za nginx
HytHost KVM VPS s plným root přístupem, SSD úložištěm a ochranou proti DDoS od €2.92/měs.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursByl tento návod užitečný?