NGINX is a high performance edge web server with the lowest memory footprint
and the key features to build modern and efficient web infrastructure.
NGINX functionality includes HTTP server, HTTP and mail reverse proxy, caching,
load balancing, compression, request throttling, connection multiplexing and
reuse, SSL offload and HTTP media streaming.
See also: https://freenginx.org/
www/{nginx,nginx-devel,freenginx}: Bump PORTREVISION for the module updates
The cache_purge, njs and lua modules are built into these ports, and a
BUILD_DEPENDS does not rebuild them by itself.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: Mark the MODSECURITY3 conflict
The option builds the same module from the same source into the same path
as security/modsecurity3-nginx. A build now stops with the name of the
package it collides with instead of overwriting its file.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Build the accept_language, aws_auth, fips_check, modsecurity3 and sts
modules from their own source ports instead of fetching them with
GH_TUPLE.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Build the gridfs, postgres, redis2 and sflow modules from their own
source ports instead of fetching them with GH_TUPLE.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
- Announce the removal of the HTTP_NOTICE option after 2026-12-31.
nginx can return a fixed body itself.
- Announce the removal of the HTTP_UPSTREAM_STICKY option after
2026-12-31 in nginx and nginx-devel. nginx has its own sticky
directive since 1.29.6, freenginx does not.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Announce the removal of the HTTP_UPSTREAM_FAIR option after 2026-12-31.
nginx can balance by least connections itself.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Build the let, slowfs_cache, websockify and zstd modules from their own
source ports instead of fetching them with GH_TUPLE.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Use the new www/nginx-module-ajp source port instead of fetching
nginx_ajp_module from GitHub.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Fix three defects in the body filter of the zstd module. A worker spins
at 100% CPU forever when an empty flush buffer arrives and the compressor
has nothing left to flush. A response is truncated at 131072 bytes when
a single input buffer larger than that carries last_buf. An output
buffer that is already full when ZSTD_endStream() is due gets dropped.
Upstream has not taken a code change since April 2024.
PR: 299100
Sponsored by: Netzkommune GmbH
www/freenginx: Fix the packing list for the zstd module
The two entries were taken over from www/nginx and still named
libexec/nginx, while the port installs its modules into
libexec/freenginx. Building with ZSTD enabled failed in check-plist.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Use the new www/nginx-module-vod source port instead of fetching
nginx-vod-module from GitHub.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Bump PORTREVISION so the packages pick up the fixed lua, cache_purge
and njs module sources.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Use the new www/nginx-module-form-input source port instead of fetching
form-input-nginx-module from GitHub. The module version is now
maintained in one place for these ports.
Sponsored by: Netzkommune GmbH
www/nginx-module-cache-purge: Fix proxy_cache_purge on freenginx
The module mirrors ngx_http_proxy_loc_conf_t privately and enables the
host_set field for nginx_version >= 1029004. freenginx does not have
that field, so plcf->cache_key is read at the wrong offset and a PURGE
request kills the worker process.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Use the new www/nginx-module-cache-purge source port instead of
fetching ngx_cache_purge from GitHub. The module version is now
maintained in one place for these ports.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Use the new www/nginx-module-array-var source port instead of fetching
array-var-nginx-module from GitHub. The module version is now
maintained in one place for these ports.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Chase the www/nginx-module-njs update to 1.0.1, which contains
security fixes. Bump PORTREVISION so the packages pick up the new
module.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Use the new www/nginx-module-njs source port instead of fetching njs
from GitHub. The module version is now maintained in one place for
these ports.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Add www/nginx-module-ndk, a source-only port for the Nginx
Development Kit, and use it in the nginx ports instead of fetching
ngx_devel_kit from GitHub. The module version is now maintained in
one place for these ports.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Point the MODSECURITY3 option at the owasp-modsecurity account, which now
hosts ModSecurity-nginx; the SpiderLabs path only works through GitHub's
redirect. Pin all three ports to the same commit 9eb44fd; they carried
v1.0.3, fd28e6a and v1.0.3.
Also restore two mangled lines in the freenginx MODSECURITY3 branch, which
had lost their first character, leaving the port without --with-ld-opt and
without the pcre2 dependency when the option was on.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Copy the module sources with cp instead of COPYTREE_SHARE in the
LUA and LUASTREAM pre-configure targets. COPYTREE_SHARE hardlinks
the files and then fails to chmod them when poudriere builds as an
unprivileged user.
Convert www/nginx-module-lua into a pure source-only port. The
prebuilt DSO conflicted with the module built by the nginx ports.
Add compat patches so lua-nginx-module builds against freenginx.
PR: 297651
Reported by: Brad Ackerman
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Rename www/lua-stream-nginx-module to www/nginx-module-lua-stream
to follow the nginx-module-* naming scheme for dedicated 3rd-party
module ports and adjust the consumers. Relax the BUILD_DEPENDS to
an unversioned dependency while here, matching the LUA option.
While here, rename the internal NJS_QJS_CFLAGS variable to
_NJS_QJS_CFLAGS so it is no longer treated as an option helper.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Start moving the bundled 3rd-party modules into dedicated
nginx-module-* ports, so that module versions are maintained in a
single place instead of the GH_TUPLE lists of the nginx ports.
As a first step, convert www/nginx-module-lua into a hybrid port
that installs the lua-nginx-module sources next to the prebuilt
DSO and use them in the three nginx ports via an unversioned
BUILD_DEPENDS instead of fetching from GitHub.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
- Add new NJS_QJS option to build the NJS module with the QuickJS
engine (lang/quickjs), which upstream recommends since njs 1.0.0
- Warn users with NJS enabled that the built-in njs engine is EOL
- Keep builds deterministic with NJS_QJS disabled (NJS_QUICKJS=NO)
- nginx-devel: remove leftover NJS_QJS bits pointing to deleted
patches; stop the QuickJS include path from clobbering the base
cc-opt flags
- nginx-full: enable NJS_QJS by default
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Update bundled third-party modules; where upstream now offers a tag,
switch from a commit hash to the version tag:
- array_var: v0.05 -> v0.06
- cache_purge: hash -> 3.0.2
- ngx_devel_kit: v0.3.3 -> v0.3.4
- drizzle: hash -> v0.1.14
- aws_auth: -> f3d9862 (stays on a hash; the 2.1.1 tag lacks the
OpenSSL 3.0 build fix)
Adjust the drizzle config patch to the module's new extraction
directory name.
For freenginx, add a patch to ngx_aws_auth: freenginx dropped
ngx_http_request_t.start_sec, so obtain the request time from
ngx_time() there instead.
Sponsored by: Netzkommune GmbH
www/freenginx-acme-module: Add new port
ngx_http_acme_module adds automatic ACME (RFC 8555) certificate
management to freenginx. This port builds the module against the
stable www/freenginx and installs it into libexec/freenginx.
While here, move the freenginx version into www/freenginx/version.mk
(matching www/nginx and www/nginx-devel) so the new port can include
it as the single source of truth.
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-party modules management
Move the bundled fdintino nginx-upload-module to release 2.3.0 and work
around its PCRE2 incompatibility.
Since the removal of the PCRE1 option nginx is built against PCRE2 only.
The module's regex filter for upload_pass_form_field still tests the
ngx_regex_exec() return code for "rc == 0", which is only true under
PCRE1; PCRE2 returns the number of captures (>= 0) on a match, so
matching
form fields were silently dropped and upload_pass_form_field was
unusable
on any dynamic (DSO) build. Relax the test to "rc >= 0" (workaround
from
upstream pull request 152).
freenginx: additionally adapt the module to the removal of r->start_sec
in freenginx >= 1.29 (nginx_version >= 1029000), which is otherwise a
build failure.
PR: 271781
Sponsored by: Netzkommune GmbH
www/{nginx-devel,freenginx}: 3rd-party modules management
The nginx_upstream_check_module extra-patches no longer matched the
current sources, so builds with HTTP_UPSTREAM_CHECK enabled failed.
nginx-devel: refresh the ngx_http_upstream_round_robin.c extra-patch for
nginx 1.31; reuse the patch already carried by www/nginx.
freenginx: regenerate the round_robin extra-patch against freenginx's
sources, and add extra-patch-ngx_http_upstream_check_module.c which
replaces the module's use of the ngx_http_status_t 'count' member
(removed in freenginx) with a local variable.
PR: 295745
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: 3rd-pary modules managemeht
Fix build and loading of the 3rd party gridfs module after the
devel/mongo-c-driver 2.x update.
The module config now obtains include and linker flags from
pkg-config instead of deriving them from the ports tree's
DISTVERSION. The previous approach ran a recursive make into
devel/mongo-c-driver on every make invocation, even with GRIDFS
unset, and derived the libbson include path from the mongo-c-driver
version although devel/libbson is a separate port with its own
DISTVERSION. Both directories happen to carry the same version
today, so the mismatch was not visible yet.
While here, add the missing assert.h include. The module calls
assert() without declaring it, which left an unresolvable symbol
"assert" in the shared object -- libc only exports __assert. Since
nginx dlopen()s modules with RTLD_NOW, load_module refused to load
the module at runtime.
Also correct a typo in one of the patch file names.
PR: 296604, 296605, 296606
Sponsored by: Netzkommune GmbH
www/freenginx: Update to 1.30.1
Changes with freenginx 1.30.1 02 Jun
2026
*) Change: the logging level of the "invalid ccs message", "not on
record boundary", "required compression algorithm missing", and
some
"record layer failure" SSL errors has been lowered from "crit" to
"info".
*) Bugfix: a segmentation fault might occur in a worker process if
the
"rewrite" directive was used to change request arguments and
other
(Only the first 15 lines of the commit message are shown above )
www/{nginx,nginx-devel,freenginx}: 3rd-pary modules managemeht
Update mod_zip to 1.3.0 and switch Github author to evanmiller as this
seems to be author that the other, less current, versions are forked
from.
PR: 295934
Sponsored by: Netzkommune GmbH
www/freenginx: fix rc script required_files path
Use %%ETCDIR%%/nginx.conf in the rc script instead of the
obsolete hardcoded %%PREFIX%%/etc/nginx/freenginx.conf path.
The port is configured with:
--prefix=/usr/local/etc/freenginx
--conf-path=/usr/local/etc/freenginx/nginx.conf
The previous required_files setting no longer matched the
actual configuration file location and could prevent the
service from starting after installation or upgrade.
PR: 290461
Sponsored by: Netzkommune GmbH
www/{nginx,nginx-devel,freenginx}: use lua-stream-nginx-module port
Replace the embedded LUASTREAM GH_TUPLE handling with a
BUILD_DEPENDS on www/lua-stream-nginx-module and use the
module sources from the dedicated port during the build.
Add freenginx compatibility patches for lua-stream-nginx-module.
Also update lua-stream-nginx-module to version 0.0.17.
PR: 294426
Sponsored by: Netzkommune GmbH
devel/grpc: Update to 1.78.0
- Add OPENTELEMETRY option: disable by default for now due to build failure
- Bump PORTREVISION of dependent ports for shlib change
Changes: https://github.com/grpc/grpc/releases
www/*nginx: Switch nginx-vod-module to maintained fork
The original Kaltura nginx-vod-module repository is no longer actively
maintained and has been incompatible with FFmpeg 8 due to removed
legacy API calls.
Switch to the actively maintained fork:
https://github.com/diogoazevedos/nginx-vod-module
This restores compatibility with newer FFmpeg versions.
Reported by: Jim Terhune via ML
Sponsored by: Netzkommune GmbH
*/*: update NGINX JavaScript to 0.9.5
Changes with njs 0.9.5
Release Date: 13 January 2026
nginx modules:
Feature: added native module support for qjs engine for http and
stream.
Bugfix: fixed js_body_filter with multiple chunks for qjs engine.
Bugfix: fixed buffer_type inheritance in if blocks for
js_body_filter. Previously, when js_body_filter was used inside an if
(Only the first 15 lines of the commit message are shown above )
www/*nginx: update 3rd party otel
Update nginx-otel to a newer upstream revision to fix OTEL builds
with system gRPC.
PR: 288764
Sponsored by: Netzkommune GmbH
www/lua-resty-core: update to 0.1.32
- Update lua-resty-core from 0.1.31 to 0.1.32
- Bump PORTREVISION for freenginx, nginx, and nginx-devel
PR: 290817
Approvd by: zi (autoapproved)
Sponsored by: Netzkommune GmbH
*/*: update NGINX JavaScript to 0.9.4
Changes with njs 0.9.4
Release Date: 28 October 2025
nginx modules:
Feature: added HTTP forward proxy support for ngx.fetch() API.
Core:
Bugfix: fixed r.subrequest() to a location with JS handler for
QuickJS. The bug became visible after bellard/quickjs@42eb2795.
Sponsored by: Netzkommune GmbH
*/*: update NGINX JavaScript to 0.9.3
Changes with njs 0.9.3
Release Date: 07 October 2025
nginx modules:
- Bugfix: fixed heap-use-after-free while module loading.
- Bugfix: fixed heap-use-after-free in js_set handler used in log
phase. The issue was introduced in 04f6dfb (0.9.2).
Changes with njs 0.9.2
(Only the first 15 lines of the commit message are shown above )
Bump PORTREVISIONs after grpc shlib change in 2715f16944541b6b
PR: 282624
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D47513
www/freenginx: Update to 1.26.0
Changelog: freenginx-1.26.0 stable version has been released, incorporating new
features and bug fixes from the 1.25.x mainline branch — including
experimental HTTP/3 support, improved mitigation of various DoS attacks,
fixes in AIO handling, and more.
Adoption of the changes from www/nginx
Sponsored by: Netzkommune GmbH