github graygnuorg/pound v4.1
Version 4.1

latest releases: v4.14, v4.13, v4.12...
23 months ago

Worker Model

Each incoming request is processed by a specific worker, i.e. a thread in the running program. The number of running workers is controlled by three configuration parameters. WorkerMinCount defines the minimum number of workers that should always be running (5, by default). Another parameter, WorkerMaxCount sets the upper limit on the number of running workers (defaults to 128).

At each given moment, a worker can be in one of two states: idle or active (processing a request). If an incoming request
arrives when all running workers are active, and total number of workers is less than maximum, a new thread is started and the new request is handed to it. If the number of active workers has already reached maximum, the new request is added to the request queue, where it will wait for a worker to become available to process it.

The third parameter, WorkerIdleTimeout, specifies maximum time a thread is allowed to spend in the idle state. If a worker
remains idle longer than that and total number of workers is greater than the allotted minimum, the idle worker is terminated. The default value for WorkerIdleTimeout is 30 seconds.

URL expansion in Redirect statement

URL argument to the Redirect statement can contain references to parethesized subexpressions in the most recently matched URL statement of the enclosing Service. References are of the form $N, where N is the number of the parenthesized subgroup. To insert a literal $ sign, use $$.

New statement: PIDFile

Defines the name of the PID file. The -p command line option overrides this setting.

New statement: ACME

The ACME statement creates a service specially crafted for answering ACME HTTP-01 challenge requests. It takes a single argument, specifying a directory where ACME challenges are stored. It is supposed that another program is started periodically, which checks for certificates approaching their expiration, issues renewal requests and stores the obtained ACME challenges in that directory.

The statement can appear in ListenHTTP block.

Example usage:

  ListenHTTP
    ACME "/var/www/acme"
    ...
  End

New statement: Host

The Host statement is provided to facilitate handling of virtual services. The statement:

  Host "example.com"

is equivalent to:

  HeadRequire "Host:[[:space:]]*example\\.com"

ACLs

Access control lists (ACLs) allow you to make some services available for users coming from certain IP ranges. There are two kinds of ACLs: named and unnamed. Named ACLs are defined in the global scope, using the following syntax:

  ACL "name"
     "CIDR"
     ...
  End

where the ellipsis denotes more CIDR lines. A CIDR is an IPv4 or IPv6 address, optionally followed by a slash and network mask length. Named ACLs can be referred to in Service sections using the following syntax:

  Service
     ACL "name"
     ...
  End

This service will be used only if the request comes from IP address that matches the given ACL.

Unnamed ACLs are defined within the service itself, as shown in the following example

  Service
     ACL
	"127.0.0.1"
	"192.0.2.0/26"
	"203.0.113.0/24"
     End
     ...
  End

Semantically they are entirely equivalent to named ACLs.

Boolean operations over request matching directives

By default, request matching directives are joined with an implicit boolean AND. This can be changed using the new Match directive, e.g.:

  Match OR
      HeadRequire "Host:[[:space:]]*example\\.org"
      HeadRequire "Host:[[:space:]]*example\\.net"
  End

Match directives can be nested to any depth.

Any request matching directive (including Match) can be prefixed with not, to invert its result (boolean negation).

Alternative spelling for header matching/manipulation directives

For consistency, the following configuration directives have been provided as alternatives for existing header manipulation directives:

Old name New name Comment
HeadRequire Header Service section
HeadDeny Not Header Service section. See "Boolean operations" above.
HeadRemove HeaderRemove ListenHTTP and ListenHTTPS sections
AddHeader HeaderAdd ListenHTTP and ListenHTTPS sections

The use of new names is preferred.

Don't miss a new pound release

NewReleases is sending notifications on new releases.