configurationApache以使用WSGI处理子path

我试图设置Apache,Django和mod_xsendfile,以允许我使用Django身份validation来控制对某些文件的访问,同时仍然使用Apache发送实际的文件数据。

我有这个configuration的问题:

# Some files must be publicly available without the Django auth check. # When I comment this out, public media is not accessible but the WSGI script for # /media/attachment DOES get called. # So I think I need to somehow exclude /media/attachment from the effect of this Alias Alias /media/ /var/www/vhosts/domain.com/subdomains/project/httpdocs/media/ # This <Location> block disables everything (Forbidden) regardless of the WSGI stuff # #<Location /media/attachments> # Deny from all #</Location> WSGIScriptAlias / /var/www/vhosts/cdomain.com/subdomains/project/httpdocs/web/apache/django.wsgi WSGIScriptAlias /media/attachments /var/www/vhosts/domain.com/subdomains/project/httpdocs/web/apache/django.wsgi XSendFile On 

我该如何告诉Apache通过WSGI脚本将请求路由到/ media / attachments,并直接为/ media提供服务?

Alias指令优先于WSGIScriptAlias,所以不能在Alias指令指定的URL下挂载WSGI应用程序。

就像这样,由于多个WSGIScriptAlias指令,每个进程中都会启动Django的多个实例,除非您已经使用WSGIApplicationGroup指令强制将它们委派给进程中的同一个Python子解释器。

至于解决scheme,由于你使用的布局,做你想做的事有点棘手。 我有一个想法,但是需要先testing一下。


更新1

第一种可能性是,如果您在Django使用的'css','img'和'js'的传统子目录中包含所有内容,而不是上面的Alias指令,请使用:

 AliasMatch ^/(css|img|js)(/.*)$ /var/www/vhosts/domain.com/subdomains/project/httpdocs/media/$1$2 

并删除:

 WSGIScriptAlias /media/attachments /var/www/vhosts/domain.com/subdomains/project/httpdocs/web/apache/django.wsgi 

这意味着只有这些子目录中的静态文件才会匹配Alias指令并直接提供。


更新2

另一个我必须testing的选项是不使用WSGIScriptAlias,而是使用Alias指令。 这将如下完成:

 Alias /media/attachments/ /var/www/vhosts/domain.com/subdomains/project/httpdocs/web/apache/django.wsgi Alias /media/ /usr/local/django/example/media/ Alias / /var/www/vhosts/domain.com/subdomains/project/httpdocs/web/apache/django.wsgi <Directory /var/www/vhosts/domain.com/subdomains/project/httpdocs/web/apache> WSGIApplicationGroup %{GLOBAL} AddHandler wsgi-script .wsgi Options ExecCGI Order allow,deny Allow from all </Directory> 

因为单独使用Alias指令,所有评估的优先级都相同。 你只需要确保更深层嵌套的URL先来。

我们使用AddHandler将.wsgi文件映射为WSGI脚本文件,并设置ExecCGI选项,以便mod_wsgi将允许将其用作WSGI脚本文件,而不是使用WSGIScriptAlias。

我们设置WSGIApplicationGroup只是为了确保在每个进程中只创build一个Django实例。 %{GLOBAL}的值使得它使用主要的Python解释器。

所以,两个select取决于你的幻想。