Konfiguriranje Nginxa kot povratnega proxy strežnika za zaledne aplikacije | INTROSERV
EUR
european

EUR

usa

USD

Slovenia Sl
Ex. VAT Ex. VAT 0%

Konfiguriranje Nginxa kot povratnega proxy strežnika za zaledne aplikacije

Uvod

V sodobnih strežniških postavitvah aplikacije redko komunicirajo neposredno z internetom. Namesto tega pred njimi stoji povratni proxy, ki obravnava dohodne zahteve strank. Nginx je eno izmed najbolj priljubljenih orodij za to nalogo, ker je hiter, zanesljiv in enostaven za konfiguracijo. V tem vodiču se boste naučili, kako konfigurirati Nginx kot povratni proxy za zaledno aplikacijo, ki teče na istem strežniku.

Kaj je povratni proxy?

Povratni proxy je strežnik, ki:

  • Sprejema zahteve od strank (brskalniki, API-ji itd.)
  • Te zahteve posreduje zaledni aplikaciji
  • Pošlje odgovor zaledja nazaj stranki

Stranka nikoli ne komunicira neposredno z zaledno aplikacijo.

Povratni proxy proti neposrednemu dostopu

Brez povratnega proxyja:

Stranka ---> Zaledna aplikacija (port 3000)

S povratnim proxyjem:

Stranka ---> Nginx (port 80, 443) ---> Zaledna aplikacija (port 3000)

Zakaj uporabiti Nginx kot povratni proxy?

Uporaba Nginx pred vašo aplikacijo vam omogoča:

  • Izpostaviti le porte 80/443 internetu
  • Skriti zaledne storitve pred neposrednim dostopom
  • Zaključiti HTTPS (TLS) na enem mestu
  • Dodati beleženje, nadzor dostopa in omejevanje hitrosti
  • Zagnati več aplikacij na enem strežniku

Za sistemske administratorje to pomeni boljšo varnost in lažje upravljanje.

Scenarij uporabljen v tem vodiču

Da bo stvar preprosta, bomo uporabili naslednjo postavitev:

  • Nginx posluša na portu 80
  • Zaledna aplikacija posluša na 127.0.0.1:3000
  • Zahteve na http://example.com so posredovane zaledju

Diagram poteka prometa

[ Brskalnik ] | v [ Nginx example.com:80,443 ] | v [ Zaledna aplikacija 127.0.0.1:3000 ]

Predpogoji

Pred začetkom se prepričajte, da imate:

  • Linux strežnik z najnovejšo stabilno različico Debian
  • Dostop do root ali sudo
  • Zaledno aplikacijo, ki že teče (na primer, Node.js, Python ali Java aplikacija)
  • Osnovno poznavanje Linux terminala

Namestite Nginx

Posodobite sezname paketov in namestite Nginx ter curl (za testiranje postavitve):

sudo apt update

sudo apt install nginx curl

Preverite, da Nginx teče:

systemctl status nginx

V izpisu bi morali videti "active (running)".

Testirajte Nginx lokalno:

curl http://localhost

Če Nginx deluje, boste prejeli privzeto stran dobrodošlice.

Razumeti strukturo konfiguracije Nginx

Konfiguracijske datoteke Nginx so običajno shranjene v /etc/nginx/. Pomembni imeniki:

  • /etc/nginx/nginx.conf — glavna konfiguracijska datoteka
  • /etc/nginx/sites-available/ — konfiguracijske datoteke strani (neaktivne)
  • /etc/nginx/sites-enabled/ — omogočene konfiguracije strani (simbolične povezave)

Nginx bere konfiguracijske datoteke iz mape sites-enabled, ne neposredno iz sites-available. Priporočljivo je ustvariti konfiguracijske datoteke strani v sites-available in nato ustvariti simbolične povezave do njih v sites-enabled.

Ustvarite konfiguracijo povratnega proxyja

Ustvarite novo datoteko strani

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

Dodajte konfiguracijo povratnega 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; } }

Razumeti konfiguracijo

Blok strežnika

server { listen 80; server_name example.com; }

  • listen 80; — Nginx posluša HTTP promet na portu 80
  • server_name example.com; — ime domene, na katero ta blok strežnika odgovarja

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 / — ujema se z vsemi dohodnimi URL-ji
  • proxy_pass — posreduje zahteve zaledni aplikaciji

Proxy glave

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;

Te glave zagotavljajo, da zaledje ve:

  • Izvirno ime domene
  • Pravi IP naslov stranke
  • Ali je bila zahteva HTTP ali HTTPS

Brez teh glav lahko zaledne aplikacije beležijo napačne informacije o strankah.

Omogočite konfiguracijo

Onemogočite privzeto stran Nginx, da se izognete konfliktom na portu 80:

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

Ustvarite simbolično povezavo za omogočanje strani:

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

Preizkusite konfiguracijo za sintaktične napake:

sudo nginx -t

Če je test uspešen, ponovno naložite Nginx:

sudo systemctl reload nginx

Preizkusite povratni proxy

Preizkusite s strežnika:

curl http://example.com

Odprite http://example.com v brskalniku za testiranje. Prejeli bi morali odgovor iz vaše zaledne aplikacije, ne privzete strani Nginx. Če je vse pravilno konfigurirano, se bo zaledna aplikacija naložila.

Kako se zahteva obdeluje

  1. Stranka pošlje zahtevo na example.com
  2. Nginx prejme zahtevo na portu 80
  3. Nginx posreduje zahtevo na 127.0.0.1:3000
  4. Zaledje obdela zahtevo
  5. Odgovor gre nazaj skozi Nginx
  6. Stranka prejme odgovor

Pogoste napake in odpravljanje težav

Zaledje ne teče

  • Prepričajte se, da aplikacija teče
  • Potrdite pravilen port

ss -tuln | grep 3000

Napačen naslov proxy_pass

  • Vedno vključite http://
  • Prepričajte se, da sta IP in port pravilna

Pozabljeno ponovno naložiti Nginx

Po vsaki spremembi konfiguracije:

sudo systemctl reload nginx

Požarni zid blokira dostop

Prepričajte se, da je port 80 odprt:

sudo ufw allow 80

Neobvezne izboljšave

Ko povratni proxy deluje, razmislite o:

  • Omogočanju HTTPS z Let's Encrypt
  • Zagonu več zalednih aplikacij
  • Dodajanju dnevnikov dostopa in napak
  • Konfiguriranju uravnoteženja obremenitve
  • Podpiranju povezav WebSocket

Konfiguracija HTTPS

V produkcijskih okoljih bi morali vedno uporabljati HTTPS namesto HTTP. HTTPS šifrira promet med stranko in vašim strežnikom, kar ščiti gesla, API žetone, piškotke in druge občutljive podatke. Nginx podpira HTTPS z uporabo SSL/TLS certifikatov. V tem razdelku se boste naučili:

  • Kaj je Certbot
  • Kako namestiti Certbot
  • Kako Certbot samodejno spreminja konfiguracijo Nginx
  • Kako ročno konfigurirati Nginx z uporabo kupljenega certifikata

Kaj je Certbot?

Certbot je orodje, ki samodejno pridobi in namesti brezplačne SSL/TLS certifikate od Let's Encrypt. Lahko:

  • Zahteva brezplačen certifikat
  • Preveri lastništvo domene
  • Samodejno konfigurira Nginx
  • Nastavi samodejno obnovitev certifikata

Za začetnike in večino produkcijskih okolij je Certbot najlažji in najvarnejši način za omogočanje HTTPS.

Namestitev Certbot

Posodobite sezname paketov:

sudo apt update

Namestite Certbot in vtičnik Nginx:

sudo apt install certbot python3-certbot-nginx

Paket python3-certbot-nginx omogoča Certbotu, da samodejno spremeni vašo konfiguracijo Nginx.

Pridobivanje in namestitev certifikata

Pred zagonom Certbot se prepričajte:

  • Da ime vaše domene kaže na javni IP naslov vašega strežnika
  • Da Nginx teče
  • Da sta porta 80 in 443 odprta v požarnem zidu

Zaženite:

sudo certbot --nginx

Certbot bo:

  1. Vprašal, katero domeno želite zavarovati
  2. Preveril lastništvo domene
  3. Samodejno posodobil vašo konfiguracijo Nginx
  4. Ponovno naložil Nginx

Info

Certbot samodejno spreminja vašo konfiguracijo Nginx. Običajno doda nov blok strežnika za port 443 (HTTPS), doda poti do SSL certifikatov, konfigurira preusmeritev HTTP na HTTPS, če izberete to možnost, in doda priporočene SSL nastavitve.

Primer konfiguracije, ki jo doda Certbot:

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 lahko tudi spremeni HTTP blok za preusmeritev prometa:

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

Ker Certbot samodejno ureja konfiguracijske datoteke, je priporočljivo:

  • Ohraniti varnostne kopije vaše konfiguracije
  • Razumeti, katere spremembe so bile narejene
  • Vedno preizkusiti konfiguracijo po spremembah

Preizkusite konfiguracijo:

sudo nginx -t

Samodejna obnova certifikata

Certifikati Let's Encrypt so veljavni 90 dni. Certbot samodejno namesti časovnik za obnovo. Obnovo lahko preizkusite z:

sudo certbot renew --dry-run

Če je pravilno konfigurirano, se bo obnova zgodila samodejno brez izpadov.

Uporaba kupljenega SSL certifikata

Če kupite SSL certifikat pri overitelju certifikatov (CA), morate Nginx konfigurirati ročno. Po nakupu običajno prejmete:

  • Datoteko certifikata (npr. example.com.crt)
  • Zasebni ključ (example.com.key)
  • Datoteko CA svežnja (ca_bundle.crt)

Ustvarite varno mapo:

sudo mkdir -p /etc/nginx/ssl

sudo chmod 700 /etc/nginx/ssl

Kopirajte svoje certifikacijske datoteke v to mapo.

Primer 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 preusmeritev HTTP na HTTPS:

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

Ponovno naložite Nginx po ročni konfiguraciji:

sudo nginx -t

sudo systemctl reload nginx

Tip

Za začetnike sistemske administratorje je Certbot močno priporočljiv, razen če vaša organizacija zahteva komercialne certifikate.

Povzetek

V tem vodiču ste se naučili:

  • Kaj je povratni proxy in zakaj je uporaben
  • Kako Nginx posreduje zahteve zalednim aplikacijam
  • Kako ustvariti in omogočiti konfiguracijo povratnega proxyja
  • Kako testirati in odpravljati pogoste težave
  • Kako konfigurirati HTTPS

Nginx povratno proxyjanje je osnovna veščina za sistemske administratorje in se pogosto uporablja v produkcijskih okoljih.

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