summaryrefslogtreecommitdiffhomepage
path: root/src/http (unfollow)
AgeCommit message (Collapse)AuthorFilesLines
2012-05-15Fixed win32 build after changes in r4624.Ruslan Ermilov1-5/+5
2012-05-14Reverted previous attempt to fix complation warning introduced inRuslan Ermilov1-13/+12
r4624 and actually fixed it.
2012-05-14geoip: trusted proxies support and partial IPv6 support.Ruslan Ermilov1-30/+130
The module now supports recursive search of client address through the chain of trusted proxies (closes #100), in the same scope as the geo module. Proxies are listed by the "geoip_proxy" directive, recursive search is enabled by the "geoip_proxy_recursive" directive. IPv6 is partially supported: proxies may be specified with IPv6 addresses. Example: geoip_country .../GeoIP.dat; geoip_proxy 127.0.0.1; geoip_proxy ::1; geoip_proxy 10.0.0.0/8; geoip_proxy_recursive on;
2012-05-14geo: chains of trusted proxies and partial IPv6 support.Ruslan Ermilov1-74/+62
The module now supports recursive search of client address through the chain of trusted proxies, controlled by the "proxy_recursive" directive in the "geo" block. It also gets partial IPv6 support: now proxies may be specified with IPv6 addresses. Example: geo $test { ... proxy 127.0.0.1; proxy ::1; proxy_recursive; } There's also a slight change in behavior. When original client address (as specified by the "geo" directive) is one of the trusted proxies, and the value of the X-Forwarded-For request header cannot not be parsed as a valid address, an original client address will be used for lookup. Previously, 255.255.255.255 was used in this case.
2012-05-14Fixed compilation warning introduced in r4624.Ruslan Ermilov1-5/+13
2012-05-14realip: chains of trusted proxies and IPv6 support.Ruslan Ermilov1-93/+45
The module now supports recursive search of client address through the chain of trusted proxies, controlled by the "real_ip_recursive" directive (closes #2). It also gets full IPv6 support (closes #44) and canonical value of the $client_addr variable on address change. Example: real_ip_header X-Forwarded-For; set_real_ip_from 127.0.0.0/8; set_real_ip_from ::1; set_real_ip_from unix:; real_ip_recursive on;
2012-05-14New function ngx_http_get_forwarded_addr() to look up real client address.Ruslan Ermilov2-0/+99
On input it takes an original address, string in the X-Forwarded-For format and its length, list of trusted proxies, and a flag indicating to perform the recursive search. On output it returns NGX_OK and the "deepest" valid address in a chain, or NGX_DECLINED. It supports AF_INET and AF_INET6. Additionally, original address and/or proxy may be specified as AF_UNIX.
2012-05-14Upstream: fixed ip_hash rebalancing with the "down" flag.Maxim Dounin1-2/+2
Due to weight being set to 0 for down peers, order of peers after sorting wasn't the same as without the "down" flag (with down peers at the end), resulting in client rebalancing for clients on other servers. The only rebalancing which should happen after adding "down" to a server is one for clients on the server. The problem was introduced in r1377 (which fixed endless loop by setting weight to 0 for down servers). The loop is no longer possible with new smooth algorithm, so preserving original weight is safe.
2012-05-14Upstream: smooth weighted round-robin balancing.Maxim Dounin2-169/+72
For edge case weights like { 5, 1, 1 } we now produce { a, a, b, a, c, a, a } sequence instead of { c, b, a, a, a, a, a } produced previously. Algorithm is as follows: on each peer selection we increase current_weight of each eligible peer by its weight, select peer with greatest current_weight and reduce its current_weight by total number of weight points distributed among peers. In case of { 5, 1, 1 } weights this gives the following sequence of current_weight's: a b c 0 0 0 (initial state) 5 1 1 (a selected) -2 1 1 3 2 2 (a selected) -4 2 2 1 3 3 (b selected) 1 -4 3 6 -3 4 (a selected) -1 -3 4 4 -2 5 (c selected) 4 -2 -2 9 -1 -1 (a selected) 2 -1 -1 7 0 0 (a selected) 0 0 0 To preserve weight reduction in case of failures the effective_weight variable was introduced, which usually matches peer's weight, but is reduced temporarily on peer failures. This change also fixes loop with backup servers and proxy_next_upstream http_404 (ticket #47), and skipping alive upstreams in some cases if there are multiple dead ones (ticket #64).
2012-05-14Fixed possible request hang with filter finalization.Maxim Dounin1-0/+1
With r->filter_finalize set the ngx_http_finalize_connection() wasn't called from ngx_http_finalize_request() called with NGX_OK, resulting in r->main->count not being decremented, thus causing request hang in some rare situations. See here for more details: http://mailman.nginx.org/pipermail/nginx-devel/2012-May/002190.html Patch by Yichun Zhang (agentzh).
2012-05-11Rewrite: fixed escaping and possible segfault (ticket #162).Maxim Dounin1-1/+0
The following code resulted in incorrect escaping of uri and possible segfault: location / { rewrite ^(.*) $1?c=$1; return 200 "$uri"; } If there were arguments in a rewrite's replacement string, and length was actually calculated (due to duplicate captures as in the example above, or variables present), the is_args flag was set and incorrectly copied after length calculation. This resulted in escaping applied to the uri part of the replacement, resulting in incorrect escaping. Additionally, buffer was allocated without escaping expected, thus this also resulted in buffer overrun and possible segfault.
2012-05-11Fastcgi: fixed padding handling on fixed-size records.Maxim Dounin1-4/+23
Padding was incorrectly ignored on end request, empty stdout and stderr fastcgi records. This resulted in protocol desynchronization if fastcgi application used these records with padding for some reason. Reported by Ilia Vinokurov.
2012-05-11Added r->state reset on fastcgi/scgi/uwsgi request start.Maxim Dounin3-0/+7
Failing to do so results in problems if 400 or 414 requests are redirected to fastcgi/scgi/uwsgi upstream, as well as after invalid headers got from upstream. This was already fixed for proxy in r3478, but fastcgi (the only affected protocol at that time) was missed. Reported by Matthieu Tourne.
2012-05-04Added write event handler reset in ngx_http_named_location().Maxim Dounin1-0/+1
On internal redirects this happens via ngx_http_handler() call, which is not called on named location redirect. As a result incorrect write handler remained (if previously set) and this might cause incorrect behaviour (likely request hang). Patch by Yichun Zhang (agentzh).
2012-04-27Removed surplus condition.Valentin Bartenev1-8/+4
2012-04-26Allows particular modules to handle subrequests properly.Andrey Belov4-4/+4
2012-04-26Version bump.Maxim Dounin1-1/+1
2012-04-23Version bump.Maxim Dounin1-1/+1
2012-04-23Proxy: added ctx checking to input filters.Maxim Dounin1-0/+18
The proxy module context may be NULL in case of filter finalization (e.g. by image_filter) followed by an internal redirect. This needs some better handling, but for now just check if ctx is still here.
2012-04-21Image filter: compare aspect ratio more accurately during crop.Maxim Dounin1-3/+1
Previously used fixed-point calculation caused wrong code path selection in some cases, resulting in incorrect image size. See here for report: http://mailman.nginx.org/pipermail/nginx-devel/2012-April/002123.html
2012-04-19Fixed segfault with try_files (ticket #152).Maxim Dounin1-1/+1
The problem occured if first uri in try_files was shorter than request uri, resulting in reserve being 0 and hence allocation skipped. The bug was introduced in r4584 (1.1.19).
2012-04-16Fixed log->action after ssl handshake.Maxim Dounin1-0/+2
2012-04-12Fixed grammar in error messages.Ruslan Ermilov9-40/+40
2012-04-12Version bump.Maxim Dounin1-1/+1
2012-04-12Mp4: sanity checks cleanup.Maxim Dounin1-66/+208
2012-04-12Fixed buffer overflow when long URI is processed by "try_files" inRuslan Ermilov1-5/+14
regex location with "alias" (fixes ticket #135).
2012-04-11Fixed directives inheritance.Ruslan Ermilov1-3/+5
2012-04-10Access module: fixed inheritance of allow/deny ipv6 rules.Maxim Dounin1-4/+9
Previous (incorrect) behaviour was to inherit ipv6 rules separately from ipv4 ones. Now all rules are either inherited (if there are no rules defined at current level) or not (if there are any rules defined).
2012-04-10Fixed debug logging.Igor Sysoev1-1/+1
2012-04-10Fixed previous commit.Igor Sysoev1-1/+1
2012-04-10Fixed mp4 module seek.Igor Sysoev1-1/+1
2012-04-03Fixed spelling in multiline C comments.Ruslan Ermilov5-5/+5
2012-04-02Upstream: reject upstreams without normal servers.Maxim Dounin1-0/+7
Such upstreams cause CPU hog later in the code as number of peers isn't expected to be 0. Currently this may happen either if there are only backup servers defined in an upstream block, or if server with ipv6 address used in an upstream block.
2012-04-02Version bump.Maxim Dounin1-1/+1
2012-03-29Corrected spelling of error message (ticket #136).Ruslan Ermilov1-1/+1
2012-03-28Replaced ngx_http_realip_from_t with ngx_in_cidr_t.Ruslan Ermilov1-10/+4
2012-03-28Fixed calculation of range boundaries.Ruslan Ermilov1-11/+8
2012-03-28Xslt: parser options now set with xmlCtxtUseOptions().Maxim Dounin1-3/+2
Note that "ctxt->loadsubset = 1" previously used isn't really correct as ctxt->loadsubset is a bitfield now. The use of xmlCtxtUseOptions() with XML_PARSE_DTDLOAD is believed to be a better way to do the same thing. Patch by Laurence Rowe.
2012-03-27Fixed unconditional MAX_PATH usage (ticket #22).Maxim Dounin1-2/+20
POSIX doesn't require it to be defined, and Debian GNU/Hurd doesn't define it. Note that if there is no MAX_PATH defined we have to use realpath() with NULL argument and free() the result.
2012-03-22Added xslt_param and xslt_string_param directives.Maxim Dounin1-33/+168
Based on patch by Samuel Behan.
2012-03-22Fixed off-by-one in xslt parameter parsing.Maxim Dounin1-1/+1
The problem was introduced in 0.7.44 (r2589) during conversion to complex values. Previously string.len included space for terminating NUL, but with complex values it doesn't.
2012-03-22Restricted keepalive_disable safari to OS X only.Maxim Dounin1-1/+3
The problem doesn't affect non-Apple systems for sure, and many pretend to be Safari now. Prodded by Piotr Sikora.
2012-03-22Removed safari from keepalive_disable default.Maxim Dounin1-2/+1
The bug in question is likely already fixed (though unfortunately we have no information available as Apple's bugtracker isn't open), and the workaround seems to be too pessimistic for modern versions of Safari as well as other webkit-based browsers pretending to be Safari.
2012-03-21If we inserted "Last-Modified" in r->headers_out.headers, don'tRuslan Ermilov1-0/+2
forget to set the r->headers_out.last_modified pointer to it.
2012-03-21Minor ngx_http_headers_filter_module.c code cleanup.Ruslan Ermilov1-22/+20
- Removed "hash" element from ngx_http_header_val_t which was always 1. - Replaced NGX_HTTP_EXPIRES_* with ngx_http_expires_t enum type. - Added prototype for ngx_http_add_header() - Simplified ngx_http_set_last_modified().
2012-03-19For the sake of case/switch code readability, 'fall through'Maxim Konovalov2-0/+5
comments added.
2012-03-16Implemented $tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, andRuslan Ermilov1-0/+73
$tcpinfo_rcv_space variables. Supported on Linux and FreeBSD.
2012-03-15Local variable "ngx_http_next_filter" renamed to "ngx_http_next_body_filter"Ruslan Ermilov2-7/+8
for consistency with other modules.
2012-03-15The "error_log" directive specified in the "http", "server", andRuslan Ermilov1-2/+9
"location" sections now understands the special "stderr" parameter. It was already treated specially when specified in the main section.
2012-03-15Slight optimization in ngx_http_get_variable_index().Ruslan Ermilov1-1/+1