98e40f58ec
What's new in 2.4 compared to 2.3 ? Lots of cool stuff! The work was spread on several fronts: - performance and latency: a lot of work was done on locking reduction, bringing 2.4 a much lower latency than 2.3 had, and a higher scalability. 2.4 is NUMA-aware on Linux and will avoid binding to cross-socket cores by default. Idle server-side connections are now reusable even when SNI, proxy protocol or transparent proxy are used, saving costly round trips. Lua now supports lock-free multi-threading. Idle frontend connections will now be closed as soon as possible during reloads. - reliability: "strict-limits" is on by default, experimental features are protected against accidental use from a copy-paste, a diagnostic mode was added to report suspicious or uncommon constructs that could be mistakes, new live debugging tools were added for better in-field debugging. Backend idle connections will be closed before quitting so that they don't consume source ports in TIME_WAIT. - management and integration: maps and ACLs now support atomic updates, server-side SSL certificates can also be updated without reloading, servers can be added/removed without reloading (still experimental), more server settings can be edited at run time, global variables can be listed/edited at run time, "defaults" section can now be named, reused an inherited, line numbers and file names can be included in any command, file paths can now be relative to the config file, some new ".if/.elif/.else/.endif" config directives permit a smoother transition between versions using a same config file (particularly useful for automated rollbacks), - interoperability / protocol support: WebSocket over HTTP/2 (RFC8441) is now supported on both sides, regardless of the version on the other side. The cache now supports the "Vary" header with a few commonly used headers, including "Accept-encoding" which gets normalized for optimal cache hit ratio. The Prometheus exporter got a significant liftup, requires less tricks on the Prometheus side, and supports listing only certain metrics for faster retrieval. Optional native support for Opentracing was also integrated (via USE_OT=1). The DNS resolvers now support talking to servers over TCP. Basic support for extracting information from MQTT and FIX protocol was added. Timeouts can now be adjusted on the fly and per-request in order to adapt to particuarly slow servers or special protocols. - user-friendliness: TCP loggers now do not require a ring section declaration anymore, it's transparently done now. Header deletion using a pattern matching on the name is now supported instead of having to list many names. Checking for real server-side errors got easier than before with http_fail_cnt/http_fail_rate. The config parser and CLI will now provide suggestions when some keywords are misspelled. The CLI's help output can now be filtered to subsets of commands and will be sorted for easier finding. - processing: the new "wait-for-body" HTTP action allows to wait for a request or response body up to a certain size or delay. This is convenient to detect POST contents or to detect error patterns or information leaks in responses. TCP frontends can now be manually upgraded to HTTP, allowing HTTP rules to be used in a frontend in a tcp->http scenario. JSON parameters can be decoded to extract some fields values. A URL encoder is now available to pass some fields in a way that is suitable for query string parameters. Base64 variants are now supported (such as the URL-compatible one used by JWT). - for distros: building optional addons will be easier thanks to the removal of the contrib/ directory and the cleaner integration with the regular build process and include files. Libslz was included by default, simplifying the packaging work. A few example configs were added into examples/ to serve as starters for users. A CPU entry was added to produce executables that works well both on old and new ARMv8 CPUs. - observability: more stats were added (SSL, H2). "show info" can now emit floating point values for rates and uptimes if requested. |
||
---|---|---|
.. | ||
files | ||
patches | ||
DESCR | ||
distinfo | ||
Makefile | ||
options.mk | ||
PLIST |