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