Package: xsendfile_middleware
WSGI Middleware to Support X-Accel-RedirectDescriptionNginxhas a mechanism whereby, by returning anX-Accel-Redirectheader,
a web app may convince nginx to serve a static file directly.PEP 333defines a mechanism whereby an app server (or middleware)
can offer to serve files directly by providingwsgi.file_wrapperin theenviron.
This package provides a piece of WSGI middleware to take advantage of those
two mechanisms.Despite the name of the package, currently this middleware only works
with nginx’sX-Accel-Redirectmechanism. (It would probably be
straightforward to generalize it so that it worksX-Sendfile, but
at the moment, I have no need for that.)Download & SourceThe source repository is ongithub.
You may submit bug reports and pull requests there.It is also available viaPyPI.UsageThe middleware isxsendfile_middleware.xsendfile_middleware.
You can call it directly, e.g.:from xsendfile_middleware import xsendfile_middleware

def main(**settings):
    """ Construct and return a filtered app.
    """
    def my_app(environ, start_response):
        # ...
        return app_iter

    # wrap middleware around app
    return xsendfile_middleware(my_app)There is also a suitable entry point provided so that you can instantiate
the middleware from aPasteDeploy.inifile, e.g.:[app:myapp]
use = egg:MyEgg

[pipeline:main]
pipeline = egg:xsendfile_middleware myappConfigurationX_REDIRECT_MAPOnce you have the middleware in place, the only configuration needed
(or possible) is to set anX_REDIRECT_MAPkey in the WSGI environ.
How you do that depends on how you’ve got things set up.  If you are
running your app underuwsgi, for example, then you can use something
like the following in yournginxconfig:location /app {
  uwsgi_pass 127.0.0.1:6543;
  include uwsgi_params;

  uwsgi_param X_REDIRECT_MAP /path/to/files/=/_redir_/;
}

location /_redir_/ {
  internal;
  alias /path/to/files/;
}In this configuration, if your app returns an app_iter which is
an instance of the file wrapper provided by the middleware, and
that wrapper wraps file at,e.g.,/path/to/files/dir/file.data,
the middleware will set anX-Accel-Redirect:/_redir_/dir/file.dataheader in the response.  (This, hopefully, will cause nginx to send
the desired file directly to the client.)The format ofX_REDIRECT_MAPis a comma-separated list of
“/prefix/=/base_uri/” mappings.  As a short-cut, “/prefix/”
(with no equals sign) means the same as “/prefix/=/prefix/” (anX-Accel-Redirectheader containing the original file name will be
sent for matching paths.)  The entries in the map are checked in
order; the first matching entry wins.  If none of the entries match,
then the middleware will pass the response on up the chain unmolested.Warning:
The parsing ofX_REDIRECT_MAPis rather simplistic.  Things will
probably not go well if you try to include commas, equal signs,
or any non-ASCII characters in either theprefixorbase_uri.
Also, do not include any extraneous white space inX_REDIRECT_MAP.AuthorThis package was written byJeff Dairiki.Changes0.1.1 (2016-10-28)(Release 0.1 does not exist.  It had corrupt rST in its PKG-INFO
causing the README on PyPI not to be formatted.)No changes (other than test configuration) from 0.1a3.  This package
has been used in production for years now — might as well drop the
“alpha” designation.TestingDrop support for python 3.2.  Now tested under pythons 2.6, 2.7,
3.3, 3.4, 3.5, pypy and pypy3.0.1a3 (2015-05-08)Brown bag.  The previous release was unusable do to this bug:Make sure not to include unicode strings in the headers passed tostart_response.0.1a2 (2015-05-08)Py3k, pypy compatibility: the tests now run under python 2.6, 2.7,
3.2, 3.3, 3.4, pypy and pypy3.0.1a1 (2013-12-11)Initial Release