Etter 13 måneder med utvikling har den nye stabile versjonen av den høyytelses HTTP-serveren og multiprotocol proxy-serveren nginx 1.22.0 blitt presentert, som har samlet endringer fra den hovedversjonen 1.21.x. I fremtiden vil alle endringer i den stabile versjonen 1.22 være fokusert på å rette alvorlige feil og sårbarheter. Snart vil hovedversjonen nginx 1.23 bli dannet, hvor utviklingen av nye muligheter vil bli videreført. For vanlige brukere som ikke har behov for å sikre kompatibilitet med tredjepartsmoduler, anbefales det å bruke hovedversjonen, som en gang hvert tredje måned danner utgivelser av det kommersielle produktet Nginx Plus.
I henhold til aprilrapporten fra selskapet Netcraft, brukes nginx på 20,08% av alle aktive nettsteder (for ett år siden 20,15%, for to år siden 19,56%), noe som tilsvarer andreplass i popularitet i denne kategorien (andelen for Apache er 22,58% (for ett år siden 25,38%), Cloudflare — 10,42% (8,51%), Google — 8,89% (10,09%). Når vi ser på alle nettsteder, beholder nginx ledelsen med 31,13% av markedet (for ett år siden 35,34%, for to år siden — 36,91%), mens andelen for Apache er 23,08% (25,98%), OpenResty (plattform basert på nginx og LuaJIT) — 8,01% (6,55%), Cloudflare — 5,49%, Microsoft IIS — 4% (5,96%).
Blant de millioner mest besøkte nettstedene i verden utgjør nginx 21,79% (for ett år siden 23,06%, for to år siden 25,54%). For tiden drifter nginx omtrent 361 millioner nettsteder (for ett år siden 419 millioner). Ifølge W3Techs brukes nginx på 33,5% av nettstedene blant de mest besøkte millionene; i mai i fjor var dette tallet 33,8%, året før det igjen 31,9%. Andelen for Apache har falt fra 33,8% til 31,5% på ett år, mens andelen for Microsoft IIS har gått ned fra 7% til 6%. Andelen for LiteSpeed har økt fra 8,5% til 12,1%, og Node.js fra 1,2% til 1,9%. I Russland brukes nginx på 79,8% av de mest besøkte nettstedene (for ett år siden — 79,1%).
De mest bemerkelsesverdige forbedringene som ble lagt til i utformingen av hovedversjonen 1.21.x:
- I direktivene «proxy_ssl_certificate», «proxy_ssl_certificate_key», «grpc_ssl_certificate», «grpc_ssl_certificate_key», «uwsgi_ssl_certificate» og «uwsgi_ssl_certificate_key» er støtte for variabler lagt til.
- E-postproxymodulen har fått støtte for «pipelining»-modus for å håndtere flere POP3- eller IMAP-forespørslene i én tilkobling, og en ny direktiv «max_errors» er lagt til for å definere det maksimale antallet protokollfeil etter hvilket forbindelsen vil bli stengt.
- Overføring av overskriftene «Auth-SSL-Protocol» og «Auth-SSL-Cipher» er implementert. server autentisering av e-postproxy.
- Streammodulen har fått støtte for TLS-utvidelsen ALPN. For å bestemme listen over støttede ALPN-protokoller (h2, http/1.1) er direktivet ssl_alpn foreslått, og for å få informasjon om den avtalte ALPN-protokollen med klienten, variabelen $ssl_alpn_protocol.
- Det er lagt til en parameter «fastopen» i streammodulen, som aktiverer «TCP Fast Open»-modus for lyttende sokler.
- Escaping av tegnene «»», «», «\», «^», «`», «{«, «|» og «}» er optimalisert ved proxying med URI-endringer.
- Det er lagt til en direktiv proxy_half_close i streammodulen, som lar deg konfigurere atferden ved lukking av den proxierte TCP-forbindelsen på den ene siden («TCP half-close»).
- Det er lagt til en ny direktiv mp4_start_key_frame i ngx_http_mp4_module for kringkasting av videostrømmer, startet fra nøkkelrammen.
- Variabelen $ssl_curve er lagt til, som returnerer typen elliptisk kurve valgt for nøkkelforhandling i TLS-økten.
- Standardverdien for direktivet «sendfile_max_chunk» er endret til 2 megabyte;
- Kompatibilitet med OpenSSL 3.0 er sikret. Støtte for å kalle SSL_sendfile() når OpenSSL 3.0 brukes er lagt til.
- Standard bygging med PCRE2-biblioteket er aktivert, som gir funksjoner for behandling av regulære uttrykk.
- Ved opplasting av sertifikater serveren er bruken av sikkerhetsnivåer, som støttes fra OpenSSL 1.1.0 og angis via parameteren «@SECLEVEL=N» i direktivet ssl_ciphers, optimalisert.
- Støtte for eksportsett av krypteringer er avsluttet.
- I API for filtrering av forespørselens kropp er buffring av de behandlede dataene tillatt.
- På FreeBSD-plattformen er støtten for systemanropet sendfile forbedret, som er ment for organisering av direkte overføring av data mellom filbeskrivere og sokler. Modusen sendfile(SF_NODISKIO) er aktivert hele tiden, og støtte for sendfile(SF_NOCACHE) er lagt til.
- Støtten for å opprette HTTP/2-forbindelser ved bruk av NPN-utvidelsen (Next Protocol Negotiation) istedenfor ALPN er avsluttet.
- Blokkering av HTTP/1.0-forespørselene som inkluderer HTTP-overskriften «Transfer-Encoding» (som ble introdusert i HTTP/1.1-protokollen) er sikret.
- Forsteret beskyttelse mot HTTP Request Smuggling-angrep på frontend-backend-systemer, som gjør det mulig å infiltrere innholdet i forespørslene fra andre brukere som behandles i samme strøm mellom frontend og backend. Nginx returnerer nå alltid en feil når CONNECT-metoden brukes; ved samtidig angivelse av «Content-Length» og «Transfer-Encoding» overskrifter; ved tilstedeværelse av mellomrom eller kontrolltegn i forespørselstrengen, HTTP-header-navn eller verdien av «Host»-headeren.
Kilde: opennet.ru
