Konfiguriranje Nginxa kao obrnutog proxyja za pozadinske aplikacije | INTROSERV
EUR
european

EUR

usa

USD

Croatia Hr
Ex. VAT Ex. VAT 0%

Konfiguriranje Nginxa kao obrnutog proxyja za pozadinske aplikacije

Uvod

U modernim postavkama servera, aplikacije rijetko komuniciraju direktno s internetom. Umjesto toga, obrnuti proxy se nalazi ispred njih i obrađuje dolazne zahtjeve klijenata. Nginx je jedan od najpopularnijih alata za ovaj posao jer je brz, pouzdan i jednostavan za konfiguriranje. U ovom vodiču naučit ćete kako konfigurirati Nginx kao obrnuti proxy za aplikaciju na pozadinskom serveru koja radi na istom serveru.

Što je obrnuti proxy?

Obrnuti proxy je server koji:

  • Prihvaća zahtjeve od klijenata (preglednici, API-ji, itd.)
  • Prosljeđuje te zahtjeve aplikaciji na pozadinskom serveru
  • Šalje odgovor pozadinskog servera natrag klijentu

Klijent nikada ne komunicira direktno s aplikacijom na pozadinskom serveru.

Obrnuti proxy vs direktni pristup

Bez obrnutog proxyja:

Klijent ---> Aplikacija na pozadinskom serveru (port 3000)

S obrnutim proxyjem:

Klijent ---> Nginx (port 80, 443) ---> Aplikacija na pozadinskom serveru (port 3000)

Zašto koristiti Nginx kao obrnuti proxy?

Korištenje Nginxa ispred vaše aplikacije omogućuje vam:

  • Izlaganje samo portova 80/443 internetu
  • Skrivanje pozadinskih servisa od direktnog pristupa
  • Prekidanje HTTPS (TLS) na jednom mjestu
  • Dodavanje zapisivanja, kontrole pristupa i ograničavanja brzine
  • Pokretanje više aplikacija na jednom serveru

Za sistemske administratore, to znači bolju sigurnost i lakše upravljanje.

Scenarij korišten u ovom vodiču

Kako bismo stvari pojednostavili, koristit ćemo sljedeću postavku:

  • Nginx sluša na portu 80
  • Aplikacija na pozadinskom serveru sluša na 127.0.0.1:3000
  • Zahtjevi na http://example.com prosljeđuju se na pozadinski server

Dijagram toka prometa

[ Preglednik ] | v [ Nginx example.com:80,443 ] | v [ Aplikacija na pozadinskom serveru 127.0.0.1:3000 ]

Preduvjeti

Prije početka, provjerite imate li:

  • Linux server s najnovijim Debian stable
  • Root ili sudo pristup
  • Aplikaciju na pozadinskom serveru koja već radi (na primjer, Node.js, Python ili Java aplikacija)
  • Osnovno poznavanje Linux terminala

Instalirajte Nginx

Ažurirajte popise paketa i instalirajte Nginx i curl (za testiranje postavki):

sudo apt update

sudo apt install nginx curl

Provjerite radi li Nginx:

systemctl status nginx

Trebali biste vidjeti "active (running)" u izlazu.

Testirajte Nginx lokalno:

curl http://localhost

Ako Nginx radi, primit ćete zadanu stranicu dobrodošlice.

Razumijevanje strukture konfiguracije Nginxa

Konfiguracijske datoteke Nginxa obično se pohranjuju u /etc/nginx/. Važne direktorije:

  • /etc/nginx/nginx.conf — glavna konfiguracijska datoteka
  • /etc/nginx/sites-available/ — konfiguracijske datoteke stranica (nisu aktivne)
  • /etc/nginx/sites-enabled/ — omogućene konfiguracije stranica (simboličke poveznice)

Nginx čita konfiguracijske datoteke iz mape sites-enabled, a ne direktno iz sites-available. Preporučuje se kreirati konfiguracijske datoteke stranica u sites-available, a zatim kreirati simboličke poveznice na njih u sites-enabled.

Kreirajte konfiguraciju obrnutog proxyja

Kreirajte novu datoteku stranice

sudo nano /etc/nginx/sites-available/reverse-proxy.conf

Dodajte konfiguraciju obrnutog proxyja

server { listen 80; server_name 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; } }

Razumijevanje konfiguracije

Blok servera

server { listen 80; server_name example.com; }

  • listen 80; — Nginx sluša HTTP promet na portu 80
  • server_name example.com; — naziv domene na koji ovaj blok servera odgovara

Blok lokacije

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; }

  • location / — odgovara svim dolaznim URL-ovima
  • proxy_pass — prosljeđuje zahtjeve aplikaciji na pozadinskom serveru

Proxy zaglavlja

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;

Ova zaglavlja osiguravaju da pozadinski server zna:

  • Izvorni naziv domene
  • Stvarnu IP adresu klijenta
  • Je li zahtjev bio HTTP ili HTTPS

Bez ovih zaglavlja, aplikacije na pozadinskom serveru mogu bilježiti netočne informacije o klijentima.

Omogućite konfiguraciju

Onemogućite zadanu Nginx stranicu kako biste izbjegli sukobe na portu 80:

sudo rm /etc/nginx/sites-enabled/default

Kreirajte simboličku poveznicu za omogućavanje stranice:

sudo ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/

Testirajte konfiguraciju na sintaktičke greške:

sudo nginx -t

Ako je test uspješan, ponovno učitajte Nginx:

sudo systemctl reload nginx

Testirajte obrnuti proxy

Testirajte sa servera:

curl http://example.com

Otvorite http://example.com u pregledniku za testiranje. Trebali biste primiti odgovor od vaše aplikacije na pozadinskom serveru, a ne zadanu stranicu Nginxa. Ako je sve ispravno konfigurirano, aplikacija na pozadinskom serveru će se učitati.

Kako se zahtjev obrađuje

  1. Klijent šalje zahtjev na example.com
  2. Nginx prima zahtjev na portu 80
  3. Nginx prosljeđuje zahtjev na 127.0.0.1:3000
  4. Pozadinski server obrađuje zahtjev
  5. Odgovor se vraća kroz Nginx
  6. Klijent prima odgovor

Uobičajene greške i rješavanje problema

Pozadinski server ne radi

  • Provjerite radi li aplikacija
  • Potvrdite ispravnost porta

ss -tuln | grep 3000

Pogrešna adresa proxy_pass

  • Uvijek uključite http://
  • Provjerite ispravnost IP adrese i porta

Zaboravljanje ponovnog učitavanja Nginxa

Nakon svake promjene konfiguracije:

sudo systemctl reload nginx

Vatrozid blokira pristup

Provjerite je li port 80 otvoren:

sudo ufw allow 80

Opcionalna poboljšanja

Kada obrnuti proxy radi, razmislite o:

  • Omogućavanju HTTPS-a s Let's Encrypt
  • Pokretanju više aplikacija na pozadinskom serveru
  • Dodavanju zapisnika pristupa i grešaka
  • Konfiguriranju balansiranja opterećenja
  • Podršci za WebSocket veze

Konfiguracija HTTPS-a

U produkcijskim okruženjima uvijek biste trebali koristiti HTTPS umjesto HTTP-a. HTTPS šifrira promet između klijenta i vašeg servera, štiteći lozinke, API tokene, kolačiće i druge osjetljive podatke. Nginx podržava HTTPS koristeći SSL/TLS certifikate. U ovom dijelu naučit ćete:

  • Što je Certbot
  • Kako instalirati Certbot
  • Kako Certbot automatski mijenja konfiguraciju Nginxa
  • Kako ručno konfigurirati Nginx koristeći kupljeni certifikat

Što je Certbot?

Certbot je alat koji automatski dobiva i instalira besplatne SSL/TLS certifikate od Let's Encrypt. Može:

  • Zatražiti besplatni certifikat
  • Provjeriti vlasništvo nad domenom
  • Automatski konfigurirati Nginx
  • Postaviti automatsko obnavljanje certifikata

Za početnike i većinu produkcijskih okruženja, Certbot je najlakši i najsigurniji način za omogućavanje HTTPS-a.

Instaliranje Certbota

Ažurirajte popise paketa:

sudo apt update

Instalirajte Certbot i Nginx dodatak:

sudo apt install certbot python3-certbot-nginx

Paket python3-certbot-nginx omogućuje Certbotu automatsko mijenjanje vaše Nginx konfiguracije.

Dobivanje i instaliranje certifikata

Prije pokretanja Certbota, provjerite:

  • Vaše ime domene pokazuje na javnu IP adresu vašeg servera
  • Nginx radi
  • Portovi 80 i 443 su otvoreni u vatrozidu

Pokrenite:

sudo certbot --nginx

Certbot će:

  1. Pitati koju domenu želite osigurati
  2. Provjeriti vlasništvo nad domenom
  3. Automatski ažurirati vašu Nginx konfiguraciju
  4. Ponovno učitati Nginx

Info

Certbot automatski mijenja vašu Nginx konfiguraciju. Obično dodaje novi blok servera za port 443 (HTTPS), dodaje putanje SSL certifikata, konfigurira preusmjeravanje s HTTP-a na HTTPS ako odaberete tu opciju i dodaje preporučene SSL postavke.

Primjer konfiguracije dodane od strane Certbota:

server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 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; } }

Certbot također može izmijeniti HTTP blok za preusmjeravanje prometa:

server { listen 80; server_name example.com; return 301 https://$host$request_uri; }

Budući da Certbot automatski uređuje konfiguracijske datoteke, preporučuje se:

  • Čuvati sigurnosne kopije vaše konfiguracije
  • Razumjeti koje su promjene napravljene
  • Uvijek testirati konfiguraciju nakon promjena

Testirajte konfiguraciju:

sudo nginx -t

Automatsko obnavljanje certifikata

Let's Encrypt certifikati vrijede 90 dana. Certbot automatski instalira timer za obnavljanje. Možete testirati obnavljanje s:

sudo certbot renew --dry-run

Ako je ispravno konfigurirano, obnavljanje će se dogoditi automatski bez prekida rada.

Korištenje kupljenog SSL certifikata

Ako kupite SSL certifikat od autoriteta za certifikate (CA), morate ručno konfigurirati Nginx. Nakon kupnje, obično dobijete:

  • Datoteku certifikata (npr. example.com.crt)
  • Privatni ključ (example.com.key)
  • Datoteku CA paketa (ca_bundle.crt)

Kreirajte sigurni direktorij:

sudo mkdir -p /etc/nginx/ssl

sudo chmod 700 /etc/nginx/ssl

Kopirajte svoje datoteke certifikata u ovaj direktorij.

Primjer HTTPS konfiguracije s kupljenim certifikatom:

server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; 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; } }

Dodajte preusmjeravanje s HTTP-a na HTTPS:

server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }

Ponovno učitajte Nginx nakon ručne konfiguracije:

sudo nginx -t

sudo systemctl reload nginx

Tip

Za početnike sistemske administratore, Certbot se snažno preporučuje osim ako vaša organizacija ne zahtijeva komercijalne certifikate.

Sažetak

U ovom vodiču naučili ste:

  • Što je obrnuti proxy i zašto je koristan
  • Kako Nginx prosljeđuje zahtjeve aplikacijama na pozadinskom serveru
  • Kako kreirati i omogućiti konfiguraciju obrnutog proxyja
  • Kako testirati i rješavati uobičajene probleme
  • Kako konfigurirati HTTPS

Nginx obrnuto proxyiranje je temeljna vještina za sistemske administratore i široko se koristi u produkcijskim okruženjima.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA