NGINX

What is NGINX?

NGINX is open source software for web serving, reverse proxying, caching, load balancing, media streaming, and more. It started out as a web server designed for maximum performance and stability. In addition to its HTTP server capabilities, NGINX can also function as a proxy server for email (IMAP, POP3, and SMTP) and a reverse proxy and load balancer for HTTP, TCP, and UDP servers.

Who maintains NGINX in Ubuntu?

The NGINX software and packaging is maintained in Ubuntu jointly by Thomas Ward, and the rest of the Server Team, as well as the Security team for Ubuntu Trusty 14.04 LTS and onwards as part of the 'main' repository (for security updates).

Requesting Additional Features

The standard procedure for requesting additional features or changes to a package is to open a bug and make sure it's marked as a feature request, to mark as a Wishlist item. Any deviation from this is documented below.

Enablement of a Core (upstream provided) feature

The standard procedure for requesting additional features that are provided as a part of the pure source code from NGINX is to file a bug detailing what you want enabled/changed, and your rationale for its inclusion.

Requesting Inclusion of a Third-Party Module

NGINX has *numerous* third-party plugins not maintained by the NGINX upstream teams or the Ubuntu teams, and is able to be extended with such plugins (as has been done in Debian with some of the modules enabled/available for the nginx-full and nginx-extras flavors). Because of this ability to be extended we have received a good deal of requests here in Ubuntu to include third-party modules not yet included in the package.

When it comes to determining inclusion, there's many factors, including that we also have to be concerned if Debian does not support it, as we merge from Debian to Ubuntu when possible, and introducing new versions or software code can break these modules to varying degrees.

Given the complexity of NGINX, the varied level of version support by third party module developers, and the varied levels of triviality to support a given third-party module, we are not accepting additional third-party module requests for Ubuntu. Any requests for third-party modules to be added to the packaging should originate in Debian, and be filed against the 'src:nginx' package on Debian's Bug Tracker, where it will be considered whether or not to include that module.

Bug Triage Guidelines

For the most part, standard triage rules apply. There are several special-case issues which have different handling processes, however, detailed below.

Bug in an NGINX Version with ~CODENAME or +CODENAME in Version String

(NOTE: CODENAME would be xenial for 16.04, for example)

Triage Handling:

  • Status (Ubuntu): Invalid

  • If version string contains +CODENAME# (where # is a number):

  • If version string contains ~CODENAME:

"Please add" a third-party module to nginx - Feature Request

Triage Handling:

  • Status: Won't Fix

  • Importance: Wishlist

Or...

"Address in use" / "bind() failed" errors

Example Log Excerpts:

  • nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

  • nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)

Triage Handling:

  • Status: Invalid

  • Reason:
    • This is known to be a local-system-related issue and not an issue in the packaging.
    • This usually happens if Apache or some other service is listening already on the IP/port combination set forth in the NGINX listen configurations.
  • Note that in Cosmic 18.10, this is mitigated for on-install and on-upgrade nginx runs starting with version 1.15.2-0ubuntu1, thanks to the fix for Bug #1782226 which puts checks into the postinst file to determine whether something else is listening on Port 80.

"No Such File or Directory" for `nginx.conf` / config files error

Example Log Excerpts:

  • nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)

Triage Handling:

  • Status: Invalid

  • Reason:
    • This is known to be a local-system-related issue and not an issue in the packaging.
    • This can happen when some packages are installed or removed, and alter configurations. This can also happen due to user error or mistakes, which remove the configuration files. In each case, this is a local-system issue.
  • WORKAROUND / FIX:
    • It is possible to completely remove and reinstall the default configuration for NGINX. The workaround is to execute the following commands in sequence:
      • sudo apt-get remove --purge nginx-common

      • sudo apt-get install nginx nginx-common

    • If a user wants a specific flavor of nginx, and not deal with the nginx metapackage, they can replace nginx with nginx-light, nginx-extras, nginx-full, or nginx-core.

Versions in Ubuntu Repository

We currently support the following Versions in the Ubuntu repositories, for a given release. Note the "Tracking" column indicates whether we are tracking NGINX's Stable or Mainline branch for that release. (This does not include packaging version string changes, or Security updates unless a version bump has happened for the Security updates.)

Only LTS and ESM releases are listed here for brevity.

Ubuntu Release

NGINX Version

Upstream Branch

Release-specific Notes

16.04

1.10.3

Stable

Notes

18.04

1.14.0

Stable

20.04

1.15.5

Mainline

22.04

1.18.0

Stable

||<:> 24.04 ||<:> 1.24.0 ||<:> Stable ||<:> ||

nginx-abi and how it works

The nginx-abi definition in packaging, etc. is new from Debian, and introduces ABI specific changes.

That is, when working with external modules in other source repos/packages, the ABI definition is done such that it is defined by NGINX versions.

Accordingly, with NGINX 1.26.0, Debian introduced nginx-abi = 1.26.0-1. This means that we target NGINX base version 1.26.0, version 1 of the ABI. The -1 is reserved by the Debian NGINX team in the case we have to apply a patch, etc. for security, etc. that would force an ABI change but not an NGINX version change.

Additional Resources and References

ServerTeam/NGINX (last edited 2024-06-17 17:50:46 by teward)