summaryrefslogtreecommitdiffhomepage
path: root/src/http (follow)
AgeCommit message (Collapse)AuthorFilesLines
2015-03-04Proxy: use an appropriate error on memory allocation failure.Ruslan Ermilov1-1/+1
2015-03-04Style: moved ngx_http_ephemeral() macro to ngx_http_request.h.Ruslan Ermilov2-3/+3
2015-03-03Upstream keepalive: drop ready flag on EAGAIN from recv(MSG_PEEK).Valentin Bartenev1-1/+1
Keeping the ready flag in this case might results in missing notification of broken connection until nginx tried to use it again. While there, stale comment about stale event was removed since this function is also can be called directly.
2015-03-03Style.Maxim Dounin1-2/+2
Noted by Ruslan Ermilov.
2015-03-02Upstream: upstream argument in ngx_http_upstream_process_request().Maxim Dounin1-6/+6
In case of filter finalization, r->upstream might be changed during the ngx_event_pipe() call. Added an argument to preserve it while calling the ngx_http_upstream_process_request() function.
2015-03-02Upstream: avoid duplicate finalization.Maxim Dounin1-3/+7
A request may be already finalized when ngx_http_upstream_finalize_request() is called, due to filter finalization: after filter finalization upstream can be finalized via ngx_http_upstream_cleanup(), either from ngx_http_terminate_request(), or because a new request was initiated to an upstream. Then the upstream code will see an error returned from the filter chain and will call the ngx_http_upstream_finalize_request() function again. To prevent corruption of various upstream data in this situation, make sure to do nothing but merely call ngx_http_finalize_request(). Prodded by Yichun Zhang, for details see the thread at http://nginx.org/pipermail/nginx-devel/2015-February/006539.html.
2015-03-02SSL: reset ready flag if recv(MSG_PEEK) found no bytes in socket.Roman Arutyunyan1-0/+1
Previously, connection hung after calling ngx_http_ssl_handshake() with rev->ready set and no bytes in socket to read. It's possible in at least the following cases: - when processing a connection with expired TCP_DEFER_ACCEPT on Linux - after parsing PROXY protocol header if it arrived in a separate TCP packet Thanks to James Hamlin.
2015-03-02Cache: do not inherit last_modified and etag from stale response.Roman Arutyunyan2-2/+7
When replacing a stale cache entry, its last_modified and etag could be inherited from the old entry if the response code is not 200 or 206. Moreover, etag could be inherited with any response code if it's missing in the new response. As a result, the cache entry is left with invalid last_modified or etag which could lead to broken revalidation. For example, when a file is deleted from backend, its last_modified is copied to the new 404 cache entry and is used later for revalidation. Once the old file appears again with its original timestamp, revalidation succeeds and the cached 404 response is sent to client instead of the file. The problem appeared with etags in 44b9ab7752e3 (1.7.3) and affected last_modified in 1573fc7875fa (1.7.9).
2015-03-02Upstream hash: speedup consistent hash init.Roman Arutyunyan1-21/+31
Repeatedly calling ngx_http_upstream_add_chash_point() to create the points array in sorted order, is O(n^2) to the total weight. This can cause nginx startup and reconfigure to be substantially delayed. For example, when total weight is 1000, startup takes 5s on a modern laptop. Replace this with a linear insertion followed by QuickSort and duplicates removal. Startup for total weight of 1000 reduces to 40ms. Based on a patch by Wai Keen Woon.
2015-02-17Cache: reduced diffs to the plus version of nginx.Ruslan Ermilov1-6/+4
No functional changes.
2015-02-11Refactored sendfile() AIO preload.Valentin Bartenev2-66/+36
This reduces layering violation and simplifies the logic of AIO preread, since it's now triggered by the send chain function itself without falling back to the copy filter. The context of AIO operation is now stored per file buffer, which makes it possible to properly handle cases when multiple buffers come from different locations, each with its own configuration.
2015-01-22Upstream: detect port absence in fastcgi_pass with IP literal.Ruslan Ermilov1-1/+1
If fastcgi_pass (or any look-alike that doesn't imply a default port) is specified as an IP literal (as opposed to a hostname), port absence was not detected at configuration time and could result in EADDRNOTAVAIL at run time. Fixed this in such a way that configs like http { server { location / { fastcgi_pass 127.0.0.1; } } upstream 127.0.0.1 { server 10.0.0.1:12345; } } still work. That is, port absence check is delayed until after we make sure there's no explicit upstream with such a name.
2015-01-21Fixed try_files directory test to match only a directory.Damien Tournoud1-1/+1
Historically, it was possible to match either a file or directory in the following configuration: location / { try_files $uri/ =404; }
2015-02-02Cache: added temp_path to file cache.Roman Arutyunyan3-21/+51
If use_temp_path is set to off, a subdirectory "temp" is created in the cache directory. It's used instead of proxy_temp_path and friends for caching upstream response.
2015-01-14Upstream: $upstream_header_time variable.Vladimir Homutov2-2/+24
Keeps time spent on obtaining the header from an upstream server. The value is formatted similar to the $upstream_response_time variable.
2014-12-26Upstream: use_temp_path parameter of proxy_cache_path and friends.Valentin Bartenev3-1/+46
When set to "off", temporary files for cacheable responses will be stored inside cache directory.
2014-12-26Cache: update variant while setting header.Valentin Bartenev3-37/+62
Some parts of code related to handling variants of a resource moved into a separate function that is called earlier. This allows to use cache file name as a prefix for temporary file in the following patch.
2014-12-22Upstream: added variables support to proxy_cache and friends.Valentin Bartenev7-36/+352
2014-12-22Upstream: preset some cache configuration when bypassing.Valentin Bartenev1-9/+7
No functional changes.
2014-12-22Upstream: refactored proxy_cache and friends.Valentin Bartenev6-78/+85
The configuration handling code has changed to look similar to the proxy_store directive and friends. This simplifies adding variable support in the following patch. No functional changes.
2014-12-22Upstream: mutually exclusive inheritance of "cache" and "store".Valentin Bartenev4-0/+56
Currently, storing and caching mechanisms cannot work together, and a configuration error is thrown when the proxy_store and proxy_cache directives (as well as their friends) are configured on the same level. But configurations like in the example below were allowed and could result in critical errors in the error log: proxy_store on; location / { proxy_cache one; } Only proxy_store worked in this case. For more predictable and errorless behavior these directives now prevent each other from being inherited from the previous level.
2014-12-22Upstream: simplified proxy_store and friends configuration code.Valentin Bartenev5-34/+25
This changes internal API related to handling of the "store" flag in ngx_http_upstream_conf_t. Previously, a non-null value of "store_lengths" was enough to enable store functionality with custom path. Now, the "store" flag is also required to be set. No functional changes.
2014-12-12Autoindex: implemented XML output format.Valentin Bartenev1-0/+105
2014-12-12Autoindex: implemented JSON output format.Valentin Bartenev1-5/+221
2014-12-12Autoindex: rendering code moved to a separate function.Valentin Bartenev1-72/+96
No functional changes.
2014-12-11Headers filter: variables support in expires (ticket #113).Maxim Dounin1-51/+125
2014-12-11Headers filter: local variables for config, no functional changes.Maxim Dounin1-27/+31
2014-10-09Upstream: fixed inheritance of proxy_store and friends.Valentin Bartenev4-4/+4
The proxy_store, fastcgi_store, scgi_store and uwsgi_store were inherited incorrectly if a directive with variables was defined, and then redefined to the "on" value, i.e. in configurations like: proxy_store /data/www$upstream_http_x_store; location / { proxy_store on; }
2014-12-09Proxy: fixed incorrect URI change due to if (ticket #86).Maxim Dounin1-1/+1
In the following configuration request was sent to a backend without URI changed to '/' due to if: location /proxy-pass-uri { proxy_pass http://127.0.0.1:8080/; set $true 1; if ($true) { # nothing } } Fix is to inherit conf->location from the location where proxy_pass was configured, much like it's done with conf->vars.
2014-12-09Upstream: fixed unexpected inheritance into limit_except blocks.Maxim Dounin4-25/+37
The proxy_pass directive and other handlers are not expected to be inherited into nested locations, but there is a special code to inherit upstream handlers into limit_except blocks, as well as a configuration into if{} blocks. This caused incorrect behaviour in configurations with nested locations and limit_except blocks, like this: location / { proxy_pass http://u; location /inner/ { # no proxy_pass here limit_except GET { # nothing } } } In such a configuration the limit_except block inside "location /inner/" unexpectedly used proxy_pass defined in "location /", while it shouldn't. Fix is to avoid inheritance of conf->upstream.upstream (and conf->proxy_lengths) into locations which don't have noname flag.
2014-12-09Upstream: inheritance of proxy_pass and friends (ticket #645).Maxim Dounin4-24/+12
Instead of independant inheritance of conf->upstream.upstream (proxy_pass without variables) and conf->proxy_lengths (proxy_pass with variables) we now test them both and inherit only if neither is set. Additionally, SSL context is also inherited only in this case now. Based on the patch by Alexey Radkov.
2014-12-09Proxy: the "TE" header now stripped by default (ticket #537).Maxim Dounin1-0/+2
2014-11-26Cache: send conditional requests only for cached 200/206 responses.Piotr Sikora2-3/+10
RFC7232 says: The 304 (Not Modified) status code indicates that a conditional GET or HEAD request has been received and would have resulted in a 200 (OK) response if it were not for the fact that the condition evaluated to false. which means that there is no reason to send requests with "If-None-Match" and/or "If-Modified-Since" headers for responses cached with other status codes. Also, sending conditional requests for responses cached with other status codes could result in a strange behavior, e.g. upstream server returning 304 Not Modified for cached 404 Not Found responses, etc. Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
2014-12-02Cache: proper wakeup of subrequests.Maxim Dounin1-2/+6
In case of a cache lock timeout and in the aio handler we now call r->write_event_handler() instead of a connection write handler, to make sure to run appropriate subrequest. Previous code failed to run inactive subrequests and hence resulted in suboptimal behaviour, see report by Yichun Zhang: http://mailman.nginx.org/pipermail/nginx-devel/2013-October/004435.html (Infinite hang claimed in the report seems impossible without 3rd party modules, as subrequests will be eventually woken up by the postpone filter.)
2014-12-02Upstream: improved subrequest logging.Maxim Dounin4-21/+45
To ensure proper logging make sure to set current_request in all event handlers, including resolve, ssl handshake, cache lock wait timer and aio read handlers. A macro ngx_http_set_log_request() introduced to simplify this.
2014-12-01Access log: restricted "log_format" to "http" level.Sergey Kandaurov1-7/+1
Specifying the "log_format" directive on levels other than "http" is deprecated since 73d37e1ccb91 (1.1.11).
2014-11-28Write filter: fixed handling of sync bufs (ticket #132).Maxim Dounin1-2/+11
2014-11-28Fixed post_action to not trigger "header already sent" alert.Maxim Dounin1-0/+4
The alert was introduced in 03ff14058272 (1.5.4), and was triggered on each post_action invocation. There is no real need to call header filters in case of post_action, so return NGX_OK from ngx_http_send_header() if r->post_action is set.
2014-11-21SPDY: push pending data while closing a stream as with keepalive.Valentin Bartenev1-1/+51
This helps to avoid delays in sending the last chunk of data because of bad interaction between Nagle's algorithm on nginx side and delayed ACK on the client side. Delays could also be caused by TCP_CORK/TCP_NOPUSH if SPDY was working without SSL and sendfile() was used.
2014-11-18Cache: add support for Cache-Control's s-maxage response directive.Piotr Sikora1-8/+14
Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
2014-11-19Proxy: renamed and rearranged fields in proxy configuration.Roman Arutyunyan1-16/+15
No functional changes.
2014-11-19Upstream: different header lists for cached and uncached requests.Roman Arutyunyan4-106/+135
The upstream modules remove and alter a number of client headers before sending the request to upstream. This set of headers is smaller or even empty when cache is disabled. It's still possible that a request in a cache-enabled location is uncached, for example, if cache entry counter is below min_uses. In this case it's better to alter a smaller set of headers and pass more client headers to backend unchanged. One of the benefits is enabling server-side byte ranges in such requests.
2014-11-19Upstream: moved header lists to separate structures.Roman Arutyunyan4-157/+179
No functional changes.
2014-11-19Upstream: moved header initializations to separate functions.Roman Arutyunyan4-89/+82
No functional changes.
2014-11-19Scgi: do not push redundant NULL element into conf->params.Roman Arutyunyan1-7/+0
2014-11-18Cache: proxy_cache_lock_age and friends.Roman Arutyunyan8-9/+71
Once this age is reached, the cache lock is discarded and another request can acquire the lock. Requests which failed to acquire the lock are not allowed to cache the response.
2014-11-07SPDY: fixed check for too long header name or value.Valentin Bartenev1-3/+3
For further progress a new buffer must be at least two bytes larger than the remaining unparsed data. One more byte is needed for null-termination and another one for further progress. Otherwise inflate() fails with Z_BUF_ERROR.
2014-11-07SPDY: improved debug logging of inflate() calls.Valentin Bartenev1-4/+16
2014-11-04Upstream: support named location for X-Accel-Redirect.Toshikuni Fukaya1-9/+16
2014-10-30Upstream: add "proxy_ssl_certificate" and friends.Piotr Sikora2-0/+154
Signed-off-by: Piotr Sikora <piotr@cloudflare.com>