summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2016-02-24nginx-1.9.12-RELEASErelease-1.9.12Maxim Dounin1-0/+102
2016-02-24HTTP/2: implemented per request timeouts (closes #626).Valentin Bartenev3-63/+147
Previously, there were only three timeouts used globally for the whole HTTP/2 connection: 1. Idle timeout for inactivity when there are no streams in processing (the "http2_idle_timeout" directive); 2. Receive timeout for incomplete frames when there are no streams in processing (the "http2_recv_timeout" directive); 3. Send timeout when there are frames waiting in the output queue (the "send_timeout" directive on a server level). Reaching one of these timeouts leads to HTTP/2 connection close. This left a number of scenarios when a connection can get stuck without any processing and timeouts: 1. A client has sent the headers block partially so nginx starts processing a new stream but cannot continue without the rest of HEADERS and/or CONTINUATION frames; 2. When nginx waits for the request body; 3. All streams are stuck on exhausted connection or stream windows. The first idea that was rejected was to detect when the whole connection gets stuck because of these situations and set the global receive timeout. The disadvantage of such approach would be inconsistent behaviour in some typical use cases. For example, if a user never replies to the browser's question about where to save the downloaded file, the stream will be eventually closed by a timeout. On the other hand, this will not happen if there's some activity in other concurrent streams. Now almost all the request timeouts work like in HTTP/1.x connections, so the "client_header_timeout", "client_body_timeout", and "send_timeout" are respected. These timeouts close the request. The global timeouts work as before. Previously, the c->write->delayed flag was abused to avoid setting timeouts on stream events. Now, the "active" and "ready" flags are manipulated instead to control the processing of individual streams.
2016-02-24HTTP/2: always use temporary pool for processing headers.Valentin Bartenev2-25/+37
This is required for implementing per request timeouts. Previously, the temporary pool was used only during skipping of headers and the request pool was used otherwise. That required switching of pools if the request was closed while parsing. It wasn't a problem since the request could be closed only after the validation of the fully parsed header. With the per request timeouts, the request can be closed at any moment, and switching of pools in the middle of parsing header name or value becomes a problem. To overcome this, the temporary pool is now always created and used. Special checks are added to keep it when either the stream is being processed or until header block is fully parsed.
2016-02-24HTTP/2: cleaned up state while closing stream.Valentin Bartenev1-0/+4
Without this the state might keep pointing to already closed stream.
2016-02-24Fixed buffer over-read while logging invalid request headers.Valentin Bartenev1-4/+3
Since 667aaf61a778 (1.1.17) the ngx_http_parse_header_line() function can return NGX_HTTP_PARSE_INVALID_HEADER when a header contains NUL character. In this case the r->header_end pointer isn't properly initialized, but the log message in ngx_http_process_request_headers() hasn't been adjusted. It used the pointer in size calculation, which might result in up to 2k buffer over-read. Found with afl-fuzz.
2016-02-19Configure: added "build" target.Maxim Dounin2-4/+5
The "build" target introduced to do all build-related tasks, and it is now used in Makefile and in objs/Makefile as a dependency for the "install" target. In particular, this resolves problems as observed with dynamic modules by people trying to do "make install" without calling "make" first.
2016-02-19SSL: avoid calling SSL_shutdown() during handshake (ticket #901).Maxim Dounin1-0/+13
This fixes "called a function you should not call" and "shutdown while in init" errors as observed with OpenSSL 1.0.2f due to changes in how OpenSSL handles SSL_shutdown() during SSL handshakes.
2016-02-19SSL: fixed SSL_shutdown() comment.Maxim Dounin1-1/+1
2016-02-18Headers filter: fixed "add_header ... '' always".Ruslan Ermilov1-8/+8
The "always" parameter was ignored if the header value was empty.
2016-02-19Configure: skip building OpenSSL documentation to conserve time.Sergey Kandaurov1-1/+1
The install_sw target first appeared in OpenSSL 0.9.7e and is documented since OpenSSL 1.0.0 as the way to install the OpenSSL software without documentation.
2016-02-18Configure: fixed static nginx build with OpenSSL (ticket #903).Ruslan Ermilov2-7/+9
Before 7142b04337d6, it was possible to build the OpenSSL library along with nginx, and link nginx statically with this library (--with-openssl=DIR --with-ld-opt=-static --with-http_ssl_module). This was broken on Linux by not adding -ldl after -lcrypto. The fix also makes it possible to link nginx statically on Linux with the system OpenSSL library, which never worked before.
2016-02-18Core: added support for more than 64 CPUs in worker_cpu_affinity.Vladimir Homutov6-59/+83
2016-02-16HTTP/2: added debug logging of response headers.Valentin Bartenev1-0/+41
Because of HPACK compression it's hard to see what headers are actually sent by the server.
2016-02-16HTTP/2: use local pointer instead of r->connection.Valentin Bartenev1-2/+2
No functional changes.
2016-02-15Core: improved logging on invalid NGINX variable (ticket #900).Maxim Dounin1-0/+6
2016-02-13Updated OpenSSL used for win32 builds.Maxim Dounin1-1/+1
2016-02-13Win32: simplified and improved handling of MSVC versions.Maxim Dounin10-49/+41
Now we always set NGX_CC_NAME to "msvc", and additionally test compiler version as reported by "cl" in auto/cc/msvc (the same version is also available via the _MSC_VER define). In particular, this approach allows to properly check for C99 variadic macros support, which previously was not used with MSVC versions not explicitly recognized. Now unneeded wildcards in NGX_CC_NAME tests for msvc removed accordingly, as well as unused wildcards for owc and icc.
2016-02-12HTTP/2: fixed undefined behavior in ngx_http_v2_huff_encode().Valentin Bartenev1-2/+6
When the "pending" value is zero, the "buf" will be right shifted by the width of its type, which results in undefined behavior. Found by Coverity (CID 1352150).
2016-02-11HTTP/2: implemented HPACK Huffman encoding for response headers.Valentin Bartenev4-56/+353
This reduces the size of headers by over 30% on average. Based on the patch by Vlad Krasnov: http://mailman.nginx.org/pipermail/nginx-devel/2015-December/007682.html
2016-02-11Dynamic modules: fixed a version mismatch message (ticket #898).Ruslan Ermilov1-1/+1
Based on a patch by Takashi Takizawa.
2016-02-11Stream: initialize variable right before using it.Roman Arutyunyan1-2/+2
2016-02-11Stream: removed useless typedef.Roman Arutyunyan1-3/+0
2016-02-10Dynamic modules: added auth_basic module libs via ngx_module_libs=.Ruslan Ermilov1-2/+1
2016-02-09Core: ngx_module_t compatibility with C++.Piotr Sikora1-1/+1
Changes to NGX_MODULE_V1 and ngx_module_t in 85dea406e18f (1.9.11) broke all modules written in C++, because ISO C++11 does not allow conversion from string literal to char *. Signed-off-by: Piotr Sikora <piotrsikora@google.com>
2016-02-10Version bump.Maxim Dounin1-2/+2
2016-02-09release-1.9.11 tagMaxim Dounin1-0/+1
2016-02-09nginx-1.9.11-RELEASErelease-1.9.11Maxim Dounin1-0/+43
2016-02-08Dynamic modules: NGX_STREAM define removed.Maxim Dounin1-2/+0
It's not used and contradicts the idea of dynamic loading.
2016-02-05Dynamic modules: added dlsym() to configure test.Valentin Bartenev1-1/+1
It appears that AddressSanitizer in GCC 5 intercepts dlopen() and dlclose() but not dlsym().
2016-02-05Dynamic modules: fixed a copy-n-paste error.Ruslan Ermilov1-1/+1
2016-02-04Dynamic modules.Maxim Dounin21-34/+1136
The auto/module script is extended to understand ngx_module_link=DYNAMIC. When set, it links the module as a shared object rather than statically into nginx binary. The module can later be loaded using the "load_module" directive. New auto/module parameter ngx_module_order allows to define module loading order in complex cases. By default the order is set based on ngx_module_type. 3rd party modules can be compiled dynamically using the --add-dynamic-module configure option, which will preset ngx_module_link to "DYNAMIC" before calling the module config script. Win32 support is rudimentary, and only works when using MinGW gcc (which is able to handle exports/imports automatically). In collaboration with Ruslan Ermilov.
2016-02-04Dynamic modules: auto/module script.Maxim Dounin4-558/+848
This script simplifies configuration of additional modules, including 3rd party ones. The script is extensible, and will be used to introduce dynamic linking of modules in upcoming changes. 3rd party module config scripts are called with ngx_module_link preset to "ADDON" - this allows config scripts to call auto/module without ngx_module_link explicitly defined, as well as testing if new interface is in place if compatibility with older nginx versions is desired. In collaboration with Ruslan Ermilov.
2016-02-04Dynamic modules: introduced HTTP_INIT_FILTER_MODULES.Maxim Dounin1-8/+10
Additionally, HTTP_HEADERS_FILTER_MODULE now added to HTTP_FILTER_MODULES. This avoids explict use of modules at the later stages, now only module lists are used. This will be needed in later patches.
2016-02-04Dynamic modules: dlopen() support.Maxim Dounin13-4/+134
2016-02-04Dynamic modules: changed ngx_modules to cycle->modules.Maxim Dounin16-140/+148
2016-02-04Dynamic modules: moved module-related stuff to separate files.Maxim Dounin11-95/+151
2016-02-04HTTP/2: fixed possible buffer overrun (ticket #893).Valentin Bartenev1-2/+2
Due to greater priority of the unary plus operator over the ternary operator the expression didn't work as expected. That might result in one byte less allocation than needed for the HEADERS frame buffer.
2016-02-02HTTP/2: fixed padding handling in HEADERS frame with CONTINUATION.Valentin Bartenev1-1/+11
2016-02-02HTTP/2: fixed request length accounting.Valentin Bartenev1-1/+10
Now it includes not only the received body size, but the size of headers block as well.
2016-02-02HTTP/2: fixed excessive memory allocation for pool cleanup.Valentin Bartenev1-1/+1
2016-02-02HTTP/2: removed unused field from ngx_http_v2_stream_t.Valentin Bartenev1-1/+0
2015-12-17Resolver: style.Ruslan Ermilov1-9/+8
Use the original query name in error and debug messages when processing PTR responses.
2015-12-17Resolver: improved PTR response processing.Ruslan Ermilov1-28/+74
The previous code only parsed the first answer, without checking its type, and required a compressed RR name. The new code checks the RR type, supports responses with multiple answers, and doesn't require the RR name to be compressed. This has a side effect in limited support of CNAME. If a response includes both CNAME and PTR RRs, like when recursion is enabled on the server, PTR RR is handled. Full CNAME support in PTR response is not implemented in this change.
2015-12-17Resolver: style.Ruslan Ermilov1-13/+13
Renamed argument in ngx_resolver_process_a() for consistency.
2016-02-02Resolver: free TCP buffers on resolver cleanup.Roman Arutyunyan1-0/+10
2016-02-02Resolver: fixed possible resource leak introduced in 5a16d40c63de.Ruslan Ermilov1-0/+2
Found by Coverity (CID 1351175).
2016-01-28Resolver: TCP support.Roman Arutyunyan2-51/+549
Resend DNS query over TCP once UDP response came truncated.
2016-01-28Resolver: per-request DNS server balancer.Roman Arutyunyan2-5/+17
Previously, a global server balancer was used to assign the next DNS server to send a query to. That could lead to a non-uniform distribution of servers per request. A request could be assigned to the same dead server several times in a row and wait longer for a valid server or even time out without being processed. Now each query is sent to all servers sequentially in a circle until a response is received or timeout expires. Initial server for each request is still globally balanced.
2016-01-28Resolver: renamed UDP-specific structures, fields and variables.Roman Arutyunyan2-63/+63
They will be used for TCP connections as well.
2016-01-28Resolver: removed unused field from ngx_resolver_ctx_t.Roman Arutyunyan1-3/+1