Nginx reverse proxy iestatīšana soli pa solim

20 Jan 2026 Autors: Inga Vītola

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.

Inga Vītola