summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2024-11-07Upstream: per-upstream resolver.Vladimir Homutov4-12/+115
The "resolver" and "resolver_timeout" directives can now be specified directly in the "upstream" block.
2024-11-07Upstream: pre-resolve servers on reload.Ruslan Ermilov2-14/+388
After configuration is reloaded, it may take some time for the re-resolvable upstream servers to resolve and become available as peers. During this time, client requests might get dropped. Such servers are now pre-resolved using the "cache" of already resolved peers from the old shared memory zone.
2024-11-07Core: inheritance of non-reusable shared memory zones.Ruslan Ermilov1-4/+10
When re-creating a non-reusable zone, make the pointer to the old zone available during the new zone initialization.
2024-11-07Upstream: construct upstream peers from DNS SRV records.Dmitry Volyntsev10-67/+420
2024-11-07Upstream: re-resolvable servers.Ruslan Ermilov18-56/+1704
Specifying the upstream server by a hostname together with the "resolve" parameter will make the hostname to be periodically resolved, and upstream servers added/removed as necessary. This requires a "resolver" at the "http" configuration block. The "resolver_timeout" parameter also affects when the failed DNS requests will be attempted again. Responses with NXDOMAIN will be attempted again in 10 seconds. Upstream has a configuration generation number that is incremented each time servers are added/removed to the primary/backup list. This number is remembered by the peer.init method, and if peer.get detects a change in configuration, it returns NGX_BUSY. Each server has a reference counter. It is incremented by peer.get and decremented by peer.free. When a server is removed, it is removed from the list of servers and is marked as "zombie". The memory allocated by a zombie peer is freed only when its reference count becomes zero. Co-authored-by: Roman Arutyunyan <arut@nginx.com> Co-authored-by: Sergey Kandaurov <pluknet@nginx.com> Co-authored-by: Vladimir Homutov <vl@nginx.com>
2024-10-31SSL: disabled TLSv1 and TLSv1.1 by default.Sergey Kandaurov7-0/+14
TLSv1 and TLSv1.1 are formally deprecated and forbidden to negotiate due to insufficient security reasons outlined in RFC 8996. TLSv1 and TLSv1.1 are disabled in BoringSSL e95b0cad9 and LibreSSL 3.8.1 in the way they cannot be enabled in nginx configuration. In OpenSSL 3.0, they are only permitted at security level 0 (disabled by default). The support is dropped in Chrome 84, Firefox 78, and deprecated in Safari. This change disables TLSv1 and TLSv1.1 by default for OpenSSL 1.0.1 and newer, where TLSv1.2 support is available. For older library versions, which do not have alternatives, these protocol versions remain enabled.
2024-10-21Updated security policy to include disclosure details.jzebor-at-f51-5/+89
2024-10-15Configure: MSVC compatibility with PCRE2 10.43.Thierry Bastian1-1/+2
2024-10-08QUIC: prevent deleted stream frame retransmissions.nandsky1-7/+6
Since a2a513b93cae, stream frames no longer need to be retransmitted after it was deleted. The frames which were retransmitted before, could be stream data frames sent prior to a RESET_STREAM. Such retransmissions are explicitly prohibited by RFC 9000, Section 19.4.
2024-10-08Version bump.Sergey Kandaurov1-2/+2
2024-10-02nginx-1.27.2-RELEASErelease-1.27.2Sergey Kandaurov1-0/+65
2024-10-02Updated OpenSSL used for win32 builds.Sergey Kandaurov1-1/+1
2024-10-01SSL: caching CA certificates.Sergey Kandaurov3-28/+185
This can potentially provide a large amount of savings, because CA certificates can be quite large. Based on previous work by Mini Hawthorne.
2024-10-01SSL: caching CRLs.Sergey Kandaurov3-17/+164
Based on previous work by Mini Hawthorne.
2024-10-01SSL: caching certificate keys.Sergey Kandaurov3-151/+172
EVP_KEY objects are a reference-counted container for key material, shallow copies and OpenSSL stack management aren't needed as with certificates. Based on previous work by Mini Hawthorne.
2024-10-01SSL: caching certificates.Sergey Kandaurov3-102/+173
Certificate chains are now loaded once. The certificate cache provides each chain as a unique stack of reference counted elements. This shallow copy is required because OpenSSL stacks aren't reference counted. Based on previous work by Mini Hawthorne.
2024-10-01SSL: object caching.Sergey Kandaurov3-1/+318
Added ngx_openssl_cache_module, which indexes a type-aware object cache. It maps an id to a unique instance, and provides references to it, which are dropped when the cycle's pool is destroyed. The cache will be used in subsequent patches. Based on previous work by Mini Hawthorne.
2024-10-01SSL: moved certificate storage out of exdata.Sergey Kandaurov3-66/+89
Instead of cross-linking the objects using exdata, pointers to configured certificates are now stored in ngx_ssl_t, and OCSP staples are now accessed with rbtree in it. This allows sharing these objects between SSL contexts. Based on previous work by Mini Hawthorne.
2024-09-24Fixed a typo of bpf makefile debug option.tzssangglass1-1/+1
2024-09-20Added new primary README.md file.Michael Vernik3-4/+231
2024-09-20SSL: optional ssl_client_certificate for ssl_verify_client.Sergey Kandaurov3-6/+18
Starting from TLSv1.1 (as seen since draft-ietf-tls-rfc2246-bis-00), the "certificate_authorities" field grammar of the CertificateRequest message was redone to allow no distinguished names. In TLSv1.3, with the restructured CertificateRequest message, this can be similarly done by optionally including the "certificate_authorities" extension. This allows to avoid sending DNs at all. In practice, aside from published TLS specifications, all supported SSL/TLS libraries allow to request client certificates with an empty DN list for any protocol version. For instance, when operating in TLSv1, this results in sending the "certificate_authorities" list as a zero-length vector, which corresponds to the TLSv1.1 specification. Such behaviour goes back to SSLeay. The change relaxes the requirement to specify at least one trusted CA certificate in the ssl_client_certificate directive, which resulted in sending DNs of these certificates (closes #142). Instead, all trusted CA certificates can be specified now using the ssl_trusted_certificate directive if needed. A notable difference that certificates specified in ssl_trusted_certificate are always loaded remains (see 3648ba7db). Co-authored-by: Praveen Chaudhary <praveenc@nvidia.com>
2024-09-13Proxy: proxy_pass_trailers directive.Sergey Kandaurov5-17/+235
The directive allows to pass upstream response trailers to client.
2024-09-06Fixed a typo in win-utf.Shaikh Yaser1-1/+1
2024-09-04Added CI based on GitHub Actions.Konstantin Pavlov2-0/+19
Pushes to master and stable branches will result in buildbot-like checks on multiple OSes and architectures. Pull requests will be checked on a public Ubuntu GitHub runner.
2024-09-04Added GitHub templates.Maryna Herasimovich3-0/+66
2024-09-03Added contributing guidelines.Maryna Herasimovich1-0/+110
2024-09-02Added security policy.Maryna Herasimovich1-0/+20
2024-09-02Added Code of Conduct.Maryna Herasimovich1-0/+126
2024-08-30Removed C-style comments from LICENSE.Roman Arutyunyan1-26/+24
2024-08-30Moved LICENSE and README to root.Roman Arutyunyan3-2/+0
2024-08-30Switched GNUmakefile from hg to git.Roman Arutyunyan1-5/+5
2024-08-30Removed .hgtags file.Roman Arutyunyan1-482/+0
2024-08-22Stream: OCSP stapling.Sergey Kandaurov2-10/+73
2024-08-22Stream: client certificate validation with OCSP.Sergey Kandaurov2-0/+159
2024-08-20Version bump.Sergey Kandaurov1-2/+2
2024-08-12release-1.27.1 tagSergey Kandaurov1-0/+1
2024-08-12nginx-1.27.1-RELEASErelease-1.27.1Sergey Kandaurov1-0/+49
2024-08-12Updated OpenSSL used for win32 builds.Sergey Kandaurov1-1/+1
2024-08-12Mp4: rejecting unordered chunks in stsc atom.Roman Arutyunyan1-0/+7
Unordered chunks could result in trak->end_chunk smaller than trak->start_chunk in ngx_http_mp4_crop_stsc_data(). Later in ngx_http_mp4_update_stco_atom() this caused buffer overread while trying to calculate trak->end_offset.
2024-08-12Mp4: fixed buffer underread while updating stsz atom.Roman Arutyunyan1-3/+4
While cropping an stsc atom in ngx_http_mp4_crop_stsc_data(), a 32-bit integer overflow could happen, which could result in incorrect seeking and a very large value stored in "samples". This resulted in a large invalid value of trak->end_chunk_samples. This value is further used to calculate the value of trak->end_chunk_samples_size in ngx_http_mp4_update_stsz_atom(). While doing this, a large invalid value of trak->end_chunk_samples could result in reading memory before stsz atom start. This could potentially result in a segfault.
2024-08-09Stream ssl_preread: do not reallocate a parsed SNI host.Sergey Kandaurov1-1/+1
We own this memory from the session pool.
2024-08-09QUIC: zero out existing keying material only.Sergey Kandaurov1-6/+23
Previously, this used to have extra ngx_explicit_memzero() calls from within ngx_quic_keys_cleanup(), which might be suboptimal.
2024-08-09QUIC: discarding 0-RTT keys.Sergey Kandaurov1-0/+10
For simplicity, this is done on successful decryption of a 1-RTT packet.
2024-08-09Typo fixed.Sergey Kandaurov1-2/+2
2024-08-09Version bump.Sergey Kandaurov1-2/+2
2024-07-18HTTP/2: close connections initialized during graceful shutdown.Kasei Wang1-0/+5
In some rare cases, graceful shutdown may happen while initializing an HTTP/2 connection. Previously, such a connection ignored the shutdown and remained active. Now it is gracefully closed prior to processing any streams to eliminate the shutdown delay.
2024-06-27Stream: allow servers with no handler.Roman Arutyunyan1-7/+7
Previously handlers were mandatory. However they are not always needed. For example, a server configured with ssl_reject_handshake does not need a handler. Such servers required a fake handler to pass the check. Now handler absence check is moved to runtime. If handler is missing, the connection is closed with 500 code.
2024-05-28release-1.27.0 tagSergey Kandaurov1-0/+1
2024-05-28nginx-1.27.0-RELEASErelease-1.27.0Sergey Kandaurov1-0/+68
2024-05-28HTTP/3: fixed handling of zero-length literal field line.Sergey Kandaurov1-0/+3
Previously, st->value was passed with NULL data pointer to header handlers.