xref: /unit/CHANGES (revision 2007:cbda5bd95b2f)
1
2Changes with Unit 1.26.0                                         18 Nov 2021
3
4    *) Change: the "share" option now specifies the entire path to the files
5       it serves, rather than a document root directory to be prepended to
6       the request URI.
7
8    *) Feature: automatic adjustment of existing configurations to the new
9       "share" behavior when updating from previous versions.
10
11    *) Feature: variables support in the "share" option.
12
13    *) Feature: multiple paths in the "share" option.
14
15    *) Feature: variables support in the "chroot" option.
16
17    *) Feature: PHP opcache is shared between application processes.
18
19    *) Feature: request routing by the query string.
20
21    *) Bugfix: the router and app processes could crash when the requests
22       limit was reached by asynchronous or multithreaded apps.
23
24    *) Bugfix: established WebSocket connections could stop reading frames
25       from the client after the corresponding listener had been
26       reconfigured.
27
28    *) Bugfix: fixed building with glibc 2.34, notably Fedora 35.
29
30
31Changes with Unit 1.25.0                                         19 Aug 2021
32
33    *) Feature: client IP address replacement from a specified HTTP header
34       field.
35
36    *) Feature: TLS sessions cache.
37
38    *) Feature: TLS session tickets.
39
40    *) Feature: application restart control.
41
42    *) Feature: process and thread lifecycle hooks in Ruby.
43
44    *) Bugfix: the router process could crash on TLS connection open when
45       multiple listeners with TLS certificates were configured; the bug had
46       appeared in 1.23.0.
47
48    *) Bugfix: TLS connections were rejected for configurations with
49       multiple certificate bundles in a listener if the client did not use
50       SNI.
51
52    *) Bugfix: the router process could crash with frequent multithreaded
53       application reconfiguration.
54
55    *) Bugfix: compatibility issues with some Python ASGI apps, notably
56       based on the Starlette framework.
57
58    *) Bugfix: a descriptor and memory leak occurred in the router process
59       when an app process stopped or crashed.
60
61    *) Bugfix: the controller or router process could crash if the
62       configuration contained a full-form IPv6 in a listener address.
63
64    *) Bugfix: the router process crashed when a request was passed to an
65       empty "routes" or "upstreams" using a variable "pass" option.
66
67    *) Bugfix: the router process crashed while matching a request to an
68       empty array of source or destination address patterns.
69
70
71Changes with Unit 1.24.0                                         27 May 2021
72
73    *) Change: PHP added to the default MIME type list.
74
75    *) Feature: arbitrary configuration of TLS connections via OpenSSL
76       commands.
77
78    *) Feature: the ability to limit static file serving by MIME types.
79
80    *) Feature: support for chrooting, rejecting symlinks, and rejecting
81       mount point traversal on a per-request basis when serving static
82       files.
83
84    *) Feature: a loader for automatically overriding the "http" and
85       "websocket" modules in Node.js.
86
87    *) Feature: multiple "targets" in Python applications.
88
89    *) Feature: compatibility with Ruby 3.0.
90
91    *) Bugfix: the router process could crash while closing a TLS
92       connection.
93
94    *) Bugfix: a segmentation fault might have occurred in the PHP module if
95       fastcgi_finish_request() was used with the "auto_globals_jit" option
96       enabled.
97
98
99Changes with Unit 1.23.0                                         25 Mar 2021
100
101    *) Feature: support for multiple certificate bundles on a listener via
102       the Server Name Indication (SNI) TLS extension.
103
104    *) Feature: "--mandir" ./configure option to specify the directory for
105       man page installation.
106
107    *) Bugfix: the router process could crash on premature TLS connection
108       close; the bug had appeared in 1.17.0.
109
110    *) Bugfix: a connection leak occurred on premature TLS connection close;
111       the bug had appeared in 1.6.
112
113    *) Bugfix: a descriptor and memory leak occurred in the router process
114       when processing small WebSocket frames from a client; the bug had
115       appeared in 1.19.0.
116
117    *) Bugfix: a descriptor leak occurred in the router process when
118       removing or reconfiguring an application; the bug had appeared in
119       1.19.0.
120
121    *) Bugfix: persistent storage of certificates might've not worked with
122       some filesystems in Linux, and all uploaded certificate bundles were
123       forgotten after restart.
124
125    *) Bugfix: the controller process could crash while requesting
126       information about a certificate with a non-DNS SAN entry.
127
128    *) Bugfix: the controller process could crash on manipulations with a
129       certificate containing a SAN and no standard name attributes in
130       subject or issuer.
131
132    *) Bugfix: the Ruby module didn't respect the user locale for defaults
133       in the Encoding class.
134
135    *) Bugfix: the PHP 5 module failed to build with thread safety enabled;
136       the bug had appeared in 1.22.0.
137
138
139Changes with Unit 1.22.0                                         04 Feb 2021
140
141    *) Feature: the ServerRequest and ServerResponse objects of Node.js
142       module are now compliant with Stream API.
143
144    *) Feature: support for specifying multiple directories in the "path"
145       option of Python apps.
146
147    *) Bugfix: a memory leak occurred in the router process when serving
148       files larger than 128K; the bug had appeared in 1.13.0.
149
150    *) Bugfix: apps could stop processing new requests under high load; the
151       bug had appeared in 1.19.0.
152
153    *) Bugfix: app processes could terminate unexpectedly under high load;
154       the bug had appeared in 1.19.0.
155
156    *) Bugfix: invalid HTTP responses were generated for some unusual status
157       codes.
158
159    *) Bugfix: the PHP_AUTH_USER, PHP_AUTH_PW, and PHP_AUTH_DIGEST server
160       variables were missing in the PHP module.
161
162    *) Bugfix: the router process could crash with multithreaded apps under
163       high load.
164
165    *) Bugfix: Ruby apps with multithreading configured could crash on start
166       under load.
167
168    *) Bugfix: mount points weren't unmounted when the "mount" namespace
169       isolation was used; the bug had appeared in 1.21.0.
170
171    *) Bugfix: the router process could crash while removing or
172       reconfiguring an app that used WebSocket.
173
174    *) Bugfix: a memory leak occurring in the router process when removing
175       or reconfiguring an application; the bug had appeared in 1.19.0.
176
177
178Changes with Unit 1.21.0                                         19 Nov 2020
179
180    *) Change: procfs is mounted by default for all languages when "rootfs"
181       isolation is used.
182
183    *) Change: any characters valid according to RFC 7230 are now allowed in
184       HTTP header field names.
185
186    *) Change: HTTP header fields with underscores ("_") are now discarded
187       from requests by default.
188
189    *) Feature: optional multithreaded request processing for Java, Python,
190       Perl, and Ruby apps.
191
192    *) Feature: regular expressions in route matching patterns.
193
194    *) Feature: compatibility with Python 3.9.
195
196    *) Feature: the Python module now supports ASGI 2.0 legacy applications.
197
198    *) Feature: the "protocol" option in Python applications aids choice
199       between ASGI and WSGI.
200
201    *) Feature: the fastcgi_finish_request() PHP function that finalizes
202       request processing and continues code execution without holding onto
203       the client connection.
204
205    *) Feature: the "discard_unsafe_fields" HTTP option that enables
206       discarding request header fields with irregular (but still valid)
207       characters in the field name.
208
209    *) Feature: the "procfs" and "tmpfs" automount isolation options to
210       disable automatic mounting of eponymous filesystems.
211
212    *) Bugfix: the router process could crash when running Go applications
213       under high load; the bug had appeared in 1.19.0.
214
215    *) Bugfix: some language dependencies could remain mounted after using
216       "rootfs" isolation.
217
218    *) Bugfix: various compatibility issues in Java applications.
219
220    *) Bugfix: the Java module built with the musl C library couldn't run
221       applications that use "rootfs" isolation.
222
223
224Changes with Unit 1.20.0                                         08 Oct 2020
225
226    *) Change: the PHP module is now initialized before chrooting; this
227       enables loading all extensions from the host system.
228
229    *) Change: AVIF and APNG image formats added to the default MIME type
230       list.
231
232    *) Change: functional tests migrated to the pytest framework.
233
234    *) Feature: the Python module now fully supports applications that use
235       the ASGI 3.0 server interface.
236
237    *) Feature: the Python module now has a built-in WebSocket server
238       implementation for applications, compatible with the HTTP & WebSocket
239       ASGI Message Format 2.1 specification.
240
241    *) Feature: automatic mounting of an isolated "/tmp" file system into
242       chrooted application environments.
243
244    *) Feature: the $host variable contains a normalized "Host" request
245       value.
246
247    *) Feature: the "callable" option sets Python application callable
248       names.
249
250    *) Feature: compatibility with PHP 8 RC 1. Thanks to Remi Collet.
251
252    *) Feature: the "automount" option in the "isolation" object allows to
253       turn off the automatic mounting of language module dependencies.
254
255    *) Bugfix: "pass"-ing requests to upstreams from a route was broken; the
256       bug had appeared in 1.19.0. Thanks to 洪志道 (Hong Zhi Dao) for
257       discovering and fixing it.
258
259    *) Bugfix: the router process could crash during reconfiguration.
260
261    *) Bugfix: a memory leak occurring in the router process; the bug had
262       appeared in 1.18.0.
263
264    *) Bugfix: the "!" (non-empty) pattern was matched incorrectly; the bug
265       had appeared in 1.19.0.
266
267    *) Bugfix: fixed building on platforms without sendfile() support,
268       notably NetBSD; the bug had appeared in 1.16.0.
269
270
271Changes with Unit 1.19.0                                         13 Aug 2020
272
273    *) Feature: reworked IPC between the router process and the applications
274       to lower latencies, increase performance, and improve scalability.
275
276    *) Feature: support for an arbitrary number of wildcards in route
277       matching patterns.
278
279    *) Feature: chunked transfer encoding in proxy responses.
280
281    *) Feature: basic variables support in the "pass" option.
282
283    *) Feature: compatibility with PHP 8 Beta 1. Thanks to Remi Collet.
284
285    *) Bugfix: the router process could crash while passing requests to an
286       application under high load.
287
288    *) Bugfix: a number of language modules failed to build on some systems;
289       the bug had appeared in 1.18.0.
290
291    *) Bugfix: time in error log messages from PHP applications could lag.
292
293    *) Bugfix: reconfiguration requests could hang if an application had
294       failed to start; the bug had appeared in 1.18.0.
295
296    *) Bugfix: memory leak during reconfiguration.
297
298    *) Bugfix: the daemon didn't start without language modules; the bug had
299       appeared in 1.18.0.
300
301    *) Bugfix: the router process could crash at exit.
302
303    *) Bugfix: Node.js applications could crash at exit.
304
305    *) Bugfix: the Ruby module could be linked against a wrong library
306       version.
307
308
309Changes with Unit 1.18.0                                         28 May 2020
310
311    *) Feature: the "rootfs" isolation option for changing root filesystem
312       for an application.
313
314    *) Feature: multiple "targets" in PHP applications.
315
316    *) Feature: support for percent-encoding in the "uri" and "arguments"
317       matching options and in the "pass" option.
318
319
320Changes with Unit 1.17.0                                         16 Apr 2020
321
322    *) Feature: a "return" action with optional "location" for immediate
323       responses and external redirection.
324
325    *) Feature: fractional weights support for upstream servers.
326
327    *) Bugfix: accidental 502 "Bad Gateway" errors might have occurred in
328       applications under high load.
329
330    *) Bugfix: memory leak in the router; the bug had appeared in 1.13.0.
331
332    *) Bugfix: segmentation fault might have occurred in the router process
333       when reaching open connections limit.
334
335    *) Bugfix: "close() failed (9: Bad file descriptor)" alerts might have
336       appeared in the log while processing large request bodies; the bug
337       had appeared in 1.16.0.
338
339    *) Bugfix: existing application processes didn't reopen the log file.
340
341    *) Bugfix: incompatibility with some Node.js applications.
342
343    *) Bugfix: broken build on DragonFly BSD; the bug had appeared in
344       1.16.0.
345
346
347Changes with Unit 1.16.0                                         12 Mar 2020
348
349    *) Feature: basic load-balancing support with round-robin.
350
351    *) Feature: a "fallback" option that performs an alternative action if a
352       request can't be served from the "share" directory.
353
354    *) Feature: reduced memory consumption by dumping large request bodies
355       to disk.
356
357    *) Feature: stripping UTF-8 BOM and JavaScript-style comments from
358       uploaded JSON.
359
360    *) Bugfix: negative address matching in router might work improperly in
361       combination with non-negative patterns.
362
363    *) Bugfix: Java Spring applications failed to run; the bug had appeared
364       in 1.10.0.
365
366    *) Bugfix: PHP 7.4 was broken if it was built with thread safety
367       enabled.
368
369    *) Bugfix: compatibility issues with some Python applications.
370
371
372Changes with Unit 1.15.0                                         06 Feb 2020
373
374    *) Change: extensions of dynamically requested PHP scripts were
375       restricted to ".php".
376
377    *) Feature: compatibility with Ruby 2.7.
378
379    *) Bugfix: segmentation fault might have occurred in the router process
380       with multiple application processes under load; the bug had appeared
381       in 1.14.0.
382
383    *) Bugfix: receiving request body over TLS connection might have
384       stalled.
385
386
387Changes with Unit 1.14.0                                         26 Dec 2019
388
389    *) Change: the Go package import name changed to "unit.nginx.org/go".
390
391    *) Change: Go package now links to libunit instead of including library
392       sources.
393
394    *) Feature: ability to change user and group for isolated applications
395       when Unit daemon runs as an unprivileged user.
396
397    *) Feature: request routing by source and destination addresses and
398       ports.
399
400    *) Bugfix: memory bloat on large responses.
401
402
403Changes with Unit 1.13.0                                         14 Nov 2019
404
405    *) Feature: basic support for HTTP reverse proxying.
406
407    *) Feature: compatibility with Python 3.8.
408
409    *) Bugfix: memory leak in Python application processes when the close
410       handler was used.
411
412    *) Bugfix: threads in Python applications might not work correctly.
413
414    *) Bugfix: Ruby on Rails applications might not work on Ruby 2.6.
415
416    *) Bugfix: backtraces for uncaught exceptions in Python 3 might be
417       logged with significant delays.
418
419    *) Bugfix: explicit setting a namespaces isolation option to false might
420       have enabled it.
421
422
423Changes with Unit 1.12.0                                         03 Oct 2019
424
425    *) Feature: compatibility with PHP 7.4.
426
427    *) Bugfix: descriptors leak on process creation; the bug had appeared in
428       1.11.0.
429
430    *) Bugfix: TLS connection might be closed prematurely while sending
431       response.
432
433    *) Bugfix: segmentation fault might have occurred if an irregular file
434       was requested.
435
436
437Changes with Unit 1.11.0                                         19 Sep 2019
438
439    *) Feature: basic support for serving static files.
440
441    *) Feature: isolation of application processes with Linux namespaces.
442
443    *) Feature: built-in WebSocket server implementation for Java Servlet
444       Containers.
445
446    *) Feature: direct addressing of API configuration options containing
447       slashes "/" using URI encoding (%2F).
448
449    *) Bugfix: segmentation fault might have occurred in Go applications
450       under high load.
451
452    *) Bugfix: WebSocket support was broken if Unit was built with some
453       linkers other than GNU ld (e.g. gold or LLD).
454
455
456Changes with Unit 1.10.0                                         22 Aug 2019
457
458    *) Change: matching of cookies in routes made case sensitive.
459
460    *) Change: decreased log level of common errors when clients close
461       connections.
462
463    *) Change: removed the Perl module's "--include=" ./configure option.
464
465    *) Feature: built-in WebSocket server implementation for Node.js module.
466
467    *) Feature: splitting PATH_INFO from request URI in PHP module.
468
469    *) Feature: request routing by scheme (HTTP or HTTPS).
470
471    *) Feature: support for multipart requests body in Java module.
472
473    *) Feature: improved API compatibility with Node.js 11.10 or later.
474
475    *) Bugfix: reconfiguration failed if "listeners" or "applications"
476       objects were missing.
477
478    *) Bugfix: applying a large configuration might have failed.
479
480
481Changes with Unit 1.9.0                                          30 May 2019
482
483    *) Feature: request routing by arguments, headers, and cookies.
484
485    *) Feature: route matching patterns allow a wildcard in the middle.
486
487    *) Feature: POST operation for appending elements to arrays in
488       configuration.
489
490    *) Feature: support for changing credentials using CAP_SETUID and
491       CAP_SETGID capabilities on Linux without running main process as
492       privileged user.
493
494    *) Bugfix: memory leak in the router process might have happened when a
495       client prematurely closed the connection.
496
497    *) Bugfix: applying a large configuration might have failed.
498
499    *) Bugfix: PUT and DELETE operations on array elements in configuration
500       did not work.
501
502    *) Bugfix: request schema in applications did not reflect TLS
503       connections.
504
505    *) Bugfix: restored compatibility with Node.js applications that use
506       ServerResponse._implicitHeader() function; the bug had appeared in
507       1.7.
508
509    *) Bugfix: various compatibility issues with Node.js applications.
510
511
512Changes with Unit 1.8.0                                          01 Mar 2019
513
514    *) Change: now three numbers are always used for versioning: major,
515       minor, and patch versions.
516
517    *) Change: now QUERY_STRING is always defined even if the request does
518       not include the query component.
519
520    *) Feature: basic internal request routing by Host, URI, and method.
521
522    *) Feature: experimental support for Java Servlet Containers.
523
524    *) Bugfix: segmentation fault might have occurred in the router process.
525
526    *) Bugfix: various potential memory leaks.
527
528    *) Bugfix: TLS connections might have stalled.
529
530    *) Bugfix: some Perl applications might have failed to send the response
531       body.
532
533    *) Bugfix: some compilers with specific flags might have produced
534       non-functioning builds; the bug had appeared in 1.5.
535
536    *) Bugfix: Node.js package had wrong version number when installed from
537       sources.
538
539
540Changes with Unit 1.7.1                                          07 Feb 2019
541
542    *) Security: a heap memory buffer overflow might have been caused in the
543       router process by a specially crafted request, potentially resulting
544       in a segmentation fault or other unspecified behavior
545       (CVE-2019-7401).
546
547    *) Bugfix: install of Go module failed without prior building of Unit
548       daemon; the bug had appeared in 1.7.
549
550
551Changes with Unit 1.7                                            20 Dec 2018
552
553    *) Change: now rpath is set in Ruby module only if the library was not
554       found in default search paths; this allows to meet packaging
555       restrictions on some systems.
556
557    *) Bugfix: "disable_functions" and "disable_classes" PHP options set via
558       Control API did not work.
559
560    *) Bugfix: Promises on request data in Node.js were not triggered.
561
562    *) Bugfix: various compatibility issues with Node.js applications.
563
564    *) Bugfix: a segmentation fault occurred in Node.js module if
565       application tried to read request body after request.end() was
566       called.
567
568    *) Bugfix: a segmentation fault occurred in Node.js module if
569       application attempted to send header twice.
570
571    *) Bugfix: names of response header fields in Node.js module were
572       erroneously treated as case-sensitive.
573
574    *) Bugfix: uncatched exceptions in Node.js were not logged.
575
576    *) Bugfix: global install of Node.js module from sources was broken on
577       some systems; the bug had appeared in 1.6.
578
579    *) Bugfix: traceback for exceptions during initialization of Python
580       applications might not be logged.
581
582    *) Bugfix: PHP module build failed if PHP interpreter was built with
583       thread safety enabled.
584
585
586Changes with Unit 1.6                                            15 Nov 2018
587
588    *) Change: "make install" now installs Node.js module as well if it was
589       configured.
590
591    *) Feature: "--local" ./configure option to install Node.js module
592       locally.
593
594    *) Bugfix: Node.js module might have crashed due to broken reference
595       counting.
596
597    *) Bugfix: asynchronous operations in Node.js might not have worked.
598
599    *) Bugfix: various compatibility issues with Node.js applications.
600
601    *) Bugfix: "freed pointer is out of pool" alerts might have appeared in
602       log.
603
604    *) Bugfix: module discovery did not work on 64-bit big-endian systems
605       like IBM/S390x.
606
607
608Changes with Unit 1.5                                            25 Oct 2018
609
610    *) Change: the "type" of application object for Go was changed to
611       "external".
612
613    *) Feature: initial version of Node.js package with basic HTTP
614       request-response support.
615
616    *) Feature: compatibility with LibreSSL.
617
618    *) Feature: --libdir and --incdir ./configure options to install libunit
619       headers and static library.
620
621    *) Bugfix: connection might be closed prematurely while sending
622       response; the bug had appeared in 1.3.
623
624    *) Bugfix: application processes might have stopped handling requests,
625       producing "last message send failed: Resource temporarily
626       unavailable" alerts in log; the bug had appeared in 1.4.
627
628    *) Bugfix: Go applications did not work when Unit was built with musl C
629       library.
630
631
632Changes with Unit 1.4                                            20 Sep 2018
633
634    *) Change: the control API maps the configuration object only at
635       "/config/".
636
637    *) Feature: TLS support for client connections.
638
639    *) Feature: TLS certificates storage control API.
640
641    *) Feature: Unit library (libunit) to streamline language module
642       integration.
643
644    *) Feature: "408 Request Timeout" responses while closing HTTP
645       keep-alive connections.
646
647    *) Feature: improvements in OpenBSD support. Thanks to David Carlier.
648
649    *) Bugfix: a segmentation fault might have occurred after
650       reconfiguration.
651
652    *) Bugfix: building on systems with non-default locale might be broken.
653
654    *) Bugfix: "header_read_timeout" might not work properly.
655
656    *) Bugfix: header fields values with non-ASCII bytes might be handled
657       incorrectly in Python 3 module.
658
659
660Changes with Unit 1.3                                            13 Jul 2018
661
662    *) Change: UTF-8 characters are now allowed in request header field
663       values.
664
665    *) Feature: configuration of the request body size limit.
666
667    *) Feature: configuration of various HTTP connection timeouts.
668
669    *) Feature: Ruby module now automatically uses Bundler where possible.
670
671    *) Feature: http.Flusher interface in Go module.
672
673    *) Bugfix: various issues in HTTP connection errors handling.
674
675    *) Bugfix: requests with body data might be handled incorrectly in PHP
676       module.
677
678    *) Bugfix: individual PHP configuration options specified via control
679       API were reset to previous values after the first request in
680       application process.
681
682
683Changes with Unit 1.2                                            07 Jun 2018
684
685    *) Feature: configuration of environment variables for application
686       processes.
687
688    *) Feature: customization of php.ini path.
689
690    *) Feature: setting of individual PHP configuration options.
691
692    *) Feature: configuration of execution arguments for Go applications.
693
694    *) Bugfix: keep-alive connections might hang after reconfiguration.
695
696
697Changes with Unit 1.1                                            26 Apr 2018
698
699    *) Bugfix: Python applications that use the write() callable did not
700       work.
701
702    *) Bugfix: virtual environments created with Python 3.3 or above might
703       not have worked.
704
705    *) Bugfix: the request.Read() function in Go applications did not
706       produce EOF when the whole body was read.
707
708    *) Bugfix: a segmentation fault might have occurred while access log
709       reopening.
710
711    *) Bugfix: in parsing of IPv6 control socket addresses.
712
713    *) Bugfix: loading of application modules was broken on OpenBSD.
714
715    *) Bugfix: a segmentation fault might have occurred when there were two
716       modules with the same type and version; the bug had appeared in 1.0.
717
718    *) Bugfix: alerts "freed pointer points to non-freeble page" might have
719       appeared in log on 32-bit platforms.
720
721
722Changes with Unit 1.0                                            12 Apr 2018
723
724    *) Change: configuration object moved into "/config/" path.
725
726    *) Feature: basic access logging.
727
728    *) Bugfix: 503 error occurred if Go application did not write response
729       header or body.
730
731    *) Bugfix: Ruby applications that use encoding conversions might not
732       have worked.
733
734    *) Bugfix: various stability issues.
735
736
737Changes with Unit 0.7                                            22 Mar 2018
738
739    *) Feature: Ruby application module.
740
741    *) Bugfix: in discovering modules.
742
743    *) Bugfix: various race conditions on reconfiguration and during
744       shutting down.
745
746    *) Bugfix: tabs and trailing spaces were not allowed in header fields
747       values.
748
749    *) Bugfix: a segmentation fault occurred in Python module if
750       start_response() was called outside of WSGI callable.
751
752    *) Bugfix: a segmentation fault might have occurred in PHP module if
753       there was an error while initialization.
754
755
756Changes with Unit 0.6                                            09 Feb 2018
757
758    *) Bugfix: the main process died when the "type" application option
759       contained version; the bug had appeared in 0.5.
760
761
762Changes with Unit 0.5                                            08 Feb 2018
763
764    *) Change: the "workers" application option was removed, the "processes"
765       application option should be used instead.
766
767    *) Feature: the "processes" application option with prefork and dynamic
768       process management support.
769
770    *) Feature: Perl application module.
771
772    *) Bugfix: in reading client request body; the bug had appeared in 0.3.
773
774    *) Bugfix: some Python applications might not have worked due to missing
775       "wsgi.errors" environ variable.
776
777    *) Bugfix: HTTP chunked responses might be encoded incorrectly on 32-bit
778       platforms.
779
780    *) Bugfix: infinite looping in HTTP parser.
781
782    *) Bugfix: segmentation fault in router.
783
784
785Changes with Unit 0.4                                            15 Jan 2018
786
787    *) Feature: compatibility with DragonFly BSD.
788
789    *) Feature: "configure php --lib-static" option.
790
791    *) Bugfix: HTTP request body was not passed to application; the bug had
792       appeared in 0.3.
793
794    *) Bugfix: HTTP large header buffers allocation and deallocation fixed;
795       the bug had appeared in 0.3.
796
797    *) Bugfix: some PHP applications might not have worked with relative
798       "root" path.
799
800
801Changes with Unit 0.3                                            28 Dec 2017
802
803    *) Change: the Go package name changed to "nginx/unit".
804
805    *) Change: in the "limits.timeout" application option: application start
806       time and time in queue now are not accounted.
807
808    *) Feature: the "limits.requests" application option.
809
810    *) Feature: application request processing latency optimization.
811
812    *) Feature: HTTP keep-alive connections support.
813
814    *) Feature: the "home" Python virtual environment configuration option.
815
816    *) Feature: Python atexit hook support.
817
818    *) Feature: various Go package improvements.
819
820    *) Bugfix: various crashes fixed.
821
822
823Changes with Unit 0.2                                            19 Oct 2017
824
825    *) Feature: configuration persistence.
826
827    *) Feature: improved handling of configuration errors.
828
829    *) Feature: application "timeout" property.
830
831    *) Bugfix: POST request for PHP were handled incorrectly.
832
833    *) Bugfix: the router exited abnormally if all listeners had been
834       deleted.
835
836    *) Bugfix: the router crashed under load.
837
838    *) Bugfix: memory leak in the router.
839
840
841Changes with Unit 0.1                                            06 Sep 2017
842
843    *) First public release.
844
845