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.comso 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 80server_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-jiproxy_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
- Stranka pošlje zahtevo na example.com
- Nginx prejme zahtevo na portu 80
- Nginx posreduje zahtevo na 127.0.0.1:3000
- Zaledje obdela zahtevo
- Odgovor gre nazaj skozi Nginx
- 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:
- Vprašal, katero domeno želite zavarovati
- Preveril lastništvo domene
- Samodejno posodobil vašo konfiguracijo Nginx
- Ponovno naložil Nginx
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
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.