Commit graph

3632 commits

Author SHA1 Message Date
Maxim Dounin
9afbcf447d Version bump. 2012-02-04 22:23:12 +00:00
Maxim Dounin
9cccc74346 release-1.0.11 tag 2011-12-15 14:05:08 +00:00
Maxim Dounin
1985212edb nginx-1.0.11-RELEASE 2011-12-15 14:04:39 +00:00
Maxim Dounin
853864245a Merge of r4315:
Allowed add_header for proxied 206 replies.

It was working for nginx's own 206 replies as they are seen as 200 in the
headers filter module (range filter goes later in the headers filter chain),
but not for proxied replies.
2011-12-14 18:06:21 +00:00
Maxim Dounin
db7394b9a5 Merge of r4313:
Added escaping of double quotes in ngx_escape_html().

Patch by Zaur Abasmirzoev.
2011-12-14 18:04:06 +00:00
Maxim Dounin
ad50cf7b86 Merge of r4307:
Fix of mp4 module seeking.
2011-12-14 18:02:37 +00:00
Maxim Dounin
620810987a Merge of r4305:
Fixed segfault on ssl servers without cert with SNI (ticket #54).

Non-default servers may not have ssl context created if there are no
certificate defined.  Make sure to check if ssl context present before
using it.
2011-12-14 18:00:50 +00:00
Maxim Dounin
6b14514f95 Merge of r4298:
Fixed flv header to match specification.

Used "\x5" in 5th byte to claim presence of both audio and video.  Used
previous tag size 0 in the beginning of the flv body (bytes 10 .. 13) as
required by specification (see http://www.adobe.com/devnet/f4v.html).

Patch by Piotr Sikora.
2011-12-14 15:30:02 +00:00
Maxim Dounin
de0d84a82a Merge of r4295:
Fixed incorrect counting the length of headers in a SCGI request.
2011-12-14 15:28:13 +00:00
Maxim Dounin
eb797a1658 Merge of r4294:
Fixed handling of SIGWINCH/NOACCEPT signal.

After first upgrade it was ignored since r4020 (1.1.1, 1.0.9) as
ngx_daemonized wasn't set.
2011-12-14 15:25:32 +00:00
Maxim Dounin
f73a105e40 Merge of r4284:
Introduction of simple ngx_write_stderr() instead of ngx_log_stderr()
for output of ./configure options, etc., since ngx_log_stderr() output
length is limited by 2048 characters defined as NGX_MAX_ERROR_STR.
2011-12-14 15:23:23 +00:00
Maxim Dounin
c982208430 Merge of r4282, r4302:
Added image/webp and video/webm MIME types.  Added svgz extension for
compressed SVG.
2011-12-14 15:16:05 +00:00
Maxim Dounin
a931dc4341 Merge of r4275, r4276, r4278, r4279:
Fixes for proxy_set_header, fastcgi/scgi/uwsgi_param inheritance:

*) Fixed proxy_set_header inheritance with proxy_cache (ticket #45).

   Headers cleared with cache enabled (If-Modified-Since etc.) might be
   cleared in unrelated servers/locations without proxy_cache enabled
   if proxy_cache was used in some server/location.

   Example config which triggered the problem:

       proxy_set_header X-Test "test";
       server { location /1 { proxy_cache name; proxy_pass ... } }
       server { location /2 { proxy_pass ... } }

   Another one:

       server {
           proxy_cache name;
           location /1 { proxy_pass ... }
           location /2 { proxy_cache off; proxy_pass ... }
       }

   In both cases If-Modified-Since header wasn't sent to backend in
   location /2.

   Fix is to not modify conf->headers_source, but instead merge user-supplied
   headers from conf->headers_source and default headers (either cache or not)
   into separate headers_merged array.

*) Fixed proxy_set_header inheritance with proxy_set_body.

*) Separate functions to merge fastcgi/scgi/uwsgi params.
   No functional changes.

*) Fixed fastcgi/scgi/uwsgi_param inheritance.  The following problems were
   fixed:

   1. Directive fastcgi_cache affected headers sent to backends in unrelated
      servers / locations (see ticket #45).

   2. If-Unmodified-Since, If-Match and If-Range headers were sent to
      backends if fastcgi_cache was used.

   3. Cache-related headers were sent to backends if there were no
      fastcgi_param directives and fastcgi_cache was used at server level.
2011-12-14 15:13:25 +00:00
Maxim Dounin
c2dac94b9d Merge of r4270, r4274:
Minor cleanup:

*) Changed error message to be more appropriate in the imaginary
   "open_file_cache max=0" case.

*) Fixed NGX_CONF_TAKE1/NGX_CONF_FLAG misuse.
2011-12-14 14:31:55 +00:00
Maxim Dounin
c5bf5678a3 Merge of r4267, r4301:
Fix of the "keepalive_disable" directive.
2011-12-14 13:40:25 +00:00
Maxim Dounin
7a35eab981 Merge of r4266, r4308, r4309:
Image filter changes:

*) The "image_filter_sharpen" directive.

*) Cosmetics.

*) Fixed "rotate" to always work when combined with "resize/crop".
2011-12-14 13:37:53 +00:00
Maxim Dounin
def9ecde1a Merge of r4231, r4300, r4303, r4304:
Configure/build changes and fixes:

*) Revamped "configure --help" text.

*) FreeBSD 10-current has recently gotten POSIX_FADV_* macros.
   A fix for the broken build applied.

*) AIX 7 defines sys_nerr in errno.h, therefore <errno.h> included
   in the sys_nerr test.

   When sys_nerr and _sys_nerr are missed on a particular platform
   and our euristic for a maximum errno detection applied always
   print the maximum errno number we reached instead of printing void.

   This makes possible to build nginx on AIX 7.1.

*) Made it possible to build/install from the SVN checkout.
2011-12-14 13:34:16 +00:00
Maxim Dounin
a78bab3b57 Merge of r4227, r4228:
Fixed range checking for the "somaxconn" sysctl.  Fixed port range checking.
2011-12-14 13:06:45 +00:00
Maxim Dounin
509f7ae156 Merge of r4223:
FreeBSD's MALLOC_OPTIONS must be set before any malloc() call.
The bug has been introduced in r3799.
2011-12-13 19:01:10 +00:00
Maxim Dounin
8d375710c2 Merge of r4221, r4222:
Fixed unix ngx_write_chain_to_file() to return total bytes written.

Previously result of last iteration's writev() was returned.  This was
unnoticed as return value was only used if chain contained only one or
two buffers.
2011-12-13 18:59:18 +00:00
Maxim Dounin
5c5d241e48 Merge of r4217, r4218:
Fixed "expires @00h".  Fixed "expires @time" with unknown last modified
time (ticket #32).
2011-12-13 18:46:07 +00:00
Maxim Dounin
1f6eddd095 Merge of r4153:
Better handling of late upstream creation.

Configuration with duplicate upstream blocks defined after first use, i.e.
like

    server {
        ...
        location / {
            proxy_pass http://backend;
        }
    }

    upstream backend { ... }
    upstream backend { ... }

now correctly results in "duplicate upstream" error.

Additionally, upstream blocks defined after first use now handle various
server directive parameters ("weight", "max_fails", etc.).  Previously
configuration like

    server {
        ...
        location / {
            proxy_pass http://backend;
        }
    }

    upstream backend {
        server 127.0.0.1 max_fails=5;
    }

incorrectly resulted in "invalid parameter "max_fails=5"" error.
2011-12-13 18:34:34 +00:00
Maxim Dounin
a96d698a88 Merge of r4144:
Upstream: clearing of u->peer.connection on close.

This fixes crashes observed with some 3rd party balancer modules.  Standard
balancer modules (round-robin and ip hash) explicitly set pc->connection
(aka u->peer.connection) to NULL and aren't affected.
2011-12-13 18:30:15 +00:00
Maxim Dounin
f5c8a31e98 Merge of r4001, r4002, r4008:
Manpage changes:

*) Support link.

*) Commented out reference to non-existing nginx.conf(5).

*) Rebuild manpage only if needed.
2011-12-13 18:07:52 +00:00
Maxim Dounin
701bb91e15 Merge of r4000, r4014, r4265, r4321, r4342, r4343:
Infrastructure changes:

*) Don't ignore xmllint errors.

*) Added missing dependencies for the CHANGES{,ru} targets.
   Pass string params to xsltproc.

*) Ancient incomplete ngx_http_status_module removal.

*) Compute the repository root from the checkout.

*) Fixed RELEASE target to correctly call "release" one.
2011-12-13 17:58:18 +00:00
Maxim Dounin
b7d4fc139b Version bump. 2011-12-13 16:59:41 +00:00
Igor Sysoev
e4715c7e9f release-1.0.10 tag 2011-11-15 08:24:10 +00:00
Igor Sysoev
b2ee2d78fe nginx-1.0.10-RELEASE 2011-11-15 08:24:03 +00:00
Igor Sysoev
612bd3f998 Merge of r4283:
Fix of "Content-Length" header of MP4 response if start argument was used.

Patch by Piotr Sikora.
2011-11-14 16:14:11 +00:00
Igor Sysoev
199832cc75 Merge of r4280:
Reverted incorrect change in internal md5 (part of r3928).
2011-11-14 16:13:15 +00:00
Igor Sysoev
8b346e57ee Merge of r4268:
Fixed compression pointer processing in DNS response greater than 255 bytes.

Thanks to Ben Hawkes.
2011-11-14 16:12:25 +00:00
Igor Sysoev
ad866a4e60 Version bump. 2011-11-14 15:53:35 +00:00
Igor Sysoev
631181c34f release-1.0.9 tag 2011-11-01 14:51:26 +00:00
Igor Sysoev
3de2644bf4 nginx-1.0.9-RELEASE 2011-11-01 14:51:19 +00:00
Igor Sysoev
96c920f3ad Surplus CHANGES line removal. 2011-11-01 14:39:36 +00:00
Igor Sysoev
7e06758270 Merging r4236:
Fixed documentation pointer.
2011-11-01 14:21:22 +00:00
Igor Sysoev
6155bf1ed2 Merging r4210:
Fixed utf8 decode (ticket #25).

Patch by Alexey Kuts.
2011-11-01 14:20:43 +00:00
Igor Sysoev
5d743f5d2f Merging r4209:
Skipping location rewrite phase for server null location.
2011-11-01 14:19:13 +00:00
Igor Sysoev
30c8e394bd Merging r4198:
Additional headers for proxy/fastcgi/uwsgi/scgi_ignore_headers.

Now the following headers may be ignored as well: X-Accel-Limit-Rate,
X-Accel-Buffering, X-Accel-Charset.
2011-11-01 14:18:10 +00:00
Igor Sysoev
6b06b637ce Merging r4189, r4197:
Perl related fixes:

*) Handling of Content-Encoding set from perl.

   This fixes double gzipping in case of gzip filter being enabled while perl
   returns already gzipped response.

*) Fixed macro name.
2011-11-01 14:15:42 +00:00
Igor Sysoev
8c003d705d Merging r4195, r4196:
AIO related fixes:

*) Fix for connection drops with AIO.

   Connections serving content with AIO to fast clients were dropped with
   "client timed out" messages after send_timeout from response start.

*) Fix for socket leak with "aio sendfile" and "limit_rate".

   Second aio post happened when timer set by limit_rate expired while we have
   aio request in flight, resulting in "second aio post" alert and socket leak.

   The patch adds actual protection from aio calls with r->aio already set to
   aio sendfile code in ngx_http_copy_filter().  This should fix other cases
   as well, e.g. when sending buffered to disk upstream replies while still
   talking to upstream.

   The ngx_http_writer() is also fixed to handle the above case (though it's
   mostly optimization now).
2011-11-01 14:13:25 +00:00
Igor Sysoev
58af1da61e Merging r4193, r4194:
Autoindex fixes:

*) Autoindex: escape '?' in file names.

   For files with '?' in their names autoindex generated links with '?' not
   escaped.  This resulted in effectively truncated links as '?' indicates
   query string start.

   This is an updated version of the patch originally posted at [1].  It
   introduces generic NGX_ESCAPE_URI_COMPONENT which escapes everything but
   unreserved characters as per RFC 3986.  This approach also renders unneeded
   special colon processing (as colon is percent-encoded now), it's dropped
   accordingly.

   [1] http://nginx.org/pipermail/nginx-devel/2010-February/000112.html

*) Autoindex: escape html in file names.
2011-11-01 14:09:15 +00:00
Igor Sysoev
79318b1dab Merging r4158:
Added uwsgi_buffering and scgi_buffering directives.

Patch by Peter Smit.
2011-11-01 14:04:23 +00:00
Igor Sysoev
816c6c8049 Merging r4190, r4232:
MP4 related fixes:

*) Fixing mp4 module seeking on 32-bit platforms.

*) Adding m4a and m4v MIME types (ticket #42).
2011-11-01 14:02:07 +00:00
Igor Sysoev
60fc9be85d Merging r4179, r4182, r4212:
Adding RELEASE procedure in GNUmakefile.
2011-11-01 14:00:04 +00:00
Igor Sysoev
29f1ce37cb Merging r4155, r4219, r4220, r4230:
Windows related fixes:

*) Fixed segmentation fault with empty config on Windows.
   See here for report:
   http://mailman.nginx.org/pipermail/nginx-ru/2011-September/043288.html

*) Recent SDKs allow to build IPV6 only for Windows XP or above.

*) Fixing conflict with SDK off_t definition.

*) Fix of building by Microsoft Visual C++ 10 compiler.
2011-11-01 13:56:26 +00:00
Igor Sysoev
22f9238e11 Merging r4151, r4152, r4177:
HTTP cache related fixes:

*) Cache: fix for sending of empty responses.

   Revert wrong fix for empty responses introduced in 0.8.31 and apply new
   one, rewritten to match things done by static module as close as possible.

*) Cache: fix for sending of stale responses.

   For normal cached responses ngx_http_cache_send() sends last buffer and then
   request finalized via ngx_http_finalize_request() call, i.e. everything is
   ok.

   But for stale responses (i.e. when upstream died, but we have something in
   cache) the same ngx_http_cache_send() sends last buffer, but then in
   ngx_http_upstream_finalize_request() another last buffer is send.  This
   causes duplicate final chunk to appear if chunked encoding is used (and
   resulting problems with keepalive connections and so on).

   Fix this by not sending in ngx_http_upstream_finalize_request()
   another last buffer if we know response was from cache.

*) Fixed cache bypass caching of non-cacheable replies (ticket #21).

   If cache was bypassed with proxy_cache_bypass, cache-controlling headers
   (Cache-Control, Expires) wasn't considered and response was cached even
   if it was actually non-cacheable.

   Patch by John Ferlito.
2011-11-01 13:49:31 +00:00
Igor Sysoev
b1913e7397 Merging r4147, r4148, r4149, r4150, r4207:
Fixes of combination of error_page and return directives:

*) Fix for incorrect 201 replies from dav module.

   Replies with 201 code contain body, and we should clearly indicate it's
   empty if it's empty.  Before 0.8.32 chunked was explicitly disabled for
   201 replies and as a result empty body was indicated by connection close
   (not perfect, but worked).  Since 0.8.32 chunked is enabled, and this
   causes incorrect responses from dav module when HTTP/1.1 is used: with
   "Transfer-Encoding: chunked" but no chunks at all.

   Fix is to actually return empty body in special response handler instead
   of abusing r->header_only flag.

   See here for initial report:
   http://mailman.nginx.org/pipermail/nginx-ru/2010-October/037535.html

*) Fix for double content when return is used in error_page handler.

   Test case:

      location / {
          error_page 405 /nope;
          return 405;
      }

      location /nope {
          return 200;
      }

   This is expected to return 405 with empty body, but in 0.8.42+ will return
   builtin 405 error page as well (though not counted in Content-Length, thus
   breaking protocol).

   Fix is to use status provided by rewrite script execution in case
   it's less than NGX_HTTP_BAD_REQUEST even if r->error_status set.  This
   check is in line with one in ngx_http_script_return_code().

   Note that this patch also changes behaviour for "return 302 ..." and
   "rewrite ... redirect" used as error handler.  E.g.

       location / {
           error_page 405 /redirect;
           return 405;
       }

       location /redirect {
           rewrite ^ http://example.com/;
       }

   will actually return redirect to "http://example.com/" instead of builtin
   405 error page with meaningless Location header.  This looks like correct
   change and it's in line with what happens on e.g. directory redirects
   in error handlers.

*) Fix for "return 202" not discarding body.

   Big POST (not fully preread) to a

       location / {
           return 202;
       }

   resulted in incorrect behaviour due to "return" code path not calling
   ngx_http_discard_request_body().  The same applies to all "return" used
   with 2xx/3xx codes except 201 and 204, and to all "return ... text" uses.

   Fix is to add ngx_http_discard_request_body() call to
   ngx_http_send_response() function where it looks appropriate.
   Discard body call from emtpy gif module removed as it's now redundant.

   Reported by Pyry Hakulinen, see
   http://mailman.nginx.org/pipermail/nginx/2011-August/028503.html

*) Incorrect special case for "return 204" removed.

   The special case in question leads to replies without body in
   configuration like

       location / { error_page 404 /zero; return 404; }
       location /zero { return 204; }

   while replies with empty body are expected per protocol specs.

   Correct one will look like

       if (status == NGX_HTTP_NO_CONTENT) {

           rc = ngx_http_send_header(r);

           if (rc == NGX_ERROR || r->header_only) {
               return rc;
           }

           return ngx_http_send_special(r, NGX_HTTP_LAST);
       }

   though it looks like it's better to drop this special case at all.

*) Clear old Location header (if any) while adding a new one.

   This prevents incorrect behaviour when another redirect is issued within
   error_page 302 handler.
2011-11-01 13:45:33 +00:00
Igor Sysoev
35251a4b01 Merging r4132, r4134, r4143, r4183, r4191, r4199:
Various fixes related to error messages:

*) Removed old warning that suggested to use "server_name_in_redirect off"
   (now the default) in place of no longer supported "server_name *".

*) Fixing directive name in error message if types hash size is not enough.

*) Replaced "can not" with "cannot" and "could not" in a bunch of places.
   Fixed nearby grammar errors.

*) Overhauled error messages.
2011-11-01 13:24:50 +00:00
Igor Sysoev
a910acd37c Merging r4034, r4186, r4187, r4229, r4235, r4237:
SSL related fixes:

*) Better handling of various per-server ssl options with SNI.

   SSL_set_SSL_CTX() doesn't touch values cached within ssl connection
   structure, it only changes certificates (at least as of now, OpenSSL
   1.0.0d and earlier).

   As a result settings like ssl_verify_client, ssl_verify_depth,
   ssl_prefer_server_ciphers are only configurable on per-socket basis while
   with SNI it should be possible to specify them different for two servers
   listening on the same socket.

   Workaround is to explicitly re-apply settings we care about from context
   to ssl connection in servername callback.

   Note that SSL_clear_options() is only available in OpenSSL 0.9.8m+.  I.e.
   with older versions it is not possible to clear ssl_prefer_server_ciphers
   option if it's set in default server for a socket.

*) Disabling SSL compression. This saves about 300K per SSL connection.
   The SSL_OP_NO_COMPRESSION option is available since OpenSSL 1.0.0.

*) Releasing memory of idle SSL connection. This saves about 34K per SSL
   connection. The SSL_MODE_RELEASE_BUFFERS option is available since
   OpenSSL 1.0.0d.

*) Decrease of log level of some SSL handshake errors.

*) Fixed segfault on configuration testing with ssl (ticket #37).

   The following config caused segmentation fault due to conf->file not
   being properly set if "ssl on" was inherited from the http level:

   http {
       ssl on;
       server {
       }
   }

*) Silently ignoring a stale global SSL error left after disabled renegotiation.
2011-11-01 13:00:30 +00:00