Π Π΅Π»ΠΈΠ· nginx 1.20.0

ПослС Π³ΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСдставлСна новая ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ Π²Π΅Ρ‚ΠΊΠ° Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ HTTP-сСрвСра ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ прокси-сСрвСра nginx 1.20.0, которая Π²ΠΎΠ±Ρ€Π°Π»Π° Π² сСбя измСнСния, Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Π΅ Π² основной Π²Π΅Ρ‚ΠΊΠ΅ 1.19.x. Π’ дальнСйшСм всС измСнСния Π² ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ 1.20 Π±ΡƒΠ΄ΡƒΡ‚ связаны с устранСниСм ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Ρ… ошибок ΠΈ уязвимостСй. Π’ скором Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ сформирована основная Π²Π΅Ρ‚ΠΊΠ° nginx 1.21, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй. Для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ со сторонними модулями, рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ, Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· Π² Ρ‚Ρ€ΠΈ мСсяца Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ выпуски коммСрчСского ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Nginx Plus.

Π’ соотвСтствии с мартовским ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Netcraft nginx ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° 20.15% всСх Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… сайтов (Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄ 19.56%, Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ 20.73%), Ρ‡Ρ‚ΠΎ соотвСтствуСт Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ мСсту ΠΏΠΎ популярности Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ (доля Apache соотвСтствуСт 25.38% (Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄ 27.64%), Google — 10.09%, Cloudflare — 8.51%. ΠŸΡ€ΠΈ этом ΠΏΡ€ΠΈ рассмотрСнии всСх сайтов nginx сохраняСт лидСрство ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 35.34% Ρ€Ρ‹Π½ΠΊΠ° (Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄ 36.91%, Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ — 27.52%), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ доля Apache соотвСтствуСт 25.98%, OpenResty (ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π½Π° Π±Π°Π·Π΅ nginx ΠΈ LuaJIT.) — 6.55%, Microsoft IIS — 5.96%.

Π‘Ρ€Π΅Π΄ΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° самых посСщаСмых сайтов Π² ΠΌΠΈΡ€Π΅ доля nginx составляСт 25.55% (Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄ 25.54%, Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ 26.22%). Π’ настоящСС врСмя ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ nginx Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ 419 ΠΌΠ»Π½ сайтов (Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄ 459 ΠΌΠ»Π½). По Π΄Π°Π½Π½Ρ‹ΠΌ W3Techs nginx ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° 33.7% сайтов ΠΈΠ· ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° самых посСщаСмых, Π² Π°ΠΏΡ€Π΅Π»Π΅ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π° этот ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ составлял 31.9%, ΠΏΠΎΠ·Π°ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ — 41.8% (спад ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΡ‡Ρ‘Ρ‚Ρƒ http-сСрвСра Cloudflare). Доля Apache Π·Π° Π³ΠΎΠ΄ снизилась с 39.5% Π΄ΠΎ 34%, Π° доля Microsoft IIS с 8.3% Π΄ΠΎ 7%. Доля LiteSpeed выросла с 6.3% Π΄ΠΎ 8.4%, Π° Node.js с 0.8% Π΄ΠΎ 1.2%. Π’ России nginx ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° 79.1% самых посСщаСмых сайтов (Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄ — 78.9%).

НаиболСС Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² процСссС формирования основной Π²Π΅Ρ‚ΠΊΠΈ 1.19.x:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Ρ€ΠΊΠΈ клиСнтских сСртификатов с ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Π½Π΅ΡˆΠ½ΠΈΡ… слуТб Π½Π° Π±Π°Π·Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° OCSP (Online Certificate Status Protocol). Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ssl_ocsp, для настройки Ρ€Π°Π·ΠΌΠ΅Ρ€Π° кэша — ssl_ocsp_cache, для пСрСопрСдСлСния URL OCSP-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² сСртификатС — ssl_ocsp_responder.
  • Π’ состав Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ngx_stream_set_module, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ server { listen 12345; set $true 1; }
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° proxy_cookie_flags для указания Ρ„Π»Π°Π³ΠΎΠ² для Cookie Π² проксируСмых соСдинСниях. НапримСр, для добавлСния ΠΊ Cookie «one» Ρ„Π»Π°Π³Π° «httponly», Π° для всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Cookie Ρ„Π»Π°Π³ΠΎΠ² «nosecure» ΠΈ «samesite=strict» ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ: proxy_cookie_flags one httponly; proxy_cookie_flags ~ nosecure samesite=strict;

    ΠŸΠΎΡ…ΠΎΠΆΠ°Ρ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° userid_flags для добавлСния Ρ„Π»Π°Π³ΠΎΠ² ΠΊ Cookie Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° для модуля ngx_http_userid.

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ «ssl_conf_command», «proxy_ssl_conf_command», «grpc_ssl_conf_command» ΠΈ «uwsgi_ssl_conf_command», ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для настройки OpenSSL. НапримСр, для ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ² ChaCha ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ настройки ΡˆΠΈΡ„Ρ€ΠΎΠ² TLSv1.3 ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ssl_conf_command Options PrioritizeChaCha; ssl_conf_command Ciphersuites TLS_CHACHA20_POLY1305_SHA256;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° «ssl_reject_handshake», которая прСдписываСт ΠΎΡ‚Π²Π΅Ρ€Π³Π°Ρ‚ΡŒ всС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ согласования SSL-соСдинСний (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для отклонСния всСх ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ с нСизвСстными ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ хостов Π² ΠΏΠΎΠ»Π΅ SNI). server { listen 443 ssl; ssl_reject_handshake on; } server { listen 443 ssl; server_name example.com; ssl_certificate example.com.crt; ssl_certificate_key example.com.key; }
  • Π’ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ прокси Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° proxy_smtp_auth, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° бэкСндС ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ AUTH ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° PLAIN SASL.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° «keepalive_time», которая ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π΅ врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ keep-alive соСдинСния, послС истСчСнии ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ соСдинСниС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ (Π½Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с keepalive_timeout, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΌ врСмя нСактивности, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ keep-alive соСдинСниС закрываСтся).
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° пСрСмСнная $connection_time, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ соСдинСния Π² сСкундах с миллисСкундной Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.
  • Π’ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ «proxy_cache_path», «fastcgi_cache_path», «scgi_cache_path» ΠΈ «uwsgi_cache_path» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ «min_free», Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ кэша Π½Π° основС опрСдСлСния минимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° свободного дискового пространства.
  • Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ «lingering_close», «lingering_time» ΠΈ «lingering_timeout» Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с HTTP/2.
  • Код ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ соСдинСний Π² HTTP/2 ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ HTTP/1.x. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… настроСк «http2_recv_timeout», «http2_idle_timeout» ΠΈ «http2_max_requests» ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΎΠ±Ρ‰ΠΈΡ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² «keepalive_timeout» ΠΈ «keepalive_requests». Π£Π΄Π°Π»Π΅Π½Ρ‹ настройки «http2_max_field_size» ΠΈ «http2_max_header_size», вмСсто ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ «large_client_header_buffers».
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° новая опция ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки «-e», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для записи Π»ΠΎΠ³Π° ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вмСсто Π»ΠΎΠ³Π°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² настройках. ВмСсто ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ stderr.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru