【问题标题】:mod_wsgi and static pages (no django)mod_wsgi 和静态页面(没有 django)
【发布时间】:2012-05-26 08:40:28
【问题描述】:

在页面上:http://code.google.com/p/modwsgi/wiki/FileWrapperExtension,Graham Dumpleton 推荐以下内容:

“但是请注意,为了获得最佳性能,静态文件应该 始终由 Web 服务器提供服务。在 mod_wsgi 的情况下,这意味着 由 Apache 本身而不是 mod_wsgi 或 WSGI 应用程序。”

我想预先构建大量静态页面,然后有一个 python 程序(在 apache/mod_wsgi 3.3/python3.1 下运行,守护进程模式,不涉及 django)决定为每个页面提供哪些服务用户。例如,我希望 python 程序决定这个人需要“12345.html”并让它告诉 Apache,“请向这个人提供静态文件 '12345.html'”,而不是必须使用 python打开文件,读取内容,转成python字符串,以“[output]”的形式返回给mod_wsgi。

这可能吗?如果有,怎么做?

如果没有,最好的方法是什么?

【问题讨论】:

    标签: apache mod-wsgi


    【解决方案1】:

    有很多方法可以做到这一点。

    1. 由 mod_xsendfile 和 Apache 实现的 X-Sendfile。
    2. Lo​​cation/mod_rewrite 技巧使用 mod_wsgi 守护程序模式。
    3. X-Accel-Redirect 如果也使用 nginx 作为 Apache 的前端。

    阅读 (1) 和 (3) 作为更广泛使用的选项。


    更新 (2) 的说明。

    让 WSGI 应用程序返回一个 200 响应,其中包含空的正文和“Location”响应标头,其中包含指向同一 Apache 服务器上托管的本地资源的 URL 路径,并且当使用守护程序模式时 mod_wsgi 将触发到该 URL 的内部重定向。

    因此,如果您的 Apache 有:

    Alias /generated-files/ /some/path/
    <Directory /some/path>
    Order allow, deny
    Allow from all
    </Directory>
    

    然后在文件系统中将您的文件生成为 /some/path/foo.txt,然后让“Location”响应标头的值为“/generated-files/foo.txt”,它将被提供。

    请注意,“/generated-files”下的任何内容都可以公开访问。如果您不希望它是私有的,因此只能通过生成“Location”响应标头的特定请求返回,则需要添加 mod_rewrite 魔法来阻止对该 URL 的访问,但内部生成的子请求除外。记忆中的内容应该是这样的:

    RewriteCond %{IS_SUBREQ} false
    RewriteRule ^/generated-files/ - [F]
    

    【讨论】:

    • 关于 1:我无权访问此共享服务器上的 mod_xsendfile,但即使我这样做了,这似乎是在实现大型二进制文件的下载服务器,而不是用于返回 Web页面。
    • [对不起,我按回车并提交了]关于1:我无权访问此共享服务器上的mod_xsendfile,但即使我有,这似乎是在实现一个下载服务器大型二进制文件,不用于返回网页。对于 3:我只是在守护进程模式下使用您对基本 apache+mod_wsgi 的推荐,这是大多数人需要的。所以,#2 似乎是答案,但我不确定我是否理解说明:“技巧”。如果我知道它们是什么,这些技巧会比仅仅读取整个文件、将其变成一个长字符串并将其作为 [输出] 返回更快吗?
    • 您仍然可以执行 (1)。将其用于预生成的网页内容没有任何限制。至于(2),我会在为您整理好详细信息后更新答案。
    • 谢谢,格雷厄姆。如果这比将整个文件读入字符串然后“返回[输出]”要快得多,那么它将支持预生成响应的“二级缓存”形式。
    猜你喜欢
    • 2019-07-11
    • 2010-11-10
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2013-12-23
    • 2016-11-16
    相关资源
    最近更新 更多