我有一个使用 mod_python 的 Django 应用程序,这是相当典型的配置,除了媒体文件由文档根目录中的(我知道,不推荐)“媒体”目录提供服务。我想测试并可能使用 mod_wsgi 进行部署,但我不知道如何创建简单的东西来提供静态文件。 mod_python 允许使用 Apache 指令,例如:
<Location '/'>
SetHandler MyApplication.xyz.....
</Location>
<Location '/media'>
SetHandler None
</Location>
django 文档似乎指出上面的第二个 block 是为 mod_wsgi 设置类似异常的正确方法,但在我的测试中,根目录下的所有内容仍被发送到 wsgi 应用程序。是否有使用 mod_wsgi 设置静态媒体目录的好方法,或者我正在尝试做的事情是否出于令人信服的技术原因而故意不受支持?欢迎指向完全不同方法的答案。
最佳答案
我在同一台服务器上运行了十几个 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>
... 这应该在配置文件中的别名/media 之后(因为 Apache 按顺序查看别名)
关于python - 使用 mod_wsgi 和 Django 提供静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/732190/