Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用mod_wsgi和Django提供静态文件_Python_Django_Mod Wsgi_Mod Python - Fatal编程技术网

Python 使用mod_wsgi和Django提供静态文件

Python 使用mod_wsgi和Django提供静态文件,python,django,mod-wsgi,mod-python,Python,Django,Mod Wsgi,Mod Python,我有一个使用mod_python的django应用程序,这是一个相当典型的配置,除了媒体文件由文档根目录中的一个(我知道,不推荐使用)“media”目录提供之外。我想使用mod_wsgi进行测试和部署,但我不知道如何创建一些简单的东西来服务静态文件。mod_python允许使用Apache指令,如: <Location '/'> SetHandler MyApplication.xyz..... </Location> <Location '/media'

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

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

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

SetHandler MyApplication.xyz。。。。。
SetHandler无

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

我在同一台服务器上运行了十几个Django站点,下面是我如何配置媒体URL的

每个VirtualHost都有以下配置:

Alias /media /path/to/media/
<Directory /path/to/media>
    Include /etc/apache2/vhosts.d/media.include
</Directory>
WSGIScriptAlias / /path/to/app.wsgi
<Directory /path/to>
    Options +ExecCGI
    Allow from all
</Directory>
Alias/media/path/to/media/
Include/etc/apache2/vhosts.d/media.Include
这样,我可以在一个文件中对介质处理进行任何更改

然后,我的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
命令允许,拒绝
通融
SetHandler无
FileTag无
选项如下符号链接
过期于
ExpiresByType image/gif“访问加30天”
ExpiresByType图像/jpg“访问加30天”
ExpiresByType image/png“访问加30天”
过期按类型图像/jpeg“访问加30天”
ExpiresByType文本/css“访问加30天”
ExpiresByType应用程序/x-javascript“修改加2年”
头附加变量接受编码
AddOutputFilterByType DEFLATE text/html text/css text/plain
这对我来说非常有效,并且从中获得了A分数(另请参见)

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

Alias /media /path/to/media/
<Directory /path/to/media>
    Include /etc/apache2/vhosts.d/media.include
</Directory>
WSGIScriptAlias / /path/to/app.wsgi
<Directory /path/to>
    Options +ExecCGI
    Allow from all
</Directory>
WSGIScriptAlias//path/to/app.wsgi
选项+执行CGI
通融

。。。在配置文件中的别名/介质之后应该是(因为Apache按顺序查看别名)

mod_wsgi文档解释了如何设置静态文件,这些文件显示在wsgi应用程序安装位置下方的URL上。见:


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

Graham Dumpleton!感谢mod_wsgi!实际上,我认为顺序本来就是问题所在,我没有使用cgi指令。你的模块让我能够做很多事情,自从提出这个问题以来,我已经养成了一个mod_wsgi习惯。非常感谢你提供的文档。很久以来我见过的最好的医生。希望更多的人能读到它们!!!!对于你的根目录:它是超级皮带和支架,但从安全角度来看,我会在你的根目录中放一个部分,并将你的“允许来自所有人”移到其中。