首页 文章

使用mod_wsgi和Django提供静态文件

提问于
浏览
10

我有一个使用mod_python的django应用程序,相当典型的配置,除了媒体文件由文档根目录中的(我知道,不推荐)'media'目录提供服务 . 我想测试并使用mod_wsgi进行部署,但我无法弄清楚如何创建简单的服务静态文件 . mod_python允许使用Apache指令,如:

<Location '/'>
    SetHandler MyApplication.xyz.....
</Location>

<Location '/media'>
    SetHandler None
</Location>

django文档似乎指向上面的第二个块作为为mod_wsgi制作类似异常的正确方法,但在我的测试中,根目录下的所有内容仍然被发送到wsgi应用程序 . 是否有一个很好的方法用mod_wsgi设置一个静态媒体目录,或者我是否因为技术原因而故意不支持?欢迎指出完全不同的方法的答案 .

2 回答

  • 13

    mod_wsgi文档解释了如何设置静态文件,这些文件出现在安装了WSGI应用程序的URL下面 . 看到:

    http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files

    请注意,使用WSGIScriptAlias指令安装WSGI应用程序时不需要“Options ExecCGI” . 只有在使用AddHandler将应用程序作为资源挂载时,才需要“ExecCGI”选项 .

  • 17

    我在同一台服务器上运行了十几个Django站点,这就是我配置媒体URL的方法 .

    每个VirtualHost都具有以下配置:

    Alias /media /path/to/media/
    <Directory /path/to/media>
        Include /etc/apache2/vhosts.d/media.include
    </Directory>
    

    这样我就可以在一个文件中对媒体处理进行任何更改 .

    然后,我的media.include文件如下所示:

    Order allow,deny
    Allow from all
    SetHandler None
    FileETag none
    Options FollowSymLinks
    
    <IfModule mod_expires.c>
        ExpiresActive On
        ExpiresByType image/gif "access plus 30 days"
        ExpiresByType image/jpg "access plus 30 days"
        ExpiresByType image/png "access plus 30 days"
        ExpiresByType image/jpeg "access plus 30 days"
        ExpiresByType text/css "access plus 30 days"
        ExpiresByType application/x-javascript "modification plus 2 years"
    </IfModule>
    
    <IfModule mod_headers.c>
        Header append Vary Accept-Encoding
    </IfModule>
    
    AddOutputFilterByType DEFLATE text/html text/css text/plain
    

    这对我来说非常有效,并从YSlow获得 A 等级(另见Jeff Atwood on YSlow) .

    另请注意,对于根目录,我使用以下配置:

    WSGIScriptAlias / /path/to/app.wsgi
    <Directory /path/to>
        Options +ExecCGI
        Allow from all
    </Directory>
    

    ...应该是 after 配置文件中的Alias / media(因为Apache按顺序查看别名)

相关问题