Angie and Angie PRO updated to version 1.12.0#
Angie and Angie PRO 1.12.0 have been released — a large feature update. Open-source Angie gains response-time load balancing, sticky "learn" mode and server draining (ported from Angie PRO), a stream Metrics module, a DNS-over-HTTPS server, a certificates API, expanded ACME, and error-log filtering and JSON output; the release is based on the latest nginx with CONNECT tunneling.
Angie and its commercial version, Angie PRO — 1.12.0 — are now available, with a large set of new capabilities in each edition. If the 1.11.0 release felt major, this one goes even further: the list of changes in each edition surpassed 30 items.
Six Angie PRO features are now available in the open-source edition:
Load balancing by the average response time, using the
least_timedirective for proxiedhttpandstreamservers: forhttpit accounts for the time to receive the header or the full response, and forstreamthe time to establish the connection and receive bytes. The smoothing factor is configurable via theresponse_time_factordirective.The
learnmode of thestickydirective — binding clients to servers by dynamically generated keys. Sessions are kept in shared memory, and how they are created and looked up is flexibly configured through variables, for example by a cookie from the proxied server's response.The
drainmode — graceful removal of a server from rotation: new requests are no longer sent to it while already-bound clients are served to completion, and the server moves into a newdrainingstate. Zero-downtime deployment as it should be.Average response time in the statistics API: the
/status/http/upstreams/and/status/stream/upstreams/sections now report several metrics per server — forhttpthe time to receive the header and the full response, and forstreamthe time to establish the connection and to receive the first and last byte. The smoothing factor is set viaresponse_time_factor, with Prometheus support.
Among the other new features in both editions:
A built-in DNS-over-HTTPS server: the new DoH module (RFC 8484) accepts DNS queries over HTTP/HTTPS and proxies them to DNS servers over UDP or TCP. Standing up your own DoH server takes just a few lines of configuration.
Expanded ACME: certificates for IP addresses (via Let's Encrypt, with profile support), External Account Binding (EAB) for commercial certificate authorities (DigiCert, SSL.com, and others) through HMAC authentication, improved compatibility with SSL.com and similar servers, and the
acme_dns_ttldirective for providers that filter DNS responses with a low TTL.Zero-configuration DNS: the resolver configuration is now enabled by default — Angie reads
/etc/resolv.confitself and watches it for changes, so DNS server addresses no longer need to be specified by hand; turn it off withresolver off.Error logging taken to a new level: message filtering via
filter=anderror_log_user_tagtags for routing events to handlers, JSON output for the error log, a rate limit viarate=(1000 messages per second by default), and thetime_formatdirective withstrftime()and%Lfor milliseconds. In addition, SSL session keys can be logged viassl_keylog_fileandproxy_ssl_keylog_file.Cleaner configuration: the
gotodirective in therewritemodule performs an internal redirect to a named location without changing the URI and works inside anifblock, doing away with workarounds built ontry_filesanderror_page. The built-in error pages and AutoIndex listings gained a dark color scheme.Statistics and observability: the Metrics module is now available for the
streammodule as well — counters, histograms, and moving averages via the/status/stream/metric_zones/API section, with Prometheus support; the new/certificates/API section gathers all certificates from the configuration and those obtained by ACME clients in one place, simplifying expiry monitoring; and the$upstream_transportvariable shows the transport (TCP or UDP) chosen for each connection attempt to a server in the group.Sync with nginx 1.31.2: all of its functionality is included, notably the new Tunnel module for CONNECT tunneling (Angie as an HTTP proxy for arbitrary TCP traffic), proxying to servers over HTTP/2, and the new
$ssl_sigalgsvariable with the list of signature algorithms the client supports.
In Angie PRO, additionally:
proxy_passwith a port for stream groups: the port can be specified directly inproxy_passfor a server group where it is not set. A single group can then be used to proxy to different ports — each server's status is tracked uniformly, and a server being unavailable is accounted for across all ports at once. Theno_portdirective explicitly marks a group as not using ports.proxy_bindnow evaluates variables after the server is selected, so an outgoing connection can be bound to an address that depends on the specific chosen server.The
$upstream_current_addrvariable holds the address of the current upstream server and is available as early as the moment it is selected — handy together withproxy_bind. Unlike$upstream_addr, it always contains exactly one address.Atomic switching of a server between the primary and backup groups — with a single request to the
backupfield in the/configAPI.The
feedbackfield in the statistics API: when the balancing method of the same name is used, it shows each server's current accumulated dynamic weight.
More details about the changes:
P.S. By the way, in a week — on 21 July — Angie turns four, so this release is also a small gift for the occasion. Thanks to everyone who is with us!
Have a great day!