使用x-accel-redirect发送文件的wsgi中间件

xsendfile_middleware的Python项目详细描述


支持x-accel-redirect的wsgi中间件build status

说明

Nginx有一种机制,通过返回X-Accel-Redirect头, 一个web应用可能会说服nginx直接为静态文件提供服务。 PEP 333定义了应用服务器(或中间件)的机制 可以通过提供^{tt1}直接提供文件$ 在environ中。 这个包提供了一个wsgi中间件来利用这些 两种机制。

尽管包的名称是什么,但目前这个中间件只起作用 使用nginx的X-Accel-Redirect机制。(可能是 简单地概括它使其工作X-Sendfile,但是 现在,我不需要了。)

下载源代码

源存储库位于github。 你可以在那里提交错误报告和请求。

也可以通过PyPI访问。

使用量

中间件是xsendfile_middleware.xsendfile_middleware。 您可以直接调用它,例如:

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)

还提供了一个合适的入口点,以便您可以实例化 来自PasteDeploy.ini文件的中间件,例如:

[app:myapp]
use = egg:MyEgg

[pipeline:main]
pipeline = egg:xsendfile_middleware myapp

配置

x_重定向映射

一旦你有了中间件,唯一需要的配置 (或可能)是在wsgi环境中设置一个X_REDIRECT_MAP键。 你怎么做取决于你是怎么安排的。如果你是 例如,在uwsgi下运行应用程序,然后可以使用 如nginxconfig中的以下内容:

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/;
}

在此配置中,如果您的应用程序返回 中间件提供的文件包装器的实例,以及 包装器将文件包装在e.g./path/to/files/dir/file.data, 中间件将设置X-Accel-Redirect: /_redir_/dir/file.data 响应中的头。(希望这会导致nginx发送 直接发送给客户所需的文件。)

X_REDIRECT_MAP的格式是以逗号分隔的 “/prefix/=/base_uri/”映射。作为捷径,“/prefix/” (不带等号)与“/prefix/=/prefix/”的意思相同。 X-Accel-Redirect包含原始文件名的头将是 发送匹配路径。)将签入映射中的条目 顺序;第一个匹配的条目获胜。如果没有匹配的条目, 然后,中间件将在链的上游不受干扰地传递响应。

警告X_REDIRECT_MAP的解析相当简单。事情会的 如果你试着用逗号,等号, 或前缀base_uri中的任何非ascii字符。 另外,不要在X_REDIRECT_MAP中包含任何多余的空白。

作者

这个包是由Jeff Dairiki编写的。

更改

0.1.1(2016-10-28)

>(版本0.1不存在。它的pkg-info中有损坏的rst 使pypi上的自述文件不被格式化。)

从0.1a3开始无任何更改(测试配置除外)。这个包裹 已经在生产中使用了很多年了-还是放弃 “阿尔法”名称。

测试
  • 放弃对Python3.2的支持。现在在Python2.6,2.7下测试, 3.3、3.4、3.5、pypy和pypy3。

0.1a3(2015-05-08)

棕色的袋子。上一版本不可用,请执行以下操作:

  • 确保传递给的头中不包含Unicode字符串 start_response

0.1a2(2015-05-08)

  • py3k,pypy兼容性:测试现在在python 2.6,2.7下运行, 3.2、3.3、3.4、pypy和pypy3。

0.1a1(2013-12-11)

初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在列表视图中插入调用按钮   java公开类别ID   java在使用JSch通过jumphost连接到远程主机时“拒绝主机密钥”   java连接。在Hibernate中为每个select查询调用getMetaData()   java如何在安卓 studio的文本监听器上突出显示过滤列表视图中的文本?   安卓应用程序、进程和Java虚拟机之间的对应关系是什么?   java如何使用Android在应用程序标签中添加这两个名称   java框架来衡量花费的时间和内存   java自动将字符串缩放到屏幕的宽度   在eclipse导出中创建jar文件时发生java错误   java Spring Web应用程序已初始化两次   java将数据插入数据库“表产品没有名为accFor(代码1)的列”   运行时如何执行。通过java中的Jruby使用带参数的rb   java Android:将视图从父视图转移到另一个视图   java如何在具有依赖关系的nexus中部署springboot maven项目   Google Java style:checkstyle文件与Visual Studio代码的相应编辑器配置文件   java以exif格式从jpeg或png文件中提取元数据