xref: /unit/CHANGES (revision 1404:17772ad6d9b9)
1
2Changes with Unit 1.16.0                                         12 Mar 2020
3
4    *) Feature: basic load-balancing support with round-robin.
5
6    *) Feature: a "fallback" option that performs an alternative action if a
7       request can't be served from the "share" directory.
8
9    *) Feature: reduced memory consumption by dumping large request bodies
10       to disk.
11
12    *) Feature: stripping UTF-8 BOM and JavaScript-style comments from
13       uploaded JSON.
14
15    *) Bugfix: negative address matching in router might work improperly in
16       combination with non-negative patterns.
17
18    *) Bugfix: Java Spring applications failed to run; the bug had appeared
19       in 1.10.0.
20
21    *) Bugfix: PHP 7.4 was broken if it was built with thread safety
22       enabled.
23
24    *) Bugfix: compatibility issues with some Python applications.
25
26
27Changes with Unit 1.15.0                                         06 Feb 2020
28
29    *) Change: extensions of dynamically requested PHP scripts were
30       restricted to ".php".
31
32    *) Feature: compatibility with Ruby 2.7.
33
34    *) Bugfix: segmentation fault might have occurred in the router process
35       with multiple application processes under load; the bug had appeared
36       in 1.14.0.
37
38    *) Bugfix: receiving request body over TLS connection might have
39       stalled.
40
41
42Changes with Unit 1.14.0                                         26 Dec 2019
43
44    *) Change: the Go package import name changed to "unit.nginx.org/go".
45
46    *) Change: Go package now links to libunit instead of including library
47       sources.
48
49    *) Feature: ability to change user and group for isolated applications
50       when Unit daemon runs as an unprivileged user.
51
52    *) Feature: request routing by source and destination addresses and
53       ports.
54
55    *) Bugfix: memory bloat on large responses.
56
57
58Changes with Unit 1.13.0                                         14 Nov 2019
59
60    *) Feature: basic support for HTTP reverse proxying.
61
62    *) Feature: compatibility with Python 3.8.
63
64    *) Bugfix: memory leak in Python application processes when the close
65       handler was used.
66
67    *) Bugfix: threads in Python applications might not work correctly.
68
69    *) Bugfix: Ruby on Rails applications might not work on Ruby 2.6.
70
71    *) Bugfix: backtraces for uncaught exceptions in Python 3 might be
72       logged with significant delays.
73
74    *) Bugfix: explicit setting a namespaces isolation option to false might
75       have enabled it.
76
77
78Changes with Unit 1.12.0                                         03 Oct 2019
79
80    *) Feature: compatibility with PHP 7.4.
81
82    *) Bugfix: descriptors leak on process creation; the bug had appeared in
83       1.11.0.
84
85    *) Bugfix: TLS connection might be closed prematurely while sending
86       response.
87
88    *) Bugfix: segmentation fault might have occurred if an irregular file
89       was requested.
90
91
92Changes with Unit 1.11.0                                         19 Sep 2019
93
94    *) Feature: basic support for serving static files.
95
96    *) Feature: isolation of application processes with Linux namespaces.
97
98    *) Feature: built-in WebSocket server implementation for Java Servlet
99       Containers.
100
101    *) Feature: direct addressing of API configuration options containing
102       slashes "/" using URI encoding (%2F).
103
104    *) Bugfix: segmentation fault might have occurred in Go applications
105       under high load.
106
107    *) Bugfix: WebSocket support was broken if Unit was built with some
108       linkers other than GNU ld (e.g. gold or LLD).
109
110
111Changes with Unit 1.10.0                                         22 Aug 2019
112
113    *) Change: matching of cookies in routes made case sensitive.
114
115    *) Change: decreased log level of common errors when clients close
116       connections.
117
118    *) Change: removed the Perl module's "--include=" ./configure option.
119
120    *) Feature: built-in WebSocket server implementation for Node.js module.
121
122    *) Feature: splitting PATH_INFO from request URI in PHP module.
123
124    *) Feature: request routing by scheme (HTTP or HTTPS).
125
126    *) Feature: support for multipart requests body in Java module.
127
128    *) Feature: improved API compatibility with Node.js 11.10 or later.
129
130    *) Bugfix: reconfiguration failed if "listeners" or "applications"
131       objects were missing.
132
133    *) Bugfix: applying a large configuration might have failed.
134
135
136Changes with Unit 1.9.0                                          30 May 2019
137
138    *) Feature: request routing by arguments, headers, and cookies.
139
140    *) Feature: route matching patterns allow a wildcard in the middle.
141
142    *) Feature: POST operation for appending elements to arrays in
143       configuration.
144
145    *) Feature: support for changing credentials using CAP_SETUID and
146       CAP_SETGID capabilities on Linux without running main process as
147       privileged user.
148
149    *) Bugfix: memory leak in the router process might have happened when a
150       client prematurely closed the connection.
151
152    *) Bugfix: applying a large configuration might have failed.
153
154    *) Bugfix: PUT and DELETE operations on array elements in configuration
155       did not work.
156
157    *) Bugfix: request schema in applications did not reflect TLS
158       connections.
159
160    *) Bugfix: restored compatibility with Node.js applications that use
161       ServerResponse._implicitHeader() function; the bug had appeared in
162       1.7.
163
164    *) Bugfix: various compatibility issues with Node.js applications.
165
166
167Changes with Unit 1.8.0                                          01 Mar 2019
168
169    *) Change: now three numbers are always used for versioning: major,
170       minor, and patch versions.
171
172    *) Change: now QUERY_STRING is always defined even if the request does
173       not include the query component.
174
175    *) Feature: basic internal request routing by Host, URI, and method.
176
177    *) Feature: experimental support for Java Servlet Containers.
178
179    *) Bugfix: segmentation fault might have occurred in the router process.
180
181    *) Bugfix: various potential memory leaks.
182
183    *) Bugfix: TLS connections might have stalled.
184
185    *) Bugfix: some Perl applications might have failed to send the response
186       body.
187
188    *) Bugfix: some compilers with specific flags might have produced
189       non-functioning builds; the bug had appeared in 1.5.
190
191    *) Bugfix: Node.js package had wrong version number when installed from
192       sources.
193
194
195Changes with Unit 1.7.1                                          07 Feb 2019
196
197    *) Security: a heap memory buffer overflow might have been caused in the
198       router process by a specially crafted request, potentially resulting
199       in a segmentation fault or other unspecified behavior
200       (CVE-2019-7401).
201
202    *) Bugfix: install of Go module failed without prior building of Unit
203       daemon; the bug had appeared in 1.7.
204
205
206Changes with Unit 1.7                                            20 Dec 2018
207
208    *) Change: now rpath is set in Ruby module only if the library was not
209       found in default search paths; this allows to meet packaging
210       restrictions on some systems.
211
212    *) Bugfix: "disable_functions" and "disable_classes" PHP options set via
213       Control API did not work.
214
215    *) Bugfix: Promises on request data in Node.js were not triggered.
216
217    *) Bugfix: various compatibility issues with Node.js applications.
218
219    *) Bugfix: a segmentation fault occurred in Node.js module if
220       application tried to read request body after request.end() was
221       called.
222
223    *) Bugfix: a segmentation fault occurred in Node.js module if
224       application attempted to send header twice.
225
226    *) Bugfix: names of response header fields in Node.js module were
227       erroneously treated as case-sensitive.
228
229    *) Bugfix: uncatched exceptions in Node.js were not logged.
230
231    *) Bugfix: global install of Node.js module from sources was broken on
232       some systems; the bug had appeared in 1.6.
233
234    *) Bugfix: traceback for exceptions during initialization of Python
235       applications might not be logged.
236
237    *) Bugfix: PHP module build failed if PHP interpreter was built with
238       thread safety enabled.
239
240
241Changes with Unit 1.6                                            15 Nov 2018
242
243    *) Change: "make install" now installs Node.js module as well if it was
244       configured.
245
246    *) Feature: "--local" ./configure option to install Node.js module
247       locally.
248
249    *) Bugfix: Node.js module might have crashed due to broken reference
250       counting.
251
252    *) Bugfix: asynchronous operations in Node.js might not have worked.
253
254    *) Bugfix: various compatibility issues with Node.js applications.
255
256    *) Bugfix: "freed pointer is out of pool" alerts might have appeared in
257       log.
258
259    *) Bugfix: module discovery did not work on 64-bit big-endian systems
260       like IBM/S390x.
261
262
263Changes with Unit 1.5                                            25 Oct 2018
264
265    *) Change: the "type" of application object for Go was changed to
266       "external".
267
268    *) Feature: initial version of Node.js package with basic HTTP
269       request-response support.
270
271    *) Feature: compatibility with LibreSSL.
272
273    *) Feature: --libdir and --incdir ./configure options to install libunit
274       headers and static library.
275
276    *) Bugfix: connection might be closed prematurely while sending
277       response; the bug had appeared in 1.3.
278
279    *) Bugfix: application processes might have stopped handling requests,
280       producing "last message send failed: Resource temporarily
281       unavailable" alerts in log; the bug had appeared in 1.4.
282
283    *) Bugfix: Go applications did not work when Unit was built with musl C
284       library.
285
286
287Changes with Unit 1.4                                            20 Sep 2018
288
289    *) Change: the control API maps the configuration object only at
290       "/config/".
291
292    *) Feature: TLS support for client connections.
293
294    *) Feature: TLS certificates storage control API.
295
296    *) Feature: Unit library (libunit) to streamline language module
297       integration.
298
299    *) Feature: "408 Request Timeout" responses while closing HTTP
300       keep-alive connections.
301
302    *) Feature: improvements in OpenBSD support. Thanks to David Carlier.
303
304    *) Bugfix: a segmentation fault might have occurred after
305       reconfiguration.
306
307    *) Bugfix: building on systems with non-default locale might be broken.
308
309    *) Bugfix: "header_read_timeout" might not work properly.
310
311    *) Bugfix: header fields values with non-ASCII bytes might be handled
312       incorrectly in Python 3 module.
313
314
315Changes with Unit 1.3                                            13 Jul 2018
316
317    *) Change: UTF-8 characters are now allowed in request header field
318       values.
319
320    *) Feature: configuration of the request body size limit.
321
322    *) Feature: configuration of various HTTP connection timeouts.
323
324    *) Feature: Ruby module now automatically uses Bundler where possible.
325
326    *) Feature: http.Flusher interface in Go module.
327
328    *) Bugfix: various issues in HTTP connection errors handling.
329
330    *) Bugfix: requests with body data might be handled incorrectly in PHP
331       module.
332
333    *) Bugfix: individual PHP configuration options specified via control
334       API were reset to previous values after the first request in
335       application process.
336
337
338Changes with Unit 1.2                                            07 Jun 2018
339
340    *) Feature: configuration of environment variables for application
341       processes.
342
343    *) Feature: customization of php.ini path.
344
345    *) Feature: setting of individual PHP configuration options.
346
347    *) Feature: configuration of execution arguments for Go applications.
348
349    *) Bugfix: keep-alive connections might hang after reconfiguration.
350
351
352Changes with Unit 1.1                                            26 Apr 2018
353
354    *) Bugfix: Python applications that use the write() callable did not
355       work.
356
357    *) Bugfix: virtual environments created with Python 3.3 or above might
358       not have worked.
359
360    *) Bugfix: the request.Read() function in Go applications did not
361       produce EOF when the whole body was read.
362
363    *) Bugfix: a segmentation fault might have occurred while access log
364       reopening.
365
366    *) Bugfix: in parsing of IPv6 control socket addresses.
367
368    *) Bugfix: loading of application modules was broken on OpenBSD.
369
370    *) Bugfix: a segmentation fault might have occurred when there were two
371       modules with the same type and version; the bug had appeared in 1.0.
372
373    *) Bugfix: alerts "freed pointer points to non-freeble page" might have
374       appeared in log on 32-bit platforms.
375
376
377Changes with Unit 1.0                                            12 Apr 2018
378
379    *) Change: configuration object moved into "/config/" path.
380
381    *) Feature: basic access logging.
382
383    *) Bugfix: 503 error occurred if Go application did not write response
384       header or body.
385
386    *) Bugfix: Ruby applications that use encoding conversions might not
387       have worked.
388
389    *) Bugfix: various stability issues.
390
391
392Changes with Unit 0.7                                            22 Mar 2018
393
394    *) Feature: Ruby application module.
395
396    *) Bugfix: in discovering modules.
397
398    *) Bugfix: various race conditions on reconfiguration and during
399       shutting down.
400
401    *) Bugfix: tabs and trailing spaces were not allowed in header fields
402       values.
403
404    *) Bugfix: a segmentation fault occurred in Python module if
405       start_response() was called outside of WSGI callable.
406
407    *) Bugfix: a segmentation fault might have occurred in PHP module if
408       there was an error while initialization.
409
410
411Changes with Unit 0.6                                            09 Feb 2018
412
413    *) Bugfix: the main process died when the "type" application option
414       contained version; the bug had appeared in 0.5.
415
416
417Changes with Unit 0.5                                            08 Feb 2018
418
419    *) Change: the "workers" application option was removed, the "processes"
420       application option should be used instead.
421
422    *) Feature: the "processes" application option with prefork and dynamic
423       process management support.
424
425    *) Feature: Perl application module.
426
427    *) Bugfix: in reading client request body; the bug had appeared in 0.3.
428
429    *) Bugfix: some Python applications might not have worked due to missing
430       "wsgi.errors" environ variable.
431
432    *) Bugfix: HTTP chunked responses might be encoded incorrectly on 32-bit
433       platforms.
434
435    *) Bugfix: infinite looping in HTTP parser.
436
437    *) Bugfix: segmentation fault in router.
438
439
440Changes with Unit 0.4                                            15 Jan 2018
441
442    *) Feature: compatibility with DragonFly BSD.
443
444    *) Feature: "configure php --lib-static" option.
445
446    *) Bugfix: HTTP request body was not passed to application; the bug had
447       appeared in 0.3.
448
449    *) Bugfix: HTTP large header buffers allocation and deallocation fixed;
450       the bug had appeared in 0.3.
451
452    *) Bugfix: some PHP applications might not have worked with relative
453       "root" path.
454
455
456Changes with Unit 0.3                                            28 Dec 2017
457
458    *) Change: the Go package name changed to "nginx/unit".
459
460    *) Change: in the "limits.timeout" application option: application start
461       time and time in queue now are not accounted.
462
463    *) Feature: the "limits.requests" application option.
464
465    *) Feature: application request processing latency optimization.
466
467    *) Feature: HTTP keep-alive connections support.
468
469    *) Feature: the "home" Python virtual environment configuration option.
470
471    *) Feature: Python atexit hook support.
472
473    *) Feature: various Go package improvements.
474
475    *) Bugfix: various crashes fixed.
476
477
478Changes with Unit 0.2                                            19 Oct 2017
479
480    *) Feature: configuration persistence.
481
482    *) Feature: improved handling of configuration errors.
483
484    *) Feature: application "timeout" property.
485
486    *) Bugfix: POST request for PHP were handled incorrectly.
487
488    *) Bugfix: the router exited abnormally if all listeners had been
489       deleted.
490
491    *) Bugfix: the router crashed under load.
492
493    *) Bugfix: memory leak in the router.
494
495
496Changes with Unit 0.1                                            06 Sep 2017
497
498    *) First public release.
499
500