nginx pöördproksina (reverse proxy): juhend
Sellel lehel
Pöördproksi asub sinu rakenduste ees ja edastab külastajate päringud neile. Kui nginx on ees, saab mõnel pordil töötavast Node.js-rakendusest, Docker-konteinerist või juhtpaneelist https://app.example.com – koos HTTPS-i, õigete päiste ja ühe kohaga, kust kõike hallata.
See juhend seadistab nginx-i Ubuntus samm-sammult pöördproksiks: server-plokk, päised, WebSockets, tasuta HTTPS ja vead, millega kõige tõenäolisemalt kokku puutud.
Mida pöördproksi teeb
- Üks avalik sisenemispunkt. nginx kuulab porte 80 ja 443 ning suunab iga domeeni või tee õigesse rakendusse, nii et rakendused ise ei ole kunagi otse internetile avatud.
- HTTPS ühes kohas. Sertifikaate haldab nginx; selle taga olevad rakendused võivad localhostis rääkida tavalist HTTP-d.
- Mitu rakendust ühel serveril.
app.example.com,api.example.comjaexample.com/blogvõivad kõik viia eri teenusesse. - Lisad: tihendamine, vahemälu, üleslaadimise piirangud ja ligipääsureeglid, ilma rakendust puutumata.
1. samm: paigalda nginx
sudo apt update sudo apt install nginx
Ava http://your-server-ip ja peaksid nägema nginx-i tervituslehte. Kui kasutad ufw-d, luba veebiliiklus käsuga sudo ufw allow 'Nginx Full'.
Veendu, et rakendus töötab ja on serveris endas kättesaadav, näiteks käsuga curl http://127.0.0.1:3000. Kui see ei õnnestu, ei õnnestu ka nginx-il.
Käita nginx-i ja oma rakendusi täis root-õigustega: HytHost KVM VPS-paketid alates €2.92/kuu.
Vaata VPS-pakette2. samm: loo proksi server-plokk
Ubuntus saab iga sait oma faili kaustas /etc/nginx/sites-available/ ja see lülitatakse sisse lingiga kaustas sites-enabled. Loo fail /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;
}
}
Lülita see sisse, testi seadistust ja laadi uuesti:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Suuna domeeni A-kirje oma serverile ja http://app.example.com näitab nüüd sinu rakendust. Käivita enne uuesti laadimist alati nginx -t: see püüab trükivead kinni enne, kui need saidi maha võtavad.
Päised ja lõpukaldkriips
Hostedastab domeeni, mida külastaja küsis. Ilma selleta saadab nginx aadressiproxy_pass-ist ja rakendused, mis koostavad linke hostist, lähevad katki.X-Real-IPjaX-Forwarded-Foredastavad külastaja IP-aadressi. Ilma nendeta paistab iga päring tulevat aadressilt127.0.0.1.X-Forwarded-Protoütleb rakendusele, kas külastaja kasutas HTTPS-i, et see ei suunaks lõputus tsüklis ümber.
Ubuntu nginx-i pakett sisaldab neid ridu failis /etc/nginx/proxy_params, nii et include proxy_params; on otsetee.
Lõpukaldkriips on oluline. Rakenduse jaoks, mis asub mingi tee all:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Kui pordi järel on kaldkriips, jõuab /app/login rakendusse kujul /login. Ilma selleta saab rakendus kogu /app/login.
WebSockets
Vestlusrakendused, reaalajas juhtpaneelid ja paljud halduspaneelid kasutavad WebSockets-i, mis vajab kahte lisapäist. Lisa see map üks kord http-plokki, näiteks uude faili /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Seejärel location-plokki:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx sulgeb proksitud ühenduse, mis 60 sekundi jooksul midagi ei saada; pikem proxy_read_timeout hoiab vaiksed WebSocketi ühendused avatuna. proxy_http_version 1.1 on vaikimisi alles alates nginx 1.29.7-st ja Ubuntu 24.04 tuleb versiooniga 1.24, seega jäta see rida alles.
3. samm: tasuta HTTPS Certbotiga
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot hangib tasuta Let's Encrypti sertifikaadi, lisab HTTPS-i seaded sinu server-plokki ja oskab HTTP suunata HTTPS-ile. Sertifikaati uuendatakse automaatselt; kontrolli seda käsuga sudo certbot renew --dry-run. Sertifikaatidest lähemalt juhendis kuidas saada tasuta SSL-sertifikaat.
Vigade 502, 504 ja 413 parandamine
| Viga | Tavaline põhjus | Lahendus |
|---|---|---|
| 502 Bad Gateway | nginx ei jõua rakenduseni: see on peatatud, jooksis kokku või kuulab teist porti või aadressi | Käivita rakendus, kontrolli porti käsuga curl http://127.0.0.1:PORT, loe /var/log/nginx/error.log |
| 504 Gateway Timeout | Rakendusel kulus vastamiseks üle 60 sekundi | Kiirenda päringut või tõsta selle location-i jaoks proxy_read_timeout väärtust |
| 413 Request Entity Too Large | Üleslaaditav fail on suurem kui nginx-i vaikepiirang 1 MB | Määra server-plokis client_max_body_size 50m; |
| Ümbersuunamise tsükkel | Rakendus ei tea, et külastaja kasutas HTTPS-i | Edasta X-Forwarded-Proto ja ütle rakendusele, et see on proksi taga |
Pärast iga muudatust: sudo nginx -t, seejärel sudo systemctl reload nginx.
Käita seda HytHosti VPS-is
Pöördproksi vajab serverit, kus pordid 80 ja 443 on sinu kontrolli all. HytHosti VPS-paketid töötavad KVM-il täis root-ligipääsu, SSD-salvestuse ja DDoS-kaitsega; vali Ubuntu 24.04 ja järgi ülaltoodud samme. Käitad rakendusi konteinerites? Seadista esmalt Docker juhendiga kuidas paigaldada Docker Ubuntusse ja seo konteinerite pordid aadressiga 127.0.0.1, et neile pääseks ligi ainult nginx.
Korduma kippuvad küsimused
Pöördproksi edastab päringud ühele või mitmele enda taga olevale rakendusele. Koormusejaotur on pöördproksi, mis jagab päringud sama rakenduse mitme koopia vahel. nginx oskab mõlemat, kasutades upstream-plokki, milles koopiad on loetletud.
nginx ei jõua enda taga oleva rakenduseni. Kontrolli, et rakendus töötab ja kuulab proxy_pass-is märgitud aadressi ja porti, ning täpse põhjuse leiad failist /var/log/nginx/error.log.
Ei, kui rakendus töötab samas serveris. nginx hoolitseb külastajate HTTPS-i eest ja suhtleb rakendusega tavalise HTTP kaudu aadressil 127.0.0.1, mis ei lahku kunagi masinast.
Anna igale rakendusele oma server-plokk oma server_name-iga, näiteks app.example.com ja api.example.com, ning igaühele proxy_pass eri pordile.
Jah. Avalda iga konteineri port ainult aadressil 127.0.0.1 ja suuna proxy_pass sellele. Nii jäävad konteinerid avalikust internetist eemale, mis on oluline, sest Dockeri avaldatud pordid lähevad ufw-st mööda.
Majuta oma rakendused nginx-i taga
HytHosti KVM VPS-paketid täis root-ligipääsu, SSD-salvestuse ja DDoS-kaitsega alates €2.92/kuu.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursKas see juhend oli abiks?