summaryrefslogtreecommitdiffhomepage
path: root/auto/modules (follow)
AgeCommit message (Collapse)AuthorFilesLines
2025-05-25HTTP CONNECT proxy.tunnelRoman Arutyunyan1-0/+11
HTTP CONNECT method is now supported in HTTP/1 connections. It's disabled in all currently existing standard modules. A new variable $port is added that contains the port passed by client in HTTP CONNECT. The $host variable contains the host part. A new module ngx_http_tunnel module is added which establishes a tunnel to a backend. It supports the newly added HTTP CONNECT method and can be used to set up an HTTP CONNECT proxy. As recommended by RFC 9110, proxy target should be restricted to ensure safe proxying: : Proxies that support CONNECT SHOULD restrict its use to a limited set : of known ports or a configurable list of safe request targets. Example config: server { listen 8000; resolver dns.example.com; map $port $tun_port { 80 1; 443 1; } map $host $tun_host { hostnames; example.com 1; *.example.org 1; } map $tun_port$tun_host $tun { 11 $host:$port; } location / { tunnel_pass $tun; } } Request: $ curl -px 127.0.0.1:8000 http://example.com
2024-10-01SSL: object caching.Sergey Kandaurov1-1/+2
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-02-21Stream: ngx_stream_pass_module.Roman Arutyunyan1-0/+10
The module allows to pass connections from Stream to other modules such as HTTP or Mail, as well as back to Stream. Previously, this was only possible with proxying. Connections with preread buffer read out from socket cannot be passed. The module allows selective SSL termination based on SNI. stream { server { listen 8000 default_server; ssl_preread on; ... } server { listen 8000; server_name foo.example.com; pass 127.0.0.1:8001; # to HTTP } server { listen 8000; server_name bar.example.com; ... } } http { server { listen 8001 ssl; ... location / { root html; } } }
2023-06-08HTTP/2: removed server push (ticket #2432).Sergey Kandaurov1-2/+0
Although it has better implementation status than HTTP/3 server push, it remains of limited use, with adoption numbers seen as negligible. Per IETF 102 materials, server push was used only in 0.04% of sessions. It was considered to be "difficult to use effectively" in RFC 9113. Its use is further limited by badly matching to fetch/cache/connection models in browsers, see related discussions linked from [1]. Server push was disabled in Chrome 106 [2]. The http2_push, http2_push_preload, and http2_max_concurrent_pushes directives are made obsolete. In particular, this essentially reverts 7201:641306096f5b and 7207:3d2b0b02bd3d. [1] https://jakearchibald.com/2017/h2-push-tougher-than-i-thought/ [2] https://chromestatus.com/feature/6302414934114304
2023-05-14Stream: removed QUIC support.Roman Arutyunyan1-14/+0
2023-02-22QUIC: OpenSSL compatibility layer.Roman Arutyunyan1-2/+4
The change allows to compile QUIC with OpenSSL which lacks BoringSSL QUIC API. This implementation does not support 0-RTT.
2022-04-20QUIC: separate UDP framework for QUIC.Roman Arutyunyan1-0/+1
Previously, QUIC used the existing UDP framework, which was created for UDP in Stream. However the way QUIC connections are created and looked up is different from the way UDP connections in Stream are created and looked up. Now these two implementations are decoupled.
2021-12-24Merged with the default branch.Ruslan Ermilov1-8/+5
2021-12-21Moved Huffman coding out of HTTP/2.Ruslan Ermilov1-2/+5
ngx_http_v2_huff_decode.c and ngx_http_v2_huff_encode.c are renamed to ngx_http_huff_decode.c and ngx_http_huff_encode.c.
2021-12-09QUIC: configure cleanup.Ruslan Ermilov1-1/+1
Renamed and removed some macros.
2021-12-07HTTP/3: renamed files.Roman Arutyunyan1-4/+4
ngx_http_v3_tables.h and ngx_http_v3_tables.c are renamed to ngx_http_v3_table.h and ngx_http_v3_table.c to better match HTTP/2 code. ngx_http_v3_streams.h and ngx_http_v3_streams.c are renamed to ngx_http_v3_uni.h and ngx_http_v3_uni.c to better match their content.
2021-12-06HTTP/3: merged ngx_http_quic_module into ngx_http_v3_module.Roman Arutyunyan1-16/+3
2021-09-21Configure: USE_OPENSSL_QUIC=YES implies USE_OPENSSL=YES.Ruslan Ermilov1-1/+1
2021-08-05QUIC: better ordering in auto/modules.Vladimir Homutov1-20/+20
2021-08-05HTTP/3: got rid of HTTP/2 module dependency.Vladimir Homutov1-3/+6
The Huffman encoder/decoder now can be built separately from HTTP/2 module.
2021-05-05HTTP/3: moved session initialization to a separate file.Roman Arutyunyan1-1/+2
Previously it was in ngx_http_v3_streams.c, but it's unrelated to streams.
2021-05-05HTTP/3: separate header files for existing source files.Roman Arutyunyan1-1/+4
2021-04-29QUIC: connection migration.Vladimir Homutov1-2/+4
The patch adds proper transitions between multiple networking addresses that can be used by a single quic connection. New networking paths are validated using PATH_CHALLENGE/PATH_RESPONSE frames.
2021-04-14QUIC: separate files for SSL library interfaces.Vladimir Homutov1-0/+2
2021-04-13QUIC: separate files for tokens related processing.Vladimir Homutov1-0/+2
2021-04-13QUIC: separate files for output and ack related processing.Vladimir Homutov1-2/+6
2021-04-13QUIC: separate files for stream related processing.Vladimir Homutov1-2/+4
2021-04-13QUIC: separate files for frames related processing.Vladimir Homutov1-0/+2
2021-04-13QUIC: separate files for connection id related processing.Vladimir Homutov1-0/+2
2021-03-31QUIC: distinct files for connection migration.Vladimir Homutov1-2/+4
The connection migration-related code from quic.c with dependencies is moved into separate file.
2021-03-31QUIC: separate header for ngx_quic_connection_t.Vladimir Homutov1-1/+2
2021-03-10Merged with the default branch.Sergey Kandaurov1-0/+6
2021-03-05Mail: realip module.Maxim Dounin1-0/+6
When configured with the "set_real_ip_from", it can set client's IP address as visible in logs to the one obtained via the PROXY protocol.
2020-12-25QUIC: ngx_quic_bpf module.Vladimir Homutov1-0/+16
The quic kernel bpf helper inspects packet payload for DCID, extracts key and routes the packet into socket matching the key. Due to reuseport feature, each worker owns a personal socket, which is identified by the same key, used to create DCID. BPF objects are locked in RAM and are subject to RLIMIT_MEMLOCK. The "ulimit -l" command may be used to setup proper limits, if maps cannot be created with EPERM or updated with ETOOLONG.
2020-12-25QUIC: ngx_quic_module.Vladimir Homutov1-10/+18
2020-12-25QUIC: moved all quic sources into src/event/quic.Vladimir Homutov1-6/+6
2020-11-27HTTP/3: introduced ngx_http_v3_filter.Roman Arutyunyan1-0/+13
The filter is responsible for creating HTTP/3 response header and body. The change removes differences to the default branch for ngx_http_chunked_filter_module and ngx_http_header_filter_module.
2020-10-01Merged with the default branch.Sergey Kandaurov1-0/+10
2020-08-28Stream: set module.Pavel Pautov1-0/+10
Adds 'set' directive to the stream server context.
2020-07-13HTTP/3: renamed ngx_http_v3.c to ngx_http_v3_encode.c.Roman Arutyunyan1-1/+1
The file contains only encoding functions.
2020-07-21QUIC: added "quic" listen parameter in Stream.Roman Arutyunyan1-0/+14
Also, introduced ngx_stream_quic_module.
2020-07-21QUIC: added "quic" listen parameter.Roman Arutyunyan1-4/+16
The parameter allows processing HTTP/0.9-2 over QUIC. Also, introduced ngx_http_quic_module and moved QUIC settings there
2020-04-30Configure: unbreak with old OpenSSL, --with-http_v3_module added.Sergey Kandaurov1-9/+18
2020-03-18Refactored HTTP/3 parser.Roman Arutyunyan1-1/+3
2020-03-18Extracted transport part of the code into separate file.Vladimir Homutov1-3/+5
All code dealing with serializing/deserializing is moved int srv/event/ngx_event_quic_transport.c/h file. All macros for dealing with data are internal to source file. The header file exposes frame types and error codes. The exported functions are currently packet header parsers and writers and frames parser/writer. The ngx_quic_header_t structure is updated with 'log' member. This avoids passing extra argument to parsing functions that need to report errors.
2020-03-16Split transport and crypto parts into separate files.Vladimir Homutov1-2/+4
New files: src/event/ngx_event_quic_protection.h src/event/ngx_event_quic_protection.c The protection.h header provides interface to the crypto part of the QUIC: 2 functions to initialize corresponding secrets: ngx_quic_set_initial_secret() ngx_quic_set_encryption_secret() and 2 functions to deal with packet processing: ngx_quic_encrypt() ngx_quic_decrypt() Also, structures representing secrets are defined there. All functions require SSL connection and a pool, only crypto operations inside, no access to nginx connections or events. Currently pool->log is used for the logging (instead of original c->log).
2020-03-13HTTP/3.Roman Arutyunyan1-0/+21
2020-02-28QUIC add_handshake_data callback, varint routines.Sergey Kandaurov1-1/+2
2020-02-28Initial QUIC support in http.Sergey Kandaurov1-1/+2
2019-05-08Unconditional compilation of the postpone filter.Roman Arutyunyan1-17/+2
Postpone filter is an essential part of subrequest functionality. In absence of it a subrequest response body is sent to the client out of order with respect to the main request header and body, as well as other subrequests. For in-memory subrequests the response is also sent to the client instead of being stored in memory. Currently the postpone filter is automatically enabled if one of the following standard modules which are known to create subrequests is enabled: ssi, slice, addition. However a third-party module that creates subrequests can still be built without the postpone filter or be dynamically loaded in nginx built without it.
2018-06-15Upstream: ngx_http_upstream_random module.Vladimir Homutov1-0/+21
The module implements random load-balancing algorithm with optional second choice. In the latter case, the best of two servers is chosen, accounting number of connections and server weight. Example: upstream u { random [two [least_conn]]; server 127.0.0.1:8080; server 127.0.0.1:8081; server 127.0.0.1:8082; server 127.0.0.1:8083; }
2018-03-17The gRPC proxy module.Maxim Dounin1-0/+11
The module allows passing requests to upstream gRPC servers. The module is built by default as long as HTTP/2 support is compiled in. Example configuration: grpc_pass 127.0.0.1:9000; Alternatively, the "grpc://" scheme can be used: grpc_pass grpc://127.0.0.1:9000; Keepalive support is available via the upstream keepalive module. Note that keepalive connections won't currently work with grpc-go as it fails to handle SETTINGS_HEADER_TABLE_SIZE. To use with SSL: grpc_pass grpcs://127.0.0.1:9000; SSL connections use ALPN "h2" when available. At least grpc-go works fine without ALPN, so if ALPN is not available we just establish a connection without it. Tested with grpc-c++ and grpc-go.
2018-03-17HTTP/2: externalized various constants and interfaces.Maxim Dounin1-0/+1
2018-02-15HTTP/2: push additional request headers (closes #1478).Ruslan Ermilov1-0/+1
The Accept-Encoding, Accept-Language, and User-Agent header fields are now copied from the original request to pushed requests.
2017-07-20Mirror module.Roman Arutyunyan1-0/+11