<?xml version='1.0' encoding='utf-8'?>
<rss version="2.0"><channel><title>x86_64 GetPageSpeed extras (freenginx-mainline) repository for CentOS/RHEL 9</title><link>https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/repoview/latest-feed.xml</link><description>Latest packages for x86_64 GetPageSpeed extras (freenginx-mainline) repository for CentOS/RHEL 9</description><lastBuildDate>Thu, 29 Oct 2026 16:29:36 +0000</lastBuildDate><generator>Repoview-2.5.0</generator><item><guid isPermaLink="false">https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/repoview/freenginx.html+3:1.31.5-75.el9.gps.x86_64</guid><link>https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/repoview/freenginx.html</link><pubDate>Thu, 29 Oct 2026 15:20:37 +0000</pubDate><title>Update: freenginx-1.31.5-75.el9.gps</title><description>&lt;div&gt;
	&lt;p&gt;
		&lt;strong&gt;Package:&lt;/strong&gt; freenginx&lt;br/&gt;
		&lt;strong&gt;Summary:&lt;/strong&gt; High performance web server
	&lt;/p&gt;
	&lt;p&gt;
		&lt;strong&gt;Description:&lt;/strong&gt;&lt;br/&gt;
		nginx [engine x] is an HTTP and reverse proxy server, as well as
a mail proxy server.
	&lt;/p&gt;
	&lt;h3&gt;Changes:&lt;/h3&gt;
	&lt;table cellpadding="4" cellspacing="0"&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-1.31.5-75.el9.gps.x86_64.rpm"
              &gt;freenginx-1.31.5-75.el9.gps.x86_64&lt;/a&gt;
              [1.1 MiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-10-29)&lt;/span&gt;:
              &lt;pre&gt;- Bump bundled nginx-module-gps-license 1.10.0 -&gt; 1.11.0: the default
  license token lookup now tries the canonical
  /etc/getpagespeed/license.jwt first (one file licenses every
  GetPageSpeed product on the host), then the legacy
  /etc/nginx/license.jwt, which keeps working forever; an explicit
  gps_license_token still wins&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-1.31.5-74.el9.gps.x86_64.rpm"
              &gt;freenginx-1.31.5-74.el9.gps.x86_64&lt;/a&gt;
              [1.1 MiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-10-17)&lt;/span&gt;:
              &lt;pre&gt;- Bump bundled nginx-module-gps-license 1.9.1 -&gt; 1.10.0: the 503 page
  button label is now reason-aware (missing="Set up your token",
  expired="Renew license", invalid="Fix your token", revoked="Restart
  subscription") and its URL carries ?ref=nginx503 so landing-page
  analytics can attribute 503-driven arrivals.&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-1.31.4-74.el9.gps.x86_64.rpm"
              &gt;freenginx-1.31.4-74.el9.gps.x86_64&lt;/a&gt;
              [1.1 MiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-10-17)&lt;/span&gt;:
              &lt;pre&gt;- Bump bundled nginx-module-gps-license 1.9.1 -&gt; 1.10.0: the 503 page
  button label is now reason-aware (missing="Set up your token",
  expired="Renew license", invalid="Fix your token", revoked="Restart
  subscription") and its URL carries ?ref=nginx503 so landing-page
  analytics can attribute 503-driven arrivals.&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-1.31.4-73.el9.gps.x86_64.rpm"
              &gt;freenginx-1.31.4-73.el9.gps.x86_64&lt;/a&gt;
              [1.1 MiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-10-13)&lt;/span&gt;:
              &lt;pre&gt;- Add freenginx-rebased copy of the QUIC BPF reload/upgrade patch; the
  nginx.org version failed prep on freenginx branches (divergent sockmap
  declaration and generated BPF code), breaking all 18 freenginx-mainline
  CI lanes&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-1.31.4-69.el9.gps.x86_64.rpm"
              &gt;freenginx-1.31.4-69.el9.gps.x86_64&lt;/a&gt;
              [1.0 MiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-09-17)&lt;/span&gt;:
              &lt;pre&gt;- SELinux: allow httpd_t setattr on /dev/null (nginx-gps policy 1.2). With
  the common "error_log /dev/null;" idiom, every logrotate USR1 log reopen
  produced a daily [emerg] "chown(/dev/null) failed (13: Permission denied)"
  because the master chowns error logs to the worker UID and the stock
  policy denies it silently (dontaudit, no AVC).
- SELinux: ship nginx-gps as version-agnostic CIL text instead of a binary
  .pp. The .pp module format tracks the build chroot's checkpolicy (3.10
  emits format 24), which targets one userland update behind (libsepol 3.9,
  reads 4-23) cannot parse — the module then silently failed to install.
- SELinux: %post now emits a warning to stderr when the nginx-gps module
  fails to install instead of swallowing the error.&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-1.31.4-68.el9.gps.x86_64.rpm"
              &gt;freenginx-1.31.4-68.el9.gps.x86_64&lt;/a&gt;
              [1.0 MiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-09-10)&lt;/span&gt;:
              &lt;pre&gt;- SELinux: support "quic_bpf on;" (QUIC connection migration) behind a new
  default-off boolean. The stock policy grants httpd_t nothing on the bpf
  class, so enabling quic_bpf made nginx refuse to start with "failed to
  create BPF map (13: Permission denied)". nginx-gps policy module 1.1 adds
  the empirically-captured allows (bpf map/prog permissions plus the bpf,
  perfmon and net_admin capability checks), all gated behind the boolean
  nginx_quic_bpf, off by default: nothing changes for any install until
  "setsebool -P nginx_quic_bpf 1". Verified on Rocky Linux 10 enforcing:
  start, reload, binary upgrade and HTTP/3 traffic all clean with zero AVCs;
  with the boolean off, behavior is exactly as before.&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-1.31.4-67.el9.gps.x86_64.rpm"
              &gt;freenginx-1.31.4-67.el9.gps.x86_64&lt;/a&gt;
              [1.0 MiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-09-07)&lt;/span&gt;:
              &lt;pre&gt;- gps-license module 1.9.1: fix CLOSE-WAIT connection leak. Every identity
  probe request and every hard-enforcement 503 left one worker connection
  un-finalized (CLOSE-WAIT) until worker_connections exhausted - a 1/min
  monitoring probe could take a server down in about a day (reported by an
  Ultra subscriber with a clean 20-probes = +20 CLOSE-WAIT repro). Both
  paths now finalize the request; hard 503s appear in access_log, probe
  requests remain unlogged. Regression-tested (integration + EL9 e2e with
  the reporter's exact ss check) and E2E-proven against production.&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-1.31.4-66.el9.gps.x86_64.rpm"
              &gt;freenginx-1.31.4-66.el9.gps.x86_64&lt;/a&gt;
              [1.0 MiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-09-03)&lt;/span&gt;:
              &lt;pre&gt;- gps-license 1.9.0 tarball refresh: fix Linux compilation of the module's
  unit-test harness (POSIX feature-test macro, test path buffer); shipped
  module code unchanged. Supersedes the partially-published Release 65
  (x86_64-only, cancelled mid-build) so all architectures converge on the
  E2E-proven build (verified against production: beacon machine identity
  row landed in repo_license_usage)&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-1.31.4-64.el9.gps.x86_64.rpm"
              &gt;freenginx-1.31.4-64.el9.gps.x86_64&lt;/a&gt;
              [1.0 MiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-08-27)&lt;/span&gt;:
              &lt;pre&gt;- nginx-ech: new subpackage for ECH (RFC 9849) key generation and rotation,
  at parity with nginx-mod-ech (shared nginx-ech-keygen implementation)
- assert ECH is live at build time: a bogus ssl_ech_file must fail the
  configuration test instead of degrading to a silent no-op&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
</description></item><item><guid isPermaLink="false">https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/repoview/freenginx-ech.html+3:1.31.5-75.el9.gps.x86_64</guid><link>https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/repoview/freenginx-ech.html</link><pubDate>Thu, 29 Oct 2026 15:20:37 +0000</pubDate><title>Update: freenginx-ech-1.31.5-75.el9.gps</title><description>&lt;div&gt;
	&lt;p&gt;
		&lt;strong&gt;Package:&lt;/strong&gt; freenginx-ech&lt;br/&gt;
		&lt;strong&gt;Summary:&lt;/strong&gt; Encrypted Client Hello key management for NGINX
	&lt;/p&gt;
	&lt;p&gt;
		&lt;strong&gt;Description:&lt;/strong&gt;&lt;br/&gt;
		Key generation and rotation for Encrypted Client Hello (ECH, RFC 9849).

nginx reads ECH keys while parsing its configuration, so a new key only takes
effect on reload, and a client that picked up an older ECHConfigList from a
cached HTTPS DNS record still needs the key it encrypted to. nginx handles
that by accepting several ssl_ech_file directives: the first is advertised in
retry-configs, the rest stay loaded for decryption only.

This package ships nginx-ech-keygen, which maintains that rolling set under
/etc/nginx/ech and regenerates the include listing them, plus a
systemd timer that rotates on a schedule.

The timer is not enabled on install and nothing happens until you configure
it. Set ECH_PUBLIC_NAME in /etc/sysconfig/nginx-ech-rotate, run
"nginx-ech-keygen --init", publish the value it prints in the HTTPS record for
your ECH-enabled names, then "systemctl enable --now nginx-ech-rotate.timer".

ECH only helps if the HTTPS record is served from a DNS-only zone and clients
resolve over DoH. See https://nginx-extras.getpagespeed.com/ech/
	&lt;/p&gt;
	&lt;h3&gt;Changes:&lt;/h3&gt;
	&lt;table cellpadding="4" cellspacing="0"&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-ech-1.31.5-75.el9.gps.x86_64.rpm"
              &gt;freenginx-ech-1.31.5-75.el9.gps.x86_64&lt;/a&gt;
              [25 KiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-10-29)&lt;/span&gt;:
              &lt;pre&gt;- Bump bundled nginx-module-gps-license 1.10.0 -&gt; 1.11.0: the default
  license token lookup now tries the canonical
  /etc/getpagespeed/license.jwt first (one file licenses every
  GetPageSpeed product on the host), then the legacy
  /etc/nginx/license.jwt, which keeps working forever; an explicit
  gps_license_token still wins&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-ech-1.31.5-74.el9.gps.x86_64.rpm"
              &gt;freenginx-ech-1.31.5-74.el9.gps.x86_64&lt;/a&gt;
              [25 KiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-10-17)&lt;/span&gt;:
              &lt;pre&gt;- Bump bundled nginx-module-gps-license 1.9.1 -&gt; 1.10.0: the 503 page
  button label is now reason-aware (missing="Set up your token",
  expired="Renew license", invalid="Fix your token", revoked="Restart
  subscription") and its URL carries ?ref=nginx503 so landing-page
  analytics can attribute 503-driven arrivals.&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-ech-1.31.4-74.el9.gps.x86_64.rpm"
              &gt;freenginx-ech-1.31.4-74.el9.gps.x86_64&lt;/a&gt;
              [25 KiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-10-17)&lt;/span&gt;:
              &lt;pre&gt;- Bump bundled nginx-module-gps-license 1.9.1 -&gt; 1.10.0: the 503 page
  button label is now reason-aware (missing="Set up your token",
  expired="Renew license", invalid="Fix your token", revoked="Restart
  subscription") and its URL carries ?ref=nginx503 so landing-page
  analytics can attribute 503-driven arrivals.&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-ech-1.31.4-73.el9.gps.x86_64.rpm"
              &gt;freenginx-ech-1.31.4-73.el9.gps.x86_64&lt;/a&gt;
              [25 KiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-10-13)&lt;/span&gt;:
              &lt;pre&gt;- Add freenginx-rebased copy of the QUIC BPF reload/upgrade patch; the
  nginx.org version failed prep on freenginx branches (divergent sockmap
  declaration and generated BPF code), breaking all 18 freenginx-mainline
  CI lanes&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-ech-1.31.4-69.el9.gps.x86_64.rpm"
              &gt;freenginx-ech-1.31.4-69.el9.gps.x86_64&lt;/a&gt;
              [22 KiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-09-17)&lt;/span&gt;:
              &lt;pre&gt;- SELinux: allow httpd_t setattr on /dev/null (nginx-gps policy 1.2). With
  the common "error_log /dev/null;" idiom, every logrotate USR1 log reopen
  produced a daily [emerg] "chown(/dev/null) failed (13: Permission denied)"
  because the master chowns error logs to the worker UID and the stock
  policy denies it silently (dontaudit, no AVC).
- SELinux: ship nginx-gps as version-agnostic CIL text instead of a binary
  .pp. The .pp module format tracks the build chroot's checkpolicy (3.10
  emits format 24), which targets one userland update behind (libsepol 3.9,
  reads 4-23) cannot parse — the module then silently failed to install.
- SELinux: %post now emits a warning to stderr when the nginx-gps module
  fails to install instead of swallowing the error.&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-ech-1.31.4-68.el9.gps.x86_64.rpm"
              &gt;freenginx-ech-1.31.4-68.el9.gps.x86_64&lt;/a&gt;
              [21 KiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-09-10)&lt;/span&gt;:
              &lt;pre&gt;- SELinux: support "quic_bpf on;" (QUIC connection migration) behind a new
  default-off boolean. The stock policy grants httpd_t nothing on the bpf
  class, so enabling quic_bpf made nginx refuse to start with "failed to
  create BPF map (13: Permission denied)". nginx-gps policy module 1.1 adds
  the empirically-captured allows (bpf map/prog permissions plus the bpf,
  perfmon and net_admin capability checks), all gated behind the boolean
  nginx_quic_bpf, off by default: nothing changes for any install until
  "setsebool -P nginx_quic_bpf 1". Verified on Rocky Linux 10 enforcing:
  start, reload, binary upgrade and HTTP/3 traffic all clean with zero AVCs;
  with the boolean off, behavior is exactly as before.&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-ech-1.31.4-67.el9.gps.x86_64.rpm"
              &gt;freenginx-ech-1.31.4-67.el9.gps.x86_64&lt;/a&gt;
              [20 KiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-09-07)&lt;/span&gt;:
              &lt;pre&gt;- gps-license module 1.9.1: fix CLOSE-WAIT connection leak. Every identity
  probe request and every hard-enforcement 503 left one worker connection
  un-finalized (CLOSE-WAIT) until worker_connections exhausted - a 1/min
  monitoring probe could take a server down in about a day (reported by an
  Ultra subscriber with a clean 20-probes = +20 CLOSE-WAIT repro). Both
  paths now finalize the request; hard 503s appear in access_log, probe
  requests remain unlogged. Regression-tested (integration + EL9 e2e with
  the reporter's exact ss check) and E2E-proven against production.&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-ech-1.31.4-66.el9.gps.x86_64.rpm"
              &gt;freenginx-ech-1.31.4-66.el9.gps.x86_64&lt;/a&gt;
              [20 KiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-09-03)&lt;/span&gt;:
              &lt;pre&gt;- gps-license 1.9.0 tarball refresh: fix Linux compilation of the module's
  unit-test harness (POSIX feature-test macro, test path buffer); shipped
  module code unchanged. Supersedes the partially-published Release 65
  (x86_64-only, cancelled mid-build) so all architectures converge on the
  E2E-proven build (verified against production: beacon machine identity
  row landed in repo_license_usage)&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td valign="top"&gt;&lt;a href="https://extras.getpagespeed.com/redhat/9/freenginx-mainline/x86_64/RPMS/freenginx-ech-1.31.4-64.el9.gps.x86_64.rpm"
              &gt;freenginx-ech-1.31.4-64.el9.gps.x86_64&lt;/a&gt;
              [19 KiB]&lt;/td&gt;
            &lt;td valign="top"&gt;
              &lt;strong&gt;Changelog&lt;/strong&gt;
              by &lt;span&gt;Danila Vershinin (2026-08-27)&lt;/span&gt;:
              &lt;pre&gt;- nginx-ech: new subpackage for ECH (RFC 9849) key generation and rotation,
  at parity with nginx-mod-ech (shared nginx-ech-keygen implementation)
- assert ECH is live at build time: a bogus ssl_ech_file must fail the
  configuration test instead of degrading to a silent no-op&lt;/pre&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;
</description></item></channel></rss>