NGINX

Differences between revisions 2 and 11 (spanning 9 versions)
Revision 2 as of 2017-02-13 23:59:32
Size: 7161
Editor: teward
Comment: add anchors
Revision 11 as of 2018-10-30 15:35:47
Size: 7075
Editor: teward
Comment: Update supported versions list
Deletions are marked like this. Additions are marked like this.
Line 21: Line 21:
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.

There are certain features that will not be enabled, however, even if requested, due to various reasons:

 * AIO Support
  * [[http://askubuntu.com/questions/876913/what-package-provides-aio-module-for-nginx|Initial request about NGINX+AIO on Ask Ubuntu]]
  * AIO support causes a lot of unintended side effects when debugging NGINX behavior. While this may not be intentional, it causes a lot of issues. AIO support was requested in [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=784240|Debian Bug #784240]], but was [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=784240#10|rejected as "Won't Enable"]] for this reason.
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.
Line 47: Line 41:
=== Bug in an NGINX Version with ~CODENAME or +CODENAME in Version === === Bug in an NGINX Version with ~CODENAME or +CODENAME in Version String ===
Line 49: Line 43:
(NOTE: CODENAME would be "Xenial" for 16.04, for example) (NOTE: `CODENAME` would be `xenial` for 16.04, for example)
Line 54: Line 48:
 * If version string contains '+CODENAME#' (where # is a number):  * If version string contains `+CODENAME#` (where # is a number):
Line 56: Line 50:
 * If version string contains '~CODENAME':  * If version string contains `~CODENAME`:
Line 74: Line 68:
=== Error: "Address in use" / "bind() ... failed" === === "Address in use" / "bind() failed" errors ===
Line 78: Line 72:
 * 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)
 * `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)`
Line 87: Line 81:
 * 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 [[https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/1782226|Bug #1782226]] which puts checks into the postinst file to determine whether something else is listening on Port 80.
Line 90: Line 85:
=== Error: "No Such File or Directory" for nginx.conf or config files === === "No Such File or Directory" for `nginx.conf` / config files error ===
Line 94: Line 89:
 * nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)  * `nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)`
Line 104: Line 99:
    * 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'.
    * `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`.
Line 113: Line 108:
||<:> '''Ubuntu Release''' ||<:> '''NGINX Version''' ||<:> '''Upstream Branch''' ||
||<:> 12.04 ||<:> 1.1.19 ||<:> Development* ||
||<:> 14.04 ||<:> 1.4.6 ||<:> Stable ||
||<:> 16.04 ||<:> 1.10.0 ||<:> Stable ||
||<:> 16.10 ||<:> 1.10.1 ||<:> Stable ||
||<:> 17.04 (dev) ||<:> 1.10.3 ||<:> Stable ||
||<:> '''Ubuntu Release''' ||<:> '''NGINX Version''' ||<:> '''Upstream Branch''' ||<:> '''Release-specific Notes''' ||
||<:> 12.04 ||<:> 1.1.19 ||<:> Development* ||<:> ||
||<:> 14.04 ||<:> 1.4.6 ||<:> Stable       ||<:> ||
||<:> 16.04 ||<:> 1.10.0 ||<:> Stable       ||<:> [[ServerTeam/NGINX/XenialXerus|Notes]] ||
||<:> 18.04 ||<:> 1.14.0 ||<:> Stable       ||<:> ||
||<:> 18.10 ||<:> 1.15.5 ||<:> Mainline ||<:> ||

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.)

Ubuntu Release

NGINX Version

Upstream Branch

Release-specific Notes

12.04

1.1.19

Development*

14.04

1.4.6

Stable

16.04

1.10.0

Stable

Notes

18.04

1.14.0

Stable

18.10

1.15.5

Mainline

* The "Development" branch is now called the Mainline branch, as the namings have changed at NGINX since 2012.

Additional Resources and References

ServerTeam/NGINX (last edited 2018-10-30 15:36:55 by teward)