Sobes.tech
Middle

Jaká omezení mohou na serveru nginx existovat a s čím mohou být spojena?

sobes.tech AI

Odpověď od AI

Limity Nginx mohou být spojeny s výkonem, bezpečností a systémovými zdroji.

Hlavní limity:

  • worker_processes: Omezuje počet pracovních procesů Nginx. Je spojeno s počtem jader procesoru a dostupnou pamětí. Příliš velká hodnota může vést k overheadu přepínání kontextu, příliš malá - k neefektivnímu využívání zdrojů.
  • worker_connections: Maximální počet současných spojení, která může zpracovat jeden pracovní proces. Je spojeno s deskriptorů souborů operačního systému (ulimit -n) a dostupnou pamětí.
  • client_max_body_size: Maximální povolená velikost těla požadavku klienta. Je spojeno s prevencí útoků typu "odmítnutí služby" (DoS) prostřednictvím odesílání velmi velkých požadavků.
  • limit_conn / limit_req: Moduly pro omezení počtu současných spojení nebo rychlosti požadavků od jedné IP adresy. Používají se k ochraně před DoS útoky a zneužíváním.
  • open_file_cache max: Maximální počet záznamů v cache otevřených souborů. Je spojeno s počtem současně otevřených souborů a dostupnou pamětí. Ovlivňuje výkon při práci s velkým počtem souborů (například statické soubory, logy).
  • proxy_buffer_size / proxy_buffers: Velikosti a počet bufferů pro proxy odpovědi. Jsou spojeny s pamětí. Nesprávné hodnoty mohou vést k chybám nebo neefektivnímu využívání paměti.
  • Timeouty:
    • client_body_timeout: Timeout mezi přijetím částí těla požadavku klienta.
    • client_header_timeout: Timeout mezi přijetím hlaviček požadavku klienta.
    • send_timeout: Timeout mezi odesláním dat klientovi.
    • keepalive_timeout: Timeout pro udržování keep-alive spojení. Jsou spojeny se stabilitou spojení a ochranou před pomalými útoky.
  • resolver_timeout: Timeout pro řešení DNS jmen. Je spojeno s dostupností DNS serverů a stabilitou sítě.

Limity mohou záviset na:

  • Operačním systému: Systémové limity na počet souborových deskriptorů, vláken, objem paměti.
  • Hardwarových zdrojích: Počet jader procesoru, objem operační paměti, šířka pásma sítě.
  • Zátěži: Očekávaný počet současných uživatelů, intenzita požadavků.
  • Konfiguraci Nginx: Direktivy v konfiguračních souborech.
  • Bezpečnosti: Nutnost ochrany před DoS útoky, pokusy o prolomení hesel a další hrozby.

Příklad konfigurace worker_processes a worker_connections:

# Určujeme počet pracovních procesů podle dostupných jader CPU.
worker_processes auto;

# Maximální počet spojení, které může zpracovat jeden pracovní proces.
# 65535 - typická hodnota pro Linux, ale je třeba zkontrolovat ulimit -n
# 1024 (výchozí) * worker_processes - celkový počet spojení, které může Nginx zpracovat.
events {
    worker_connections 65535;
}

Tabulka s příklady limitů:

Limit Vztah k Typická hodnota
worker_processes CPU auto
worker_connections Fajldeskriptorům, paměti 1024 - 65535
client_max_body_size Bezpečnost 1m - 100m
limit_conn Bezpečnost, zátěž Závisí na politice
keepalive_timeout Výkon, zátěž 60s - 120s
open_file_cache max Paměť, počet souborů 1000 - 100000

Správné nastavení limitů je klíčové pro stabilitu, výkon a bezpečnost Nginx. Často vyžaduje monitorování a iterativní doladění.