blob: d128d969e9779256529b4e3ba017d63fb52d871a [file] [edit]
.. _runner:
waitress-serve
--------------
.. versionadded:: 0.8.4
Waitress comes bundled with a thin command-line wrapper around the ``waitress.serve`` function called ``waitress-serve``.
This is useful for development, and in production situations where serving of static assets is delegated to a reverse proxy, such as nginx or Apache.
``waitress-serve`` takes the very same :ref:`arguments <arguments>` as the
``waitress.serve`` function, but where the function's arguments have
underscores, ``waitress-serve`` uses hyphens. Thus::
import myapp
waitress.serve(myapp.wsgifunc, port=8041, url_scheme='https')
Is equivalent to::
waitress-serve --port=8041 --url-scheme=https myapp:wsgifunc
Or:
waitress-serve --port=8041 --url-scheme=https --app=myapp:wsgifunc
The full argument list is :ref:`given below <invocation>`.
Boolean arguments are represented by flags. If you wish to explicitly set a
flag, simply use it by its name. Thus the flag::
--expose-tracebacks
Is equivalent to passing ``expose_tracebacks=True`` to ``waitress.serve``.
All flags have a negative equivalent. These are prefixed with ``no-``; thus
using the flag::
--no-expose-tracebacks
Is equivalent to passing ``expose_tracebacks=False`` to ``waitress.serve``.
If at any time you want the full argument list, use the ``--help`` flag.
Applications are specified similarly to PasteDeploy, where the format is
``myapp.mymodule:wsgifunc``. As some application frameworks use application
objects, you can use dots to resolve attributes like so:
``myapp.mymodule:appobj.wsgifunc``.
A number of frameworks, *web.py* being an example, have factory methods on
their application objects that return usable WSGI functions when called. For
cases like these, ``waitress-serve`` has the ``--call`` flag. Thus::
waitress-serve --call myapp.mymodule.app.wsgi_factory
Would load the ``myapp.mymodule`` module, and call ``app.wsgi_factory`` to get
a WSGI application function to be passed to ``waitress.server``.
.. note::
As of 0.8.6, the current directory is automatically included on
``sys.path``.
.. _invocation:
Invocation
~~~~~~~~~~
Usage::
waitress-serve [OPTS] [MODULE:OBJECT]
Common options:
``--help``
Show this information.
``--app=MODULE:OBJECT``
Run the given callable object the WSGI application.
You can specify the WSGI application using this flag or as a positional
argument.
``--call``
Call the given object to get the WSGI application.
``--host=ADDR``
Hostname or IP address on which to listen, default is '0.0.0.0',
which means "all IP addresses on this host".
``--port=PORT``
TCP port on which to listen, default is '8080'
``--listen=host:port``
Tell waitress to listen on an ip port combination.
Example:
--listen=127.0.0.1:8080
--listen=[::1]:8080
--listen=*:8080
This option may be used multiple times to listen on multiple sockets.
A wildcard for the hostname is also supported and will bind to both
IPv4/IPv6 depending on whether they are enabled or disabled.
``--server-name=NAME``
This is the value that will be placed in the WSGI environment as
``SERVER_NAME``, the only time that this value is used in the WSGI
environment for a request is if the client sent a HTTP/1.0 request without
a ``Host`` header set, and no other proxy headers.
The default is value is ``waitress.invalid``, if your WSGI application is
creating URL's that include this as the hostname and you are using a
reverse proxy setup, you may want to validate that your reverse proxy is
sending the appropriate headers.
In most situations you will not need to set this value.
``--[no-]ipv4``
Toggle on/off IPv4 support.
This affects wildcard matching when listening on a wildcard address/port
combination.
``--[no-]ipv6``
Toggle on/off IPv6 support.
This affects wildcard matching when listening on a wildcard address/port
combination.
``--unix-socket=PATH``
Path of Unix socket. If a socket path is specified, a Unix domain
socket is made instead of the usual inet domain socket.
Not available on Windows.
``--unix-socket-perms=PERMS``
Octal permissions to use for the Unix domain socket, default is
'600'.
``--url-scheme=STR``
Default ``wsgi.url_scheme`` value, default is 'http'.
``--url-prefix=STR``
The ``SCRIPT_NAME`` WSGI environment value. Setting this to anything
except the empty string will cause the WSGI ``SCRIPT_NAME`` value to be the
value passed minus any trailing slashes you add, and it will cause the
``PATH_INFO`` of any request which is prefixed with this value to be
stripped of the prefix. Default is the empty string.
``--ident=STR``
Server identity used in the 'Server' header in responses. Default
is 'waitress'.
``--trusted-proxy=IP``
IP address of a remote peer allowed to override various WSGI environment
variables using proxy headers.
For unix sockets, set this value to ``localhost`` instead of an IP address.
The value ``*`` (wildcard) may be used to signify that all remote peers are
to be trusted.
``--trusted-proxy-count=INT``
How many proxies we trust when chained. For example,
``X-Forwarded-For: 192.0.2.1, "[2001:db8::1]"``
or
``Forwarded: for=192.0.2.1, For="[2001:db8::1]"``
means there were (potentially), two proxies involved. If we know there is
only 1 valid proxy, then that initial IP address "192.0.2.1" is not trusted
and we completely ignore it.
If there are two trusted proxies in the path, this value should be set to
2. If there are more proxies, this value should be set higher.
Default: ``1``
``--trusted-proxy-headers=LIST``
Which of the proxy headers should we trust, this is a set where you
either specify "forwarded" or one or more of "x-forwarded-host", "x-forwarded-for",
"x-forwarded-proto", "x-forwarded-port", "x-forwarded-by".
This list of trusted headers is used when ``trusted_proxy`` is set and will
allow waitress to modify the WSGI environment using the values provided by
the proxy.
.. warning::
It is an error to set this value without setting ``--trusted-proxy``.
.. warning::
If ``--trusted-proxy`` is set, the default is ``x-forwarded-proto`` to
match older versions of Waitress. Users should explicitly opt-in by
selecting the headers to be trusted as future versions of waitress will
use an empty default.
``--[no-]log-untrusted-proxy-headers``
Should waitress log warning messages about proxy headers that are being
sent from upstream that are not trusted by ``--trusted-proxy-headers`` but
are being cleared due to ``--clear-untrusted-proxy-headers``?
This may be useful for debugging if you expect your upstream proxy server
to only send specific headers.
.. warning::
It is a no-op to set this value without also setting
``--clear-untrusted-proxy-headers`` and ``--trusted-proxy``
``--[no-]clear-untrusted-proxy-headers``
This tells Waitress to remove any untrusted proxy headers ("Forwarded",
"X-Forwared-For", "X-Forwarded-By", "X-Forwarded-Host", "X-Forwarded-Port",
"X-Forwarded-Proto") not explicitly allowed by ``--trusted-proxy-headers``.
This is active by default.
.. warning::
It is an error to set this value without setting ``--trusted-proxy``.
Tuning options:
``--threads=INT``
Number of threads used to process application logic, default is 4.
``--backlog=INT``
Connection backlog for the server. Default is 1024.
``--recv-bytes=INT``
Number of bytes to request when calling ``socket.recv()``. Default is
8192.
``--send-bytes=INT``
Number of bytes to send to socket.send(). Default is 1.
Multiples of 9000 should avoid partly-filled TCP packets.
.. deprecated:: 1.3
``--outbuf-overflow=INT``
A temporary file should be created if the pending output is larger than
this. Default is 1048576 (1MB).
``--outbuf-high-watermark=INT``
The app_iter will pause when pending output is larger than this value
and will resume once enough data is written to the socket to fall below
this threshold. Default is 16777216 (16MB).
``--inbuf-overflow=INT``
A temporary file should be created if the pending input is larger than
this. Default is 524288 (512KB).
``--connection-limit=INT``
Stop creating new channels if too many are already active. Default is
100.
``--cleanup-interval=INT``
Minimum seconds between cleaning up inactive channels. Default is 30. See
``--channel-timeout``.
``--channel-timeout=INT``
Maximum number of seconds to leave inactive connections open. Default is
120. 'Inactive' is defined as 'has received no data from the client and has
sent no data to the client'.
``--channel-request-lookahead=INT``
Sets the amount of requests we can continue to read from the socket, while
we are processing current requests. The default value won't allow any
lookahead, increase it above ``0`` to enable.
When enabled this inserts a callable ``waitress.client_disconnected`` into
the environment that allows the task to check if the client disconnected
while waiting for the response at strategic points in the execution and to
cancel the operation.
Default: ``0``
``--[no-]log-socket-errors``
Toggle whether premature client disconnect tracebacks ought to be logged.
On by default.
``--max-request-header-size=INT``
Maximum size of all request headers combined. Default is 262144 (256KB).
``--max-request-body-size=INT``
Maximum size of request body. Default is 1073741824 (1GB).
``--[no-]expose-tracebacks``
Toggle whether to expose tracebacks of unhandled exceptions to the client.
Off by default.
``--asyncore-loop-timeout=INT``
The timeout value in seconds passed to ``asyncore.loop()``. Default is 1.
``--asyncore-use-poll``
The use_poll argument passed to ``asyncore.loop()``. Helps overcome open
file descriptors limit. Default is False.