<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Valentin V. Bartenev</title>
    <description>The latest articles on DEV Community by Valentin V. Bartenev (@vbart).</description>
    <link>https://dev.to/vbart</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3191325%2F3e1ef1fe-7104-4eb5-a598-3ddd351e2569.png</url>
      <title>DEV Community: Valentin V. Bartenev</title>
      <link>https://dev.to/vbart</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vbart"/>
    <language>en</language>
    <item>
      <title>What's New in the Angie 1.9 Web Server (an nginx fork) and What to Expect from 1.10?</title>
      <dc:creator>Valentin V. Bartenev</dc:creator>
      <pubDate>Wed, 21 May 2025 12:17:48 +0000</pubDate>
      <link>https://dev.to/vbart/whats-new-in-the-angie-19-web-server-an-nginx-fork-and-what-to-expect-from-110-59l7</link>
      <guid>https://dev.to/vbart/whats-new-in-the-angie-19-web-server-an-nginx-fork-and-what-to-expect-from-110-59l7</guid>
      <description>&lt;p&gt;&lt;em&gt;In the cover picture: Colleagues meeting in the lobby of our office (AI-processed in Miyazaki style)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You may have already &lt;a href="https://en.angie.software/news/releases/angie-1-9-0/" rel="noopener noreferrer"&gt;read in the news&lt;/a&gt; that on the eve of Cosmonautics Day, a new stable release of Angie 1.9.0 was released, an nginx fork that continues to be developed by the team of former nginx developers. Approximately every quarter, we try to release new stable versions and delight users with numerous improvements. This release is no exception, but it's one thing to read a dry changelog and quite another to get to know the functionality in more detail, to learn how and in which cases it can be applied.&lt;/p&gt;

&lt;p&gt;The list of innovations that we will discuss in more detail:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saving shared memory zones with cache index to disk;&lt;/li&gt;
&lt;li&gt;Persistent switching to a backup group of proxied servers;&lt;/li&gt;
&lt;li&gt;0-RTT in the stream module;&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;busy&lt;/code&gt; status for proxied servers in the built-in statistics API;&lt;/li&gt;
&lt;li&gt;Improvements to the ACME module, which allows automatic obtaining of Let's Encrypt TLS certificates and others;&lt;/li&gt;
&lt;li&gt;Caching TLS certificates when using variables.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With one exception, all of this is included in the latest open source version of Angie and is available right now &lt;a href="https://en.angie.software/angie/docs/installation/" rel="noopener noreferrer"&gt;in our repositories&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And in addition, I'll briefly anticipate expectations for the future Angie 1.10 version, which should appear somewhere in late June - early July.&lt;/p&gt;

&lt;h2&gt;
  
  
  Saving the shared memory zone with cache index to disk
&lt;/h2&gt;

&lt;p&gt;One of the most interesting innovations in the fresh 1.9 release is the ability to save the shared memory zone that stores the cache index to disk.&lt;/p&gt;

&lt;p&gt;For this purpose, in the &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_proxy/#proxy-cache-path" rel="noopener noreferrer"&gt;&lt;code&gt;proxy_cache_path&lt;/code&gt;&lt;/a&gt; directive, in addition to the name and size of the zone, you can now specify the path to the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;proxy_cache_path&lt;/span&gt;  &lt;span class="s"&gt;my_cache&lt;/span&gt; &lt;span class="s"&gt;keys_zone=my_czone:256m:file=/path/to/my_cache.zone&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When shutting down, all data from the zone will be unloaded to the file, and when starting up, it will be loaded back from the file into shared memory.&lt;/p&gt;

&lt;p&gt;What does this give us? Previously, to load the cache after server restart, a special process was used, the so-called cache loader. It traversed all files in the cache directory and loaded the metadata into the index stored in shared memory. When there are a lot of files, this process can take minutes, hours, or even days, while creating additional, sometimes significant load on the hard disk. By the way, in our monitoring, you can &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_api/#status-http-caches-cache" rel="noopener noreferrer"&gt;observe this process&lt;/a&gt;: when the cache is not yet reloaded, the value of the &lt;code&gt;cold&lt;/code&gt; field will be &lt;code&gt;true&lt;/code&gt;. Enabling such a server is not possible in all cases; sometimes it can increase delays to an unacceptable level. As a result, after restarting the server, you have to wait all this time before returning the server to service.&lt;/p&gt;

&lt;p&gt;But if the index stored in shared memory is saved on disk as a single file, then unlike minutes, hours, and sometimes even days, the process of loading this file into memory takes just moments. Thus, loading the cache using the "cache loader" process is not required, and traffic can be directed to the server immediately after starting Angie.&lt;/p&gt;

&lt;p&gt;By the way, the saved index along with the cache can be transferred to another server, provided that the architectures and build parameters match.&lt;/p&gt;

&lt;p&gt;In future releases, we plan to add saving shared memory zones to other modules as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Persistent switching to a backup group of proxied servers (PRO only)
&lt;/h2&gt;

&lt;p&gt;Another interesting feature that has been added, but this time only to the PRO version, concerns the HTTP load balancer. The new &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_upstream/#backup-switch-pro" rel="noopener noreferrer"&gt;&lt;code&gt;backup_switch&lt;/code&gt;&lt;/a&gt; directive now allows changing the logic of switching to a backup group of servers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;upstream&lt;/span&gt; &lt;span class="s"&gt;backend&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;zone&lt;/span&gt; &lt;span class="s"&gt;backend&lt;/span&gt; &lt;span class="mi"&gt;1m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;backup_switch&lt;/span&gt; &lt;span class="s"&gt;permanent=5m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="s"&gt;backend1.example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="s"&gt;backend2.example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="s"&gt;backend3.example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="s"&gt;backup1.example.com&lt;/span&gt;   &lt;span class="s"&gt;backup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="s"&gt;backup2.example.com&lt;/span&gt;   &lt;span class="s"&gt;backup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="s"&gt;backup3.example.com&lt;/span&gt;   &lt;span class="s"&gt;backup&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default, for each incoming request, Angie first tries to find a live server in the main group (without the &lt;code&gt;backup&lt;/code&gt; option), and if there are no live servers among them, it then searches among the &lt;code&gt;backup&lt;/code&gt; group. Thus, as soon as one of the servers in the main group becomes available, all subsequent traffic will be directed to it immediately. In some configurations, such behavior is not acceptable, and in case of switching to a backup group, it is required to continue balancing requests to it. This mode is enabled by the directive:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;backup_switch permanent;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In this case, once encountering that there are no live servers in the main group, Angie will switch to the backup group and continue to balance traffic to it as long as there are live servers in the backup group or until the configuration is reloaded.&lt;/p&gt;

&lt;p&gt;If a timeout is specified in the &lt;code&gt;permanent&lt;/code&gt; option, for example, &lt;code&gt;permanent=5m&lt;/code&gt;, then attempts to select a server in the main group will occur, but not more often than once in the specified interval. If such an attempt is successful, it will switch back to the main group. This mode is a compromise and will protect against too frequent switching between the backup and main group in case such switching is still required, but the servers in the main group remain unstable or remain overloaded.&lt;/p&gt;

&lt;p&gt;In addition, a new &lt;code&gt;backup_switch&lt;/code&gt; object has appeared in the statistics API, which contains a numeric field &lt;code&gt;active&lt;/code&gt;. This object is only available when the &lt;code&gt;backup_switch permanent&lt;/code&gt; mode is enabled. The &lt;code&gt;active&lt;/code&gt; field displays the current active group: 0 if the main group is active and 1 in case of &lt;code&gt;backup&lt;/code&gt;. In the extended version of the load balancer Angie ADC, more than 1 backup group can be specified, so the value of the &lt;code&gt;active&lt;/code&gt; field in this case can be &amp;gt;1.&lt;/p&gt;

&lt;p&gt;If the option is set with a time interval (for example, &lt;code&gt;permanent=1m&lt;/code&gt;), then when switching to a backup group, the &lt;code&gt;backup_switch&lt;/code&gt; object also includes a &lt;code&gt;timeout&lt;/code&gt; field, which contains the number of milliseconds until the next attempt to switch to the main group.&lt;/p&gt;

&lt;p&gt;In future versions, we plan to implement the ability to configure even more complex logic for switching between backup groups (for example, by the number of available servers in the group, the load on them, etc.), as well as a new interface in the API that will allow forcing group switching by command from outside.&lt;/p&gt;

&lt;p&gt;Next, let's talk about simpler but useful functions that have been implemented in both the open source version and PRO.&lt;/p&gt;

&lt;h2&gt;
  
  
  0-RTT in the stream module
&lt;/h2&gt;

&lt;p&gt;The ability to use the TLS 1.3 Early Data (0-RTT) mechanism, which was previously only available in the HTTP module, has been added to the &lt;code&gt;stream&lt;/code&gt; module. It is enabled with the same &lt;a href="https://en.angie.software/angie/docs/configuration/modules/stream/stream_ssl/#ssl-early-data" rel="noopener noreferrer"&gt;directive&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssl_early_data on;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This mechanism allows the client to send data before completing the TLSv1.3 connection negotiation stage, which reduces the delay from the moment of connection to the moment of data processing during TLS termination. But it should be kept in mind that this mechanism is vulnerable to so-called &lt;a href="https://datatracker.ietf.org/doc/html/rfc8470" rel="noopener noreferrer"&gt;replay attacks&lt;/a&gt;, so it can only be enabled if the web service itself or the protocol that is proxied through the stream module is protected against such attacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  New "busy" status for proxied servers
&lt;/h2&gt;

&lt;p&gt;The next innovation is the new &lt;code&gt;busy&lt;/code&gt; status, which can be displayed in the &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_api/#http-upstream" rel="noopener noreferrer"&gt;&lt;code&gt;state&lt;/code&gt;&lt;/a&gt; field for proxied servers in our statistics API. This status can only be seen if the server configuration in the upstream group has a &lt;a href="https://en.angie.software/adc/docs/configuration_lb/reference/http_upstream/#server" rel="noopener noreferrer"&gt;&lt;code&gt;max_conns&lt;/code&gt;&lt;/a&gt; limitation:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;server backend.example.com:80 max_conns=128;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As you might guess, if the server hits the connection limit, its &lt;code&gt;state&lt;/code&gt; will change to &lt;code&gt;busy&lt;/code&gt; until the number of connections drops below the limit (or it turns off and transitions to one of the other modes: &lt;code&gt;down&lt;/code&gt;/&lt;code&gt;unhealthy&lt;/code&gt;/&lt;code&gt;unavailable&lt;/code&gt;). Previously, instead of &lt;code&gt;busy&lt;/code&gt;, the server remained in the &lt;code&gt;up&lt;/code&gt; status while it was alive, but requests could not be directed to it due to the &lt;code&gt;max_conns&lt;/code&gt; limitation. Therefore, for better indication of this state and the reasons why new requests are not directed to the server, an additional status was added.&lt;/p&gt;

&lt;h2&gt;
  
  
  ACME module improvements
&lt;/h2&gt;

&lt;p&gt;The next group of improvements is related to the further development of functionality for &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_acme/" rel="noopener noreferrer"&gt;automatic issuance of ACME certificates&lt;/a&gt;. They serve to improve the user experience with this module and were developed based on feedback from our &lt;a href="https://t.me/angie_support" rel="noopener noreferrer"&gt;Telegram community&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A new parameter &lt;code&gt;renew_on_load&lt;/code&gt; has been added to &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_acme/#acme-client" rel="noopener noreferrer"&gt;&lt;code&gt;acme_client&lt;/code&gt;&lt;/a&gt;, which makes it much easier to forcibly start the certificate renewal process when loading the configuration, if for some reason it is needed (for example, if a key leak becomes known).&lt;/p&gt;

&lt;p&gt;The operation mode of the &lt;code&gt;enabled=off&lt;/code&gt; option has also changed. It has become more user-friendly and now allows temporarily disabling certificate renewal, but if they were previously issued, access to them is preserved and they can continue to be used in the configuration.&lt;/p&gt;

&lt;p&gt;The approach to validating ACME directive configurations has also been revised in the new version. Previously, &lt;code&gt;acme_client&lt;/code&gt; directives required at least one &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_acme/#id4" rel="noopener noreferrer"&gt;&lt;code&gt;acme&lt;/code&gt;&lt;/a&gt; directive in &lt;code&gt;server&lt;/code&gt; blocks, which was not always convenient. Often, users generate Angie configuration dynamically, or connect certain configuration sections from separate files, and since &lt;code&gt;acme_client&lt;/code&gt; and &lt;code&gt;acme&lt;/code&gt; directives are set at different levels, a situation can easily arise where in one version of the configuration or another, there is not a single &lt;code&gt;acme&lt;/code&gt; directive referring to &lt;code&gt;acme_client&lt;/code&gt;. Previously, such configurations were considered invalid, but now the correctness check is more targeted, and an error will only occur if the &lt;code&gt;acme&lt;/code&gt; directive was specified in a &lt;code&gt;server&lt;/code&gt; block that does not have any valid domain name in &lt;code&gt;server_name&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;By the way, the easiest way to get acquainted with the capabilities of automatic TLS certificate issuance is to read the &lt;a href="https://en.angie.software/angie/docs/configuration/acme/" rel="noopener noreferrer"&gt;guide&lt;/a&gt;. In particular, from it you can learn that for issuing wildcard certificates, Angie can handle DNS requests from the ACME server itself - this significantly simplifies the setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caching TLS certificates when using variables
&lt;/h2&gt;

&lt;p&gt;And of course, we ported all the functionality from nginx 1.27.4, including the most significant innovation: caching dynamic TLS certificates that are set by variables. This functionality is configured using the corresponding directives: &lt;a href="https://en.angie.software/angie/docs/configuration/modules/core/#ssl-object-cache-inheritable" rel="noopener noreferrer"&gt;&lt;code&gt;ssl_object_cache_inheritable&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_ssl/#ssl-certificate-cache" rel="noopener noreferrer"&gt;&lt;code&gt;ssl_certificate_cache&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_proxy/#proxy-ssl-certificate-cache" rel="noopener noreferrer"&gt;&lt;code&gt;proxy_ssl_certificate_cache&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_grpc/#grpc-ssl-certificate-cache" rel="noopener noreferrer"&gt;&lt;code&gt;grpc_ssl_certificate_cache&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_uwsgi/#uwsgi-ssl-certificate-cache" rel="noopener noreferrer"&gt;&lt;code&gt;uwsgi_ssl_certificate_cache&lt;/code&gt;&lt;/a&gt;, and allows reducing CPU load and delay when using variables in &lt;code&gt;ssl_certificate_cache&lt;/code&gt;, &lt;code&gt;proxy_ssl_certificate&lt;/code&gt; and similar directives. This is very relevant in combination with our ACME module, where certificates are set through variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;ssl_certificate_cache&lt;/span&gt; &lt;span class="s"&gt;max=10&lt;/span&gt; &lt;span class="s"&gt;inactive=6h&lt;/span&gt; &lt;span class="s"&gt;valid=1d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;example.com&lt;/span&gt; &lt;span class="s"&gt;www.example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;acme&lt;/span&gt; &lt;span class="s"&gt;example&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="nv"&gt;$acme_cert_example&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="nv"&gt;$acme_cert_key_example&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Other useful minor improvements
&lt;/h2&gt;

&lt;p&gt;Among minor improvements: we added the display of the compilation date and time, both in the statistics API interface and in the command line output with the &lt;code&gt;-V&lt;/code&gt; flag. This functionality is especially useful to better distinguish between individual builds in our "nightly" build repositories, which have recently become available to everyone: &lt;a href="https://download.angie.software/angie-nightly/" rel="noopener noreferrer"&gt;https://download.angie.software/angie-nightly/&lt;/a&gt; with all &lt;a href="https://en.angie.software/angie/docs/installation/external-modules/" rel="noopener noreferrer"&gt;third-party modules&lt;/a&gt;. But this will also be useful for those who build Angie independently &lt;a href="https://en.angie.software/angie/docs/installation/sourcebuild/" rel="noopener noreferrer"&gt;from source&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In addition, we fixed an issue with the inheritance of &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_proxy/#proxy-ssl-certificate" rel="noopener noreferrer"&gt;&lt;code&gt;proxy_ssl_certificate&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_proxy/#proxy-ssl-certificate-key" rel="noopener noreferrer"&gt;&lt;code&gt;proxy_ssl_certificate_key&lt;/code&gt;&lt;/a&gt; directives, which manifested when using variables in them in builds with &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_ssl/#ssl-ntls" rel="noopener noreferrer"&gt;NTLS&lt;/a&gt; (i.e., the &lt;a href="https://tongsuo.net/en/docs/eco" rel="noopener noreferrer"&gt;Tongsuo&lt;/a&gt; TLS library).&lt;/p&gt;

&lt;p&gt;That's probably all regarding the 1.9.0 release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion and plans for the next release
&lt;/h2&gt;

&lt;p&gt;Starting with 1.10.0, we have a lot of interesting things coming. In particular, the ability to automatically update the list of projected servers in &lt;code&gt;upstream&lt;/code&gt; blocks based on Docker container labels is almost ready and is currently under review. Thanks to it, Angie will be able to automatically connect to the Docker API and monitor events. If you start a container with the appropriate label, its IP address with the specified port will immediately be added to the list of servers in the &lt;code&gt;upstream&lt;/code&gt; block without reloading the configuration, and in case of container stopping - removed. And a container put on pause will transfer the corresponding server to the &lt;code&gt;down&lt;/code&gt; state.&lt;/p&gt;

&lt;p&gt;Currently, the list of servers in &lt;code&gt;upstream&lt;/code&gt; groups can be updated &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_upstream/#reresolve" rel="noopener noreferrer"&gt;via DNS&lt;/a&gt;, including from SRV records, and in the PRO version additionally &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_api/#api-pro" rel="noopener noreferrer"&gt;via Rest API&lt;/a&gt; configuration.&lt;/p&gt;

&lt;p&gt;Also coming soon is a new module for customizing collected statistics metrics, which will allow users to create various counters in the configuration themselves, calculated from variables or their combinations. Thus, it will be possible to count everything that imagination allows. For example, set up a metric that would calculate the average traffic volume attributable to the top most requested URIs. Why not? Whatever you configure - that's what will be calculated, resulting in very flexible statistics. It can also be requested through &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_api/" rel="noopener noreferrer"&gt;our API in JSON format&lt;/a&gt;, or delivered &lt;a href="https://en.angie.software/angie/docs/configuration/modules/http/http_prometheus/" rel="noopener noreferrer"&gt;directly to Prometheus&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Customization of statistics, interaction with the Docker API, and other no less interesting functional capabilities will appear in the next version, which we try to stably release at least once every 3 months.&lt;/p&gt;

&lt;p&gt;In addition, I hope that I will have enough time to bring to release the long-awaited application launch capability, which I announced in &lt;a href="https://highload.ru/moscow/2024/abstracts/13181" rel="noopener noreferrer"&gt;my talk at the last HighLoad++ conference&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thank you for your attention. Stay tuned!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nginx</category>
      <category>devops</category>
      <category>letsencrypt</category>
    </item>
  </channel>
</rss>
