10

我有一个使用 mod_python 的 django 应用程序,这是相当典型的配置,除了媒体文件由文档根目录中的(我知道,不推荐)“媒体”目录提供服务。我想测试并可能使用 mod_wsgi 进行部署,但我不知道如何创建简单的东西来提供静态文件。mod_python 允许使用 Apache 指令,例如:

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

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

django 文档似乎指向上面的第二个块作为对 mod_wsgi 进行类似异常的正确方法,但在我的测试中,根目录下的所有内容仍被发送到 wsgi 应用程序。有没有一种使用 mod_wsgi 设置静态媒体目录的好方法,或者由于令人信服的技术原因,我试图做的事情是故意不受支持的?欢迎提出完全不同方法的答案。

4

2 回答 2

18

我在同一台服务器上运行了十几个 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级(另请参阅YSlow 上的 Jeff Atwood)。

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

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

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

于 2009-04-09T03:42:00.727 回答
13

mod_wsgi 文档解释了如何设置静态文件,这些静态文件出现在挂载 WSGI 应用程序的 URL 下方。看:

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

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

于 2009-06-24T11:50:44.470 回答