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