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