Após um ano de desenvolvimento, é apresentada uma nova versão estável do servidor HTTP de alto desempenho e proxy múltiplo nginx 1.20.0, que reúne as alterações acumuladas na versão principal 1.19.x. No futuro, todas as alterações na versão estável 1.20 estarão relacionadas à correção de erros críticos e vulnerabilidades. Em breve, será formada a versão principal do nginx 1.21, onde o desenvolvimento de novos recursos continuará. Para usuários comuns, que não têm a tarefa de garantir compatibilidade com módulos de terceiros, recomenda-se usar a versão principal, a partir da qual as liberações do produto comercial Nginx Plus são feitas a cada três meses.
De acordo com o relatório de março da Netcraft, o nginx é utilizado em 20,15% de todos os sites ativos (um ano atrás era 19,56%, há dois anos 20,73%), o que corresponde ao segundo lugar em popularidade nessa categoria (a participação do Apache é de 25,38% (um ano atrás 27,64%), Google — 10,09%, Cloudflare — 8,51%. Ao considerar todos os sites, o nginx mantém a liderança e abrange 35,34% do mercado (um ano atrás 36,91%, há dois anos — 27,52%), enquanto a participação do Apache é de 25,98%, OpenResty (plataforma baseada em nginx e LuaJIT) — 6,55%, e Microsoft IIS — 5,96%.
Entre os um milhão de sites mais visitados do mundo, a participação do nginx é de 25,55% (um ano atrás 25,54%, há dois anos 26,22%). Atualmente, aproximadamente 419 milhões de sites estão sob a gestão do nginx (um ano atrás eram 459 milhões). Segundo a W3Techs, o nginx é utilizado em 33,7% dos sites dos mil milhões mais visitados, em abril do ano passado esse número era de 31,9%, e no ano anterior 41,8% (a queda se deve à contabilização separada do servidor HTTP do Cloudflare). A participação do Apache caiu de 39,5% para 34% ao longo de um ano, e a do Microsoft IIS de 8,3% para 7%. A participação do LiteSpeed cresceu de 6,3% para 8,4%, e a do Node.js de 0,8% para 1,2%. Na Rússia, o nginx é utilizado em 79,1% dos sites mais visitados (um ano atrás — 78,9%).
As melhorias mais notáveis adicionadas durante a formação da versão principal 1.19.x:
- Adicionada a possibilidade de verificação de certificados de cliente com a ajuda de serviços externos baseados no protocolo OCSP (Protocolo de Status de Certificado Online). Para habilitar a verificação, foi proposta a diretiva ssl_ocsp, para configurar o tamanho do cache — ssl_ocsp_cache, e para redefinir a URL do manipulador OCSP, conforme indicado no certificado — ssl_ocsp_responder.
- Inclui o módulo ngx_stream_set_module, que permite atribuir um valor à variável server { listen 12345; set $true 1; }
- Adicionada a diretiva proxy_cookie_flags para especificar bandeiras para cookies em conexões proxy. Por exemplo, para adicionar ao cookie "one" a bandeira "httponly", e para todos os outros cookies as bandeiras "nosecure" e "samesite=strict", pode-se usar a construção: proxy_cookie_flags one httponly; proxy_cookie_flags ~ nosecure samesite=strict;
Uma diretiva semelhante, userid_flags, para adicionar bandeiras a cookies também foi implementada para o módulo ngx_http_userid.
- Adicionadas as diretivas "ssl_conf_command", "proxy_ssl_conf_command", "grpc_ssl_conf_command" e "uwsgi_ssl_conf_command", através das quais é possível definir parâmetros arbitrários para configurar o OpenSSL. Por exemplo, para priorizar os cifradores ChaCha e ajustes avançados dos cifradores TLSv1.3, pode-se especificar ssl_conf_command Options PrioritizeChaCha; ssl_conf_command Ciphersuites TLS_CHACHA20_POLY1305_SHA256;
- Adicionada a diretiva "ssl_reject_handshake", que ordena rejeitar todas as tentativas de negociação SSL-conexões (por exemplo, pode ser usada para rejeitar todos os acessos com nomes de hosts desconhecidos no campo 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; }
- No proxy de e-mail, foi adicionada a diretiva proxy_smtp_auth, que permite autenticar o usuário no backend usando o comando AUTH e o mecanismo PLAIN SASL.
- Foi adicionada a diretiva "keepalive_time", que limita o tempo total de vida de cada conexão keep-alive, após o qual a conexão será fechada (não confundir com keepalive_timeout, que define o tempo de inatividade após o qual a conexão keep-alive é fechada).
- Foi adicionada a variável $connection_time, que permite obter informações sobre a duração da conexão em segundos com precisão em milissegundos.
- Nas diretivas "proxy_cache_path", "fastcgi_cache_path", "scgi_cache_path" e "uwsgi_cache_path" foi adicionado o parâmetro "min_free", que regula o tamanho do cache com base na definição do tamanho mínimo do espaço livre em disco.
- As diretivas "lingering_close", "lingering_time" e "lingering_timeout" foram adaptadas para funcionar com HTTP/2.
- O código de processamento de conexões no HTTP/2 é semelhante à implementação do HTTP/1.x. O suporte para as configurações específicas 'http2_recv_timeout', 'http2_idle_timeout' e 'http2_max_requests' foi descontinuado em favor das diretrizes gerais 'keepalive_timeout' e 'keepalive_requests'. As configurações 'http2_max_field_size' e 'http2_max_header_size' foram removidas, devendo-se usar 'large_client_header_buffers'.
- Uma nova opção de linha de comando '-e' foi adicionada, permitindo especificar um arquivo alternativo para gravar o log de erros, que será usado em vez do log definido nas configurações. Em vez do nome do arquivo, pode-se especificar o valor especial stderr.
Fonte: opennet.ru
