summaryrefslogtreecommitdiffhomepage
path: root/src/http (follow)
AgeCommit message (Collapse)AuthorFilesLines
2015-12-09Fixed fastcgi_pass with UNIX socket and variables (ticket #855).Ruslan Ermilov1-1/+3
This was broken in a93345ee8f52 (1.9.8).
2015-12-08Slice filter: terminate first slice with last_in_chain flag.Roman Arutyunyan1-0/+1
This flag makes sub filter flush buffered data and optimizes allocation in copy filter.
2015-12-08Slice filter: never run subrequests when main request is buffered.Roman Arutyunyan1-0/+4
With main request buffered, it's possible, that a slice subrequest will send output before it. For example, while main request is waiting for aio read to complete, a slice subrequest can start an aio operation as well. The order in which aio callbacks are called is undetermined.
2015-12-08SSL: fixed possible segfault on renegotiation (ticket #845).Sergey Kandaurov1-0/+4
Skip SSL_CTX_set_tlsext_servername_callback in case of renegotiation. Do nothing in SNI callback as in this case it will be supplied with request in c->data which isn't expected and doesn't work this way. This was broken by b40af2fd1c16 (1.9.6) with OpenSSL master branch and LibreSSL.
2015-12-07Slice filter.Roman Arutyunyan3-5/+546
Splits a request into subrequests, each providing a specific range of response. The variable "$slice_range" must be used to set subrequest range and proper cache key. The directive "slice" sets slice size. The following example splits requests into 1-megabyte cacheable subrequests. server { listen 8000; location / { slice 1m; proxy_cache cache; proxy_cache_key $uri$is_args$args$slice_range; proxy_set_header Range $slice_range; proxy_cache_valid 200 206 1h; proxy_pass http://127.0.0.1:9000; } }
2015-12-07Upstream: fill r->headers_out.content_range from upstream response.Roman Arutyunyan1-0/+5
2015-12-03Style: NGX_PTR_SIZE replaced with sizeof(void *).Maxim Dounin1-1/+1
The NGX_PTR_SIZE macro is only needed in preprocessor directives where it's not possible to use sizeof().
2015-12-02Style.Maxim Dounin1-1/+1
2015-11-30Stop emulating a space character after r->method_name.Ruslan Ermilov2-4/+1
This is an API change. The proxy module was modified to not depend on this in 44122bddd9a1. No known third-party modules seem to depend on this.
2015-11-06Proxy: improved code readability.Ruslan Ermilov1-12/+5
Do not assume that space character follows the method name, just pass it explicitly. The fuss around it has already proved to be unsafe, see bbdb172f0927 and http://mailman.nginx.org/pipermail/nginx-ru/2013-January/049692.html for details.
2015-11-30Reduced the number of GET method constants.Ruslan Ermilov1-4/+1
2015-11-30Increased the default "connection_pool_size" on 64-bit platforms.Valentin Bartenev1-1/+1
The previous default of 256 bytes isn't enough and results in two allocations on each accepted connection, which is suboptimal.
2015-11-06Style: unified request method checks.Ruslan Ermilov5-5/+5
2015-11-21Upstream: fixed "no port" detection in evaluated upstreams.Ruslan Ermilov5-10/+22
If an upstream with variables evaluated to address without a port, then instead of a "no port in upstream" error an attempt was made to connect() which failed with EADDRNOTAVAIL.
2015-11-16Realip: the $realip_remote_addr variable.Ruslan Ermilov1-1/+71
2015-11-13HTTP/2: reused HEADERS and CONTINUATION frames buffers.Valentin Bartenev2-10/+21
2015-11-13HTTP/2: fixed handling of output HEADERS frames.Valentin Bartenev1-6/+19
The HEADERS frame is always represented by more than one buffer since b930e598a199, but the handling code hasn't been adjusted. Only the first buffer of HEADERS frame was checked and if it had been sent while others had not, the rest of the frame was dropped, resulting in broken connection. Before b930e598a199, the problem could only be seen in case of HEADERS frame with CONTINUATION.
2015-11-13HTTP/2: fixed invalid headers handling (ticket #831).Valentin Bartenev1-0/+2
The r->invalid_header flag wasn't reset once an invalid header appeared in a request, resulting in all subsequent headers in the request were also marked as invalid.
2015-11-11Upstream: proxy_cache_convert_head directive.Roman Arutyunyan3-1/+13
The directive toggles conversion of HEAD to GET for cacheable proxy requests. When disabled, $request_method must be added to cache key for consistency. By default, HEAD is converted to GET as before.
2015-11-05SSL: only select HTTP/2 using NPN if "http2" is enabled.Valentin Bartenev1-10/+16
OpenSSL doesn't check if the negotiated protocol has been announced. As a result, the client might force using HTTP/2 even if it wasn't enabled in configuration.
2015-11-05HTTP/2: backed out 16905ecbb49e (ticket #822).Valentin Bartenev1-3/+5
It caused inconsistency between setting "in_closed" flag and the moment when the last DATA frame was actually read. As a result, the body buffer might not be initialized properly in ngx_http_v2_init_request_body(), which led to a segmentation fault in ngx_http_v2_state_read_data(). Also it might cause start processing of incomplete body. This issue could be triggered when the processing of a request was delayed, e.g. in the limit_req or auth_request modules.
2015-10-27HTTP/2: changed behavior of the "http2_max_field_size" directive.Valentin Bartenev2-21/+13
Now it limits only the maximum length of literal string (either raw or compressed) in HPACK request header fields. It's easier to understand and to describe in the documentation.
2015-10-27HTTP/2: fixed spelling.Valentin Bartenev1-2/+2
2015-10-26HTTP/2: simplified checking the END_STREAM flag.Valentin Bartenev1-5/+3
No functional changes.
2015-10-26HTTP/2: improved the ngx_http_v2_integer_octets(v) macro.Valentin Bartenev1-1/+6
Previously, it didn't work well for 0, 127, and 128, returning less than needed.
2015-10-26HTTP/2: fixed the NGX_HTTP_V2_MAX_FIELD macro.Valentin Bartenev1-1/+2
2015-09-28HTTP/2: fixed splitting of response headers on CONTINUATION frames.Valentin Bartenev1-173/+158
Previous code has been based on assumption that the header block can only be splitted at the borders of individual headers. That wasn't the case and might result in emitting frames bigger than the frame size limit. The current approach is to split header blocks by the frame size limit.
2015-10-26HTTP/2: introduced NGX_HTTP_V2_ENCODE_* macros.Valentin Bartenev1-11/+14
No functional changes.
2015-10-26HTTP/2: simplified producing of the Last-Modified header.Valentin Bartenev1-3/+2
2015-10-26HTTP/2: fixed header block size calculation.Valentin Bartenev1-1/+1
2015-10-01HTTP/2: fix handling of connection errors.Piotr Sikora1-6/+6
Previously, nginx worker would crash because of a double free if client disconnected or timed out before sending all headers. Found with afl-fuzz. Signed-off-by: Piotr Sikora <piotrsikora@google.com>
2015-10-01HTTP/2: fix indirect reprioritization.Piotr Sikora1-4/+13
Previously, streams that were indirectly reprioritized (either because of a new exclusive dependency on their parent or because of removal of their parent from the dependency tree), didn't have their pointer to the parent node updated. This broke detection of circular dependencies and, as a result, nginx worker would crash due to stack overflow whenever such dependency was introduced. Found with afl-fuzz. Signed-off-by: Piotr Sikora <piotrsikora@google.com>
2015-10-01HTTP/2: reject self-dependent streams.Piotr Sikora1-0/+16
Per RFC7540, a stream cannot depend on itself. Previously, this requirement was enforced on PRIORITY frames, but not on HEADERS frames and due to the implementation details nginx worker would crash (stack overflow) while opening self-dependent stream. Found with afl-fuzz. Signed-off-by: Piotr Sikora <piotrsikora@google.com>
2015-10-20HTTP/2: improved error handling while parsing integers.Valentin Bartenev1-4/+4
The case when an integer is out of frame bounds should be checked first as a more accurate error.
2015-10-20HTTP/2: improved HPACK integer parsing code readability.Ruslan Ermilov1-3/+3
No functional changes.
2015-10-19Fixed variables prefix comparison.Maxim Dounin1-12/+26
Variable names are not null-terminated, so using ngx_strncmp() without extra length checks is wrong. Reported by Markus Linnala, http://mailman.nginx.org/pipermail/nginx-devel/2015-August/007211.html.
2015-10-19Fixed handling of empty root.Maxim Dounin1-1/+3
Previously, a configuration with "root" set to an empty string tried test a character at clcf->root.data[-1]. Additional test added to make sure this won't happen. Reported by Markus Linnala, see http://mailman.nginx.org/pipermail/nginx-devel/2015-August/007210.html.
2015-10-19HTTP/2: fixed parsing of literal header fields without indexing.Valentin Bartenev1-1/+1
2015-09-28HTTP/2: fixed $server_protocol value (ticket #800).Valentin Bartenev1-0/+2
2015-09-22Style.Maxim Dounin1-1/+2
2015-09-15Increased the default number of output buffers.Valentin Bartenev1-1/+1
Since an output buffer can only be used for either reading or sending, small amounts of data left from the previous operation (due to some limits) must be sent before nginx will be able to read further into the buffer. Using only one output buffer can result in suboptimal behavior that manifests itself in forming and sending too small chunks of data. This is particularly painful with SPDY (or HTTP/2) where each such chunk needs to be prefixed with some header. The default flow-control window in HTTP/2 is 64k minus one bytes. With one 32k output buffer this results is one byte left after exhausting the window. With two 32k buffers the data will be read into the second free buffer before sending, thus the minimum output is increased to 32k + 1 bytes which is much better.
2015-09-22HTTP/2: fixed header block parsing with CONTINUATION frames (#792).Valentin Bartenev2-70/+136
It appears that the CONTINUATION frames don't need to be aligned to bounds of individual headers.
2015-09-22HTTP/2: fixed HPACK header field parsing.Valentin Bartenev1-0/+5
2015-09-21Sub filter: fixed initialization in http{} level (ticket #791).Roman Arutyunyan1-1/+2
If sub_filter directive was only specified at http{} level, sub filter internal data remained uninitialized. That would lead to a crash in runtime.
2015-09-11The HTTP/2 implementation (RFC 7240, 7241).Valentin Bartenev21-5680/+9225
The SPDY support is removed, as it's incompatible with the new module.
2015-09-11Fixed segfault with incorrect location nesting.Maxim Dounin2-2/+2
A configuration with a named location inside a zero-length prefix or regex location used to trigger a segmentation fault, as ngx_http_core_location() failed to properly detect if a nested location was created. Example configuration to reproduce the problem: location "" { location @foo {} } Fix is to not rely on a parent location name length, but rather check command type we are currently parsing. Identical fix is also applied to ngx_http_rewrite_if(), which used to incorrectly assume the "if" directive is on server{} level in such locations. Reported by Markus Linnala. Found with afl-fuzz.
2015-09-11Cache: check the whole cache key in addition to hashes.Maxim Dounin1-2/+19
This prevents a potential attack that discloses cached data if an attacker will be able to craft a hash collision between some cache key the attacker is allowed to access and another cache key with protected data. See http://mailman.nginx.org/pipermail/nginx-devel/2015-September/007288.html. Thanks to Gena Makhomed and Sergey Brester.
2015-09-03Upstream: fixed cache send error handling.Roman Arutyunyan1-11/+14
The value of NGX_ERROR, returned from filter handlers, was treated as a generic upstream error and changed to NGX_HTTP_INTERNAL_SERVER_ERROR before calling ngx_http_finalize_request(). This resulted in "header already sent" alert if header was already sent in filter handlers. The problem appeared in 54e9b83d00f0 (1.7.5).
2015-08-31Decreased the NGX_HTTP_MAX_SUBREQUESTS limit.Valentin Bartenev1-1/+1
There is no much sense in such a big value since its semantics has been changed in 06e850859a26 to limit recursive subrequests.
2015-08-31Added protection against r->main->count overflow by subrequests.Valentin Bartenev2-1/+11
This overflow has become possible after the change in 06e850859a26, since concurrent subrequests are not limited now and each of them is counted in r->main->count.