Nginx reverse proxy iestatīšana soli pa solim
Reverse proxy uz Nginx pieņem pieprasījumus uz 80. un 443. porta un pāradresē tos lietojumprogrammai uz lokālā porta (piemēram 127.0.0.1:3000), pievienojot vajadzīgās galvenes. Tā jūs iegūstat vienotu ieejas punktu, HTTPS un slodzes balansēšanu. Zemāk — darbojoša konfigurācija ar starpniekservera iestatījumiem, galvenēm, TLS un WebSocket.
Ko dara reverse proxy
- Pieņem ārējos HTTP/HTTPS pieprasījumus un nodod tos aizmugursistēmai (Node.js, Python, PHP-FPM u.tml.).
- Terminē TLS: lietojumprogramma strādā pa HTTP, bet šifrēšanu uzņemas Nginx.
- Slēpj iekšējo struktūru un lietojumprogrammu portus aiz viena domēna.
- Ļauj balansēt slodzi starp vairākām aizmugursistēmām.
1. solis. Instalējiet Nginx
sudo apt update
sudo apt install nginx
sudo systemctl enable --now nginx
2. solis. Izveidojiet vietnes konfigurāciju
Izveidojiet virtuālā resursdatora failu:
sudo nano /etc/nginx/sites-available/app.conf
Pamata reverse proxy uz lietojumprogrammu portā 3000:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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;
}
}
Kāpēc vajadzīgas galvenes: bez X-Forwarded-For un X-Real-IP lietojumprogramma redzēs IP adresi 127.0.0.1, nevis īsto klientu, bet X-Forwarded-Proto pasaka aizmugursistēmai, ka sākotnējais pieprasījums bija HTTPS.
3. solis. Aktivizējiet konfigurāciju
sudo ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Komanda nginx -t pārbauda sintaksi pirms pārlādes — nelaidiet to garām.
4. solis. WebSocket atbalsts
Ja lietojumprogramma izmanto WebSocket (čati, tiešraides atjauninājumi), pievienojiet location blokā Upgrade galvenes:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
5. solis. Ieslēdziet HTTPS
Instalējiet certbot un saņemiet Let’s Encrypt sertifikātu — tas pats ierakstīs TLS konfigurācijā:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
Pēc tam Nginx klausīsies 443. portā ar sertifikātu, bet pieprasījumi no 80. porta tiks pāradresēti uz HTTPS.
Vairāku aizmugursistēmu balansēšana
Slodzes sadalīšanai aprakstiet upstream grupu:
upstream backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Noildzes un augšupielādējamo failu izmērs
Pēc noklusējuma Nginx ierobežo pieprasījuma ķermeni ar 1 MB un pārtrauc lēnas aizmugursistēmas atbildes. Lietojumprogrammām ar failu augšupielādi un ilgām operācijām palieliniet limitus server vai location blokā:
client_max_body_size 50m;
proxy_connect_timeout 60s;
proxy_send_timeout 120s;
proxy_read_timeout 120s;
Direktīva client_max_body_size nosaka maksimālo augšupielādes izmēru, bet proxy_* noildzes — cik ilgi gaidīt savienojumu un aizmugursistēmas atbildi, pirms atgriezt 504 Gateway Timeout.
Starpniekservera iestatīšana pēc ceļa
Vienu domēnu var sadalīt starp vairākām lietojumprogrammām pēc URL prefiksa. Piemēram, /api/ — uz aizmugursistēmu, pārējo — uz priekšgalu:
location /api/ {
proxy_pass http://127.0.0.1:4000/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
proxy_pass http://127.0.0.1:3000;
}
Pievērsiet uzmanību noslēdzošajai slīpsvītrai proxy_pass http://127.0.0.1:4000/ — tā nogriež prefiksu /api/, un aizmugursistēma saņem ceļu bez tā.
Galvenās direktīvas
| Direktīva | Nozīme |
|---|---|
proxy_pass |
aizmugursistēmas adrese |
proxy_set_header |
galveņu nodošana lietojumprogrammai |
proxy_http_version 1.1 |
nepieciešama keep-alive un WebSocket |
upstream |
serveru grupa balansēšanai |
Biežākie jautājumi
Kļūda 502 Bad Gateway — kāds ir iemesls?
Nginx nespēja savienoties ar aizmugursistēmu: lietojumprogramma nav palaista, klausās citā portā vai ir avarējusi. Pārbaudiet ss -tulpn | grep 3000 un lietojumprogrammas žurnālus.
Lietojumprogramma redz IP 127.0.0.1, nevis klientu — kāpēc?
Nav nodotas galvenes. Pievienojiet X-Forwarded-For un X-Real-IP un iestatiet lietojumprogrammu uzticēties šīm galvenēm.
Kā pārbaudīt konfigurāciju pirms piemērošanas?
Izpildiet sudo nginx -t — tas parādīs sintakses kļūdas bez servisa pārlādes.
Vai aizmugursistēmas ports jāatver uz āru?
Nē. Aizmugursistēma klausās uz 127.0.0.1, uz āru atvērti tikai Nginx 80. un 443. porti. Tā ir drošāk.
Kā atjaunot TLS sertifikātu?
certbot uzstāda automātiskās atjaunošanas taimeri. Pārbaudīt: sudo certbot renew --dry-run.
Nepieciešams serveris Nginx un jūsu lietojumprogrammu izvietošanai? Izvietojiet VPS ar Linux sadaļā VPS noma vai pasūtiet iestatīšanu caur serveru administrēšanu.