summaryrefslogtreecommitdiffhomepage
path: root/src/http (follow)
AgeCommit message (Collapse)AuthorFilesLines
2013-07-29Perl: fixed syntax usage for C preprocessor directives.Sergey Kandaurov1-7/+4
As per perlxs, C preprocessor directives should be at the first non-whitespace of a line to avoid interpreting them as comments. #if and #endif are moved so that there are no blank lines before them to retain them as part of the function body.
2013-07-29Upstream: reliably detect connection failures with SSL peers.Ruslan Ermilov1-0/+5
2013-07-25Upstream: no last buffer on errors.Maxim Dounin1-2/+10
Previously, after sending a header we always sent a last buffer and finalized a request with code 0, even in case of errors. In some cases this resulted in a loss of ability to detect the response wasn't complete (e.g. if Content-Length was removed from a response by gzip filter). This change tries to propogate to a client information that a response isn't complete in such cases. In particular, with this change we no longer pretend a returned response is complete if we wasn't able to create a temporary file. If an error code suggests the error wasn't fatal, we flush buffered data and disable keepalive, then finalize request normally. This allows to to propogate information about a problem to a client, while still sending all the data we've got from an upstream.
2013-07-25Upstream: request finalization rework.Maxim Dounin1-14/+17
No semantic changes expected, though some checks are done differently. In particular, the r->cached flag is no longer explicitly checked. Instead, we relay on u->header_sent not being set if a response is sent from a cache.
2013-07-25Upstream: NGX_HTTP_CLIENT_CLOSED_REQUEST no longer reset to 0.Maxim Dounin1-0/+1
The NGX_HTTP_CLIENT_CLOSED_REQUEST code is allowed to happen after we started sending a response (much like NGX_HTTP_REQUEST_TIME_OUT), so there is no need to reset response code to 0 in this case.
2013-07-25Upstream: added check if a response is complete.Maxim Dounin2-4/+31
Checks were added to both buffered and unbuffered code paths to detect and complain if a response is incomplete. Appropriate error codes are now passed to ngx_http_upstream_finalize_request(). With this change in unbuffered mode we now use u->length set to -1 as an indicator that EOF is allowed per protocol and used to indicate response end (much like its with p->length in buffered mode). Proxy module was changed to set u->length to 1 (instead of previously used -1) in case of chunked transfer encoding used to comply with the above.
2013-07-25Upstream: u->length now defaults to -1 (API change).Maxim Dounin2-2/+5
That is, by default we assume that response end is signalled by a connection close. This seems to be better default, and in line with u->pipe->length behaviour. Memcached module was modified accordingly.
2013-07-25Upstream: fixed store/cache of unfinished responses.Maxim Dounin1-3/+5
In case of upstream eof, only responses with u->pipe->length == -1 are now cached/stored. This ensures that unfinished chunked responses are not cached. Note well - previously used checks for u->headers_in.content_length_n are preserved. This provides an additional level of protection if protol data disagree with Content-Length header provided (e.g., a FastCGI response is sent with wrong Content-Length, or an incomple SCGI or uwsgi response), as well as protects from storing of responses to HEAD requests. This should be reconsidered if we'll consider caching of responses to HEAD requests.
2013-07-25Upstream: replaced u->pipe->temp_file with p->temp_file.Maxim Dounin1-5/+5
While here, redundant parentheses removed. No functional changes.
2013-07-25Upstream: NGX_ERROR after pipe errors.Maxim Dounin1-4/+4
2013-07-25Upstream: NGX_HTTP_GATEWAY_TIME_OUT after upstream timeouts.Maxim Dounin1-3/+3
There is no real difference from previously used 0 as NGX_HTTP_* will become 0 in ngx_http_upstream_finalize_request(), but the change preserves information about a timeout a bit longer. Previous use of ETIMEDOUT in one place was just wrong. Note well that with cacheable responses there will be a difference (code in ngx_http_upstream_finalize_request() will store the error in cache), though this change doesn't touch cacheable case.
2013-07-25Upstream: ngx_http_upstream_finalize_request(NGX_ERROR) on errors.Maxim Dounin1-25/+25
Previously, ngx_http_upstream_finalize_request(0) was used in most cases after errors. While with current code there is no difference, use of NGX_ERROR allows to pass a bit more information into ngx_http_upstream_finalize_request().
2013-07-25Upstream: consistent error handling after u->input_filter_init().Maxim Dounin1-2/+1
In all cases ngx_http_upstream_finalize_request() with NGX_ERROR now used. Previously used NGX_HTTP_INTERNAL_SERVER_ERROR in the subrequest in memory case don't cause any harm, but inconsistent with other uses.
2013-07-25Upstream: busy lock remnants removed.Maxim Dounin1-14/+0
2013-06-13Upstream: stale comments removed.Maxim Dounin1-12/+0
2013-07-25Gzip: clearing of c->buffered if all data are flushed.Maxim Dounin1-2/+4
This allows to finalize unfinished responses while still sending as much data as available.
2013-06-14Fixed ngx_http_test_reading() to finalize request properly.Maxim Dounin1-1/+1
Previous code called ngx_http_finalize_request() with rc = 0. This is ok if a response status was already set, but resulted in "000" being logged if it wasn't. In particular this happened with limit_req if a connection was prematurely closed during limit_req delay.
2013-07-25Sub filter: fixed matching after a partial match.Maxim Dounin1-31/+69
After a failed partial match we now check if there is another partial match in previously matched substring to fix cases like "aab" in "aaab". The ctx->saved string is now always sent if it's present on return from the ngx_http_sub_parse() function (and reset accordingly). This allows to release parts of previously matched data.
2013-07-25Sub filter: fixed incomplete last buffer on partial match.Maxim Dounin1-0/+20
If a pattern was partially matched at a response end, partially matched string wasn't send. E.g., a response "fo" was truncated to an empty response if partially mathed by a pattern "foo".
2013-07-25Sub filter: flush buffers handling.Maxim Dounin1-1/+4
2013-07-25Sub filter: switched to ngx_chain_get_free_buf().Maxim Dounin1-62/+23
No functional changes.
2013-07-25Sub filter: stale comments removed.Maxim Dounin1-3/+0
2013-07-24SPDY: fixed segfault with "client_body_in_file_only" enabled.Valentin Bartenev1-9/+2
It is possible to send FLAG_FIN in additional empty data frame, even if it is known from the content-length header that request body is empty. And Firefox actually behaves like this (see ticket #357). To simplify code we sacrificed our microoptimization that did not work right due to missing check in the ngx_http_spdy_state_data() function for rb->buf set to NULL.
2013-07-19Xslt: exsltRegisterAll() moved to preconfiguration.Maxim Dounin1-2/+10
The exsltRegisterAll() needs to be called before XSLT stylesheets are compiled, else stylesheet compilation hooks will not work. This change fixes EXSLT Functions extension.
2013-07-11Style.Maxim Dounin1-1/+1
2013-07-11Core: extended ngx_sock_ntop() with socklen parameter.Vladimir Homutov2-3/+4
On Linux, sockaddr length is required to process unix socket addresses properly due to unnamed sockets (which don't have sun_path set at all) and abstract namespace sockets.
2013-07-03Upstream: updated list of ngx_event_connect_peer() return values.Ruslan Ermilov1-1/+1
ngx_http_upstream_get_keepalive_peer() may return NGX_DONE to indicate that the cached keepalive connection is reused.
2013-06-28Fixed ngx_http_parse_chunked() minimal length calculation.Maxim Dounin1-2/+3
Minimal data length we expect for further calls was calculated incorrectly if parsing stopped right after parsing chunk size. This might in theory affect clients and/or backends using LF instead of CRLF. Patch by Dmitry Popov.
2013-06-20Core: support several "error_log" directives.Vladimir Homutov2-27/+2
When several "error_log" directives are specified in the same configuration block, logs are written to all files with a matching log level. All logs are stored in the singly-linked list that is sorted by log level in the descending order. Specific debug levels (NGX_LOG_DEBUG_HTTP,EVENT, etc.) are not supported if several "error_log" directives are specified. In this case all logs will use debug level that has largest absolute value.
2013-06-13SPDY: fixed code style, no functional changes.Valentin Bartenev1-1/+2
2013-06-07SPDY: pass through the full status when available.Jim Radford1-3/+12
Avoid stripping the status text when proxying for compatibility with http.
2013-06-10Perl: fixed r->header_in("Cookie") (ticket #351).Maxim Dounin1-9/+27
It was broken by X-Forwarded-For related changes in f7fe817c92a2 (1.3.14) as hh->offset is no longer 0 for Cookie.
2013-06-05Fixed debug logging in ngx_http_parse_complex_uri().Maxim Dounin1-2/+2
The *u previously logged isn't yet initialized at this point, and Valgrind complains.
2013-06-05Valgrind: supressed complaints about uninitialized bytes.Maxim Dounin1-0/+2
Valgrind complains if we pass uninitialized memory to a syscall: ==36492== Syscall param sendmsg(msg.msg_iov[0]) points to uninitialised byte(s) ==36492== at 0x6B5E6A: sendmsg (in /usr/lib/system/libsystem_kernel.dylib) ==36492== by 0x10004288E: ngx_signal_worker_processes (ngx_process_cycle.c:527) ==36492== by 0x1000417A7: ngx_master_process_cycle (ngx_process_cycle.c:203) ==36492== by 0x100001F10: main (nginx.c:410) ==36492== Address 0x7fff5fbff71c is on thread 1's stack Even initialization of all members of the structure passed isn't enough, as there is padding which still remains uninitialized and results in Valgrind complaint. Note there is no real problem here as data from uninitialized memory isn't used.
2013-06-05Status: the "last_in_chain" flag must be set.Valentin Bartenev1-0/+1
The module always produces only one and obviously the last buffer in chain.
2013-06-05SPDY: use proper macros for value length and headers counter.Valentin Bartenev1-2/+2
Currently these macros are synonyms, but this may change in the future (in particular, spdy/3 uses 4 bytes for lengths).
2013-06-04Core: fixed handling of "stderr" in error_log.Vladimir Homutov1-0/+1
If "stderr" was specified in one of the "error_log" directives, stderr is not redirected to the first error_log on startup, configuration reload, and reopening log files.
2013-05-30Access: support for UNIX-domain client addresses (ticket #359).Ruslan Ermilov1-35/+111
2013-05-27Upstream: http_403 support in proxy_next_upstream (and friends).Maxim Dounin6-5/+19
The parameter is mostly identical to http_404, and is expected to be used in similar situations. The 403 code might be returned by a backend instead of 404 on initial sync of new directories with rsync. See here for feature request and additional details: http://mailman.nginx.org/pipermail/nginx-ru/2013-April/050920.html
2013-05-24Xslt: xslt_last_modified directive.Maxim Dounin1-4/+22
Directive is similar to ssi_last_modified and sub_filter_last_modified directives introduced by previous commits.
2013-05-24Sub filter: sub_filter_last_modified directive.Maxim Dounin1-1/+14
Directive is similar to ssi_last_modified introduced by previous commit. Patch by Alexey Kolpakov.
2013-05-24SSI: ssi_last_modified directive.Maxim Dounin1-1/+14
The "ssi_last_modified" directive allows to preserve Last-Modified header in SSI responses. The directive is similar to SSILastModified one available in Apache: http://httpd.apache.org/docs/2.4/mod/mod_include.html#ssilastmodified Patch by Alexey Kolpakov.
2013-05-23Memcached: stricten header validation.Ruslan Ermilov1-9/+17
An invalid memcached reply that started with '\n' could cause segmentation fault. An invalid memcached reply "VALUE / 0 2\r?ok\r\nEND\r\n" was considered as a valid response. In addition, if memcached reports that the key was not found, set u->headers_in.content_length_n to 0. This ensures that ngx_http_memcached_filter() will not be called while previous code relied on always intercepting 404. Initialization of ctx->rest was moved to where it belongs.
2013-05-23Use "void" for functions with empty parameter list.Sergey Kandaurov2-2/+2
2013-05-22Referer module: added $invalid_referer to variables hash.Maxim Dounin1-2/+1
This makes it accessible via dynamic lookup with ngx_http_get_variable() from Perl, SSI, etc. Patch by Yichun Zhang (agentzh).
2013-05-21Upstream: fixed fail_timeout and max_fails > 1.Maxim Dounin2-2/+8
Due to peer->checked always set since rev. c90801720a0c (1.3.0) by round-robin and least_conn balancers (ip_hash not affected), the code in ngx_http_upstream_free_round_robin_peer() function incorrectly reset peer->fails too often. Reported by Dmitry Popov, http://mailman.nginx.org/pipermail/nginx-devel/2013-May/003720.html
2013-05-21Fixed error logging.Sergey Kandaurov2-5/+3
The provided argument list didn't follow a used format string.
2013-05-21Upstream: slightly optimized ngx_http_upstream_process_header().Ruslan Ermilov1-4/+4
2013-05-21Upstream: made the assignment more obvious.Ruslan Ermilov1-1/+1
No functional changes.
2013-05-15Upstream keepalive: slightly simplified code.Ruslan Ermilov1-5/+2