Posts

Showing posts with the label nginx

nginx: stream modul — TCP i UDP proxy

Ciljevi lekcije Nakon ove lekcije trebalo bi da: razumeš šta stream modul radi i po čemu se razlikuje od http bloka znaš gde konfiguracija fizički ide na Ubuntu-u, jer to nije očigledno postaviš proxy ispred baze podataka ili bilo kog TCP servisa usmeravaš HTTPS saobraćaj po SNI imenu, bez dešifrovanja proslediš pravu IP adresu klijenta kroz PROXY protokol podesiš logovanje, koje u stream bloku podrazumevano ne postoji 1. Šta je stream Sve dosad u kursu odnosilo se na http blok — nginx koji razume HTTP, čita zaglavlja, bira location , kešira odgovore. stream radi na četvrtom sloju. Prosleđuje bajtove sa jedne strane na drugu, bez ikakvog razumevanja sadržaja. Nema URI-ja, nema zaglavlja, nema location blokova, nema statusnih kodova. Zauzvrat radi sa bilo čim što ide preko TCP-a ili UDP-a: PostgreSQL, MySQL, Redis, SMTP, IMAP, DNS, MQTT, SSH, serveri za igre, sopstveni binarni protokoli. Kada koristiti šta: Situacija Modul Web saobraćaj, API, bilo šta HTT...

nginx: Tuning performansi

Ciljevi lekcije Nakon ove lekcije trebalo bi da: izmeriš stanje pre nego što bilo šta menjaš razumeš odnos worker_processes , worker_connections i sistemskih limita podesiš bafere tako da se telo zahteva ne prelива na disk prepoznaš kada je usko grlo u nginx-u, a kada — mnogo češće — negde drugde znaš koja sysctl podešavanja imaju smisla, a koja se prepisuju bez razumevanja 1. Prvo pravilo: izmeri Najveći deo saveta o tuningu koji kruži internetom je prepisivanje bez konteksta. Pre nego što promeniš ijedan red, treba da znaš tri stvari: Šta je trenutno stanje. Bez polazne mere ne možeš da tvrdiš da si nešto poboljšao. Gde je usko grlo. U ogromnoj većini slučajeva nije u nginx-u. nginx na skromnom hardveru servira desetine hiljada statičkih zahteva u sekundi bez ikakvog podešavanja. Ako ti je sajt spor, uzrok je najverovatnije aplikacija, upit u bazu ili disk. Šta zapravo pokušavaš da postigneš. Veći broj zahteva u sekundi? Manje kašnjenje? Više istovremenih konekcija?...

nginx: Hardening

Ciljevi lekcije Nakon ove lekcije trebalo bi da: ukloniš nepotrebne informacije koje server odaje o sebi postaviš pun skup sigurnosnih zaglavlja, uključujući CSP razumeš AppArmor profil za nginx i kako ga proveriti pooštriš systemd unit bez da oboriš servis prođeš kroz zatečeni server po listi za proveru Ova lekcija delom povezuje stvari iz ranijih — dozvole iz lekcije 4, skrivene fajlove iz lekcije 6, TLS iz lekcije 9, ograničavanje pristupa iz lekcije 14 — i dodaje ono što nigde nije stalo. 1. Šta server odaje o sebi Podrazumevano nginx šalje svoju verziju u svakom odgovoru i na svakoj stranici greške: Server: nginx/1.24.0 (Ubuntu) To je poklon svakome ko traži servere sa poznatim ranjivostima. http { server_tokens off; } Sada piše samo Server: nginx . Verzija je sakrivena, ali se i dalje zna koji server koristiš. Za potpuno uklanjanje zaglavlja treba headers-more modul: sudo apt install nginx-extras http { server_tokens off; more_clear_headers Server;...

nginx: Kontrola pristupa i zaštita

Ciljevi lekcije Nakon ove lekcije trebalo bi da: ograničiš pristup po IP adresi i kombinuješ to sa lozinkom postaviš ograničenje brzine zahteva bez blokiranja legitimnih korisnika razumeš burst i nodelay parametre, jer se najčešće pogrešno podese povežeš nginx sa fail2ban-om znaš koje od ovih mera prestaju da rade iza CDN-a i zašto 1. Ograničavanje po IP adresi location /admin/ { allow 192.0.2.0/24; allow 10.0.0.0/8; allow 127.0.0.1; deny all; proxy_pass http://backend; } Pravila se proveravaju odozgo naniže i prvo poklapanje pobeđuje . Zato deny all uvek ide poslednji — da je na vrhu, blokirao bi sve. Ista logika radi i u server i u http kontekstu, uz podsetnik na nasleđivanje iz lekcije 3. Kritično: iza proxy-ja ovo ne radi Ako je ispred nginx-a CDN, load balancer ili bilo koji drugi posrednik, $remote_addr je adresa tog posrednika , ne korisnika. Tvoje allow pravilo tada ili propušta sve, ili blokira sve — u zavisnosti od toga da li si sluč...

nginx: Logovanje

Ciljevi lekcije Nakon ove lekcije trebalo bi da: napišeš format loga koji sadrži ono što ti stvarno treba pri dijagnostici razumeš nivoe grešaka i šta se pojavljuje na kojem podesiš rotaciju i znaš zašto nginx mora da bude obavešten o njoj izvučeš korisne podatke iz loga bez posebnih alata anonimizuješ IP adrese kada to treba 1. Dva loga Access log beleži svaki zahtev. Piše se nakon što je odgovor poslat. Error log beleži probleme — od kritičnih grešaka do informativnih poruka, zavisno od podešenog nivoa. Kada nešto ne radi, ovde gledaš prvo. Podrazumevane putanje na Ubuntu-u su /var/log/nginx/access.log i /var/log/nginx/error.log . U lekciji 4 smo ih razdvojili po sajtovima — to je praksa koje se drži. 2. Formati access loga Podrazumevani format zove se combined : log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" ...