summaryrefslogtreecommitdiffhomepage
path: root/src (follow)
AgeCommit message (Collapse)AuthorFilesLines
2012-05-15Fixed win32 build after changes in r4624.Ruslan Ermilov1-5/+5
2012-05-14Update c->sent in ngx_ssl_send_chain() even if SSL buffer is not used.Valentin Bartenev1-0/+1
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-14Resolver: protection from duplicate responses.Maxim Dounin1-2/+10
If we already had CNAME in resolver node (i.e. rn->cnlen and rn->u.cname set), and got additional response with A record, it resulted in rn->cnlen set and rn->u.cname overwritten by rn->u.addr (or rn->u.addrs), causing segmentation fault later in ngx_resolver_free_node() on an attempt to free overwritten rn->u.cname. The opposite (i.e. CNAME got after A) might cause similar problems as well.
2012-05-11Accept moderation in case of EMFILE/ENFILE.Maxim Dounin3-6/+48
In case of EMFILE/ENFILE returned from accept() we disable accept events, and (in case of no accept mutex used) arm timer to re-enable them later. With accept mutex we just drop it, and rely on normal accept mutex handling to re-enable accept events once it's acquired again. As we now handle errors in question, logging level was changed to "crit" (instead of "alert" used for unknown errors). Note: the code might call ngx_enable_accept_events() multiple times if there are many listen sockets. The ngx_enable_accept_events() function was modified to check if connection is already active (via c->read->active) and skip it then, thus making multiple calls safe.
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-29debug_connection: added the IPv6 and UNIX-domain socket support.Ruslan Ermilov3-34/+64
2012-04-27Removed surplus condition.Valentin Bartenev1-8/+4
2012-04-26Allows particular modules to handle subrequests properly.Andrey Belov4-4/+4
2012-04-26Fixed segmentation fault in ngx_resolver_create_name_query().Ruslan Ermilov1-0/+4
If name passed for resolution was { 0, NULL } (e.g. as a result of name server returning CNAME pointing to ".") pointer wrapped to (void *) -1 resulting in segmentation fault on an attempt to dereference it. Reported by Lanshun Zhou.
2012-04-26Version bump.Maxim Dounin2-3/+3
2012-04-23Version bump.Maxim Dounin2-3/+3
2012-04-23Fix of "%f" format handling.Igor Sysoev1-16/+19
ngx_sprintf("%.2f", 0.999) incorrectly resulted in "0.100" instead of "1.00".
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-18Fixed master exit if there is no events section (ticket #150).Maxim Dounin1-14/+21
Instead of checking if there is events{} section present in configuration in init_module handler we now do the same in init_conf handler. This allows master process to detect incorrect configuration early and reject it.
2012-04-18Don't silently ignore the last line of configuration file thatRuslan Ermilov1-1/+1
consists solely of one unterminated token (inspired by #150).
2012-04-17Fixed ngx_readv_chain() to honor IOV_MAX (ticket #14).Maxim Dounin1-0/+8
Not using full chain passed is ok as consumers are expected to check event's ready flag to determine if another call is needed, not the returned size.
2012-04-17IOV_MAX handling microoptimization.Maxim Dounin5-18/+44
We now stop on IOV_MAX iovec entries only if we are going to add new one, i.e. next buffer can't be coalesced into last iovec. This also fixes incorrect checks for trailer creation on FreeBSD and Mac OS X, header.nelts was checked instead of trailer.nelts.
2012-04-17Fixed loop in ngx_writev_chain() and ngx_solaris_sendfilev_chain().Maxim Dounin2-2/+2
The "complete" flag wasn't cleared on loop iteration start, resulting in broken behaviour if there were more than IOV_MAX buffers and first iteration was fully completed (and hence the "complete" flag was set to 1).
2012-04-16Fixed log->action after ssl handshake.Maxim Dounin1-0/+2
2012-04-12Fixed grammar in error messages.Ruslan Ermilov12-44/+45
2012-04-12Version bump.Maxim Dounin2-3/+3
2012-04-12Mp4: sanity checks cleanup.Maxim Dounin1-66/+208
2012-04-12Reduced the number of lines of code in ngx_inet_addr().Ruslan Ermilov1-5/+1
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-11Improved readability of the code that produces bitmask from prefix.Ruslan Ermilov1-2/+2
In collaboration with Maxim Dounin.
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-06Fixed signed integer overflows in timer code (ticket #145).Maxim Dounin2-5/+3
Integer overflow is undefined behaviour in C and this indeed caused problems on Solaris/SPARC (at least in some cases). Fix is to subtract unsigned integers instead, and then cast result to a signed one, which is implementation-defined behaviour and used to work. Strictly speaking, we should compare (unsigned) result with the maximum value of the corresponding signed integer type instead, this will be defined behaviour. This will require much more changes though, and considered to be overkill for now.
2012-04-05Comment fixed.Andrey Belov1-1/+1
2012-04-05Style: the function type should be on a line by itselfMaxim Konovalov1-1/+2
preceding the function. No functional changes.
2012-04-03In ngx_ptocidr(), check that the supplied prefix length is withinRuslan Ermilov1-0/+7
the allowed range.
2012-04-03Fixed spelling in multiline C comments.Ruslan Ermilov19-22/+22
2012-04-02Win32: improved ngx_mutex_init() stub (ticket #138).Maxim Dounin1-1/+12
This allows to run nginx with "master_process off" under Windows.