2010-01-16 58 views
6

我搜索了很多,但我仍然有与我的django网站的静态文件(CSS,图像,...)的问题。静态文件与Django中的mod_wsgi

我使用的mod_wsgi和Apache上的archlinux 64位

我在我的http.conf加入它:

LoadModule wsgi_module modules/mod_wsgi.so 

<VirtualHost *:80> 
    WSGIDaemonProcess mart.localhost user=mart group=users processes=2 threads=25 
    WSGIProcessGroup mart.localhost 
    LogLevel debug 

    Alias /media /home/mart/programmation/python/django/martfiles/media/ 
    <Directory /home/mart/programmation/python/django/martfiles/> 
     Order allow,deny 
     Allow from all 
    </Directory> 

    WSGIScriptAlias//srv/http/wsgi-scripts/django.wsgi 
</VirtualHost> 

我试图用django.wsgi在我的主文件夹,但它不工作(permission denied to access /)(奇怪的是它的工作原理,如果我用给here测试脚本)

所有的目录和内容(阿帕奇文件夹,WSGI脚本,martfiles)与本集团devuse许可775 root:devusers RS包括我的用户,HTTP和根

在我的模板base.html文件,我称之为CSS是这样的:

<html> <head> 
    <link rel="stylesheet" href="/media/css/style.css" /> 

和/var/log/http/error.log

错误
[Sat Jan 16 13:22:21 2010] [error] [client 127.0.0.1] (13)Permission denied: access to /media/css/style.css denied, referer: http://localhost/ 
[Sat Jan 16 13:22:21 2010] [info] mod_wsgi (pid=14783): Attach interpreter '' 

/etc/httpd/conf/http.conf

/srv/http/wsgi-script/django.wsgi

/home/.../martfiles/settings.py

谢谢


编辑:我准确的,我的Django的网站工作正常(会议除外,但我不认为这是相关的),所以我不知道它是关系到django.wsgi文件(也许我错了),但肯定的是,我应该可以,如果我改线Alias /media /home/mart/programmation/python/django/martfiles/media/使用django.wsgi从Apache文件夹

外侧Alias /media /srv/http/media/并给出正确的权限,有用。但我不希望(也不应该)把我的所有媒体放在apache文件夹中

回答

7

仅包含目录'/ home/mart/programmation/python/django/martfiles/media'是不够的静态文件是可读和可搜索的。 Apache运行的用户必须具有读取和潜在的搜索访问权限,将其所有父目录备份到根目录。由于许多系统上的主目录是'rwx ------',因此不管Apache配置中的Deny/Allow指令如何,这都会拒绝Apache访问。

建议您将Django项目和静态文件放置在您家庭帐户的某处,并根据需要放宽文件系统权限。

+0

这就是为什么我给了775权限包含我的apache用户(HTTP)的组devusers。哪里和哪个许可?我来试试 – 2010-01-17 06:32:29

+0

我把我的媒体在/ usr /共享/ Django的只有root权限和它的作品!非常感谢 – 2010-01-17 10:53:54

+2

+1修复我的错误。将家庭权限设置为755的安全含义是什么? – g33kz0r 2010-03-27 20:21:06

0

这似乎是我的应用程序,除了我没有在http.conf中看到NameVirtualHost指令如果你想设置虚拟服务器,这是必需的。您可以尝试在虚拟主机定义之前添加NameVirtualHost *:80

+0

如果我这样做,我已经有了一个更多的错误在error.log中:“[错误]虚拟主机*:80 - 混合*用了NameVirtualHost地址端口和非*端口不支持,有不确定的结果出发' – 2010-01-17 06:35:32

+0

对不起,它应该是'NameVirtualHost *:80'。更新了答案。 – abhaga 2010-01-17 08:16:10

3

django.wsgi文件,

WSGIScriptAlias//srv/http/wsgi-scripts/django.wsgi 

<Directory>之外定义为:

<Directory /home/mart/programmation/python/django/martfiles/> 

尝试增加这httpd.conf

<Directory /srv/http/wsgi-scripts/> 
    Order allow,deny 
    Allow from all 
</Directory> 

或者,把你的django.wsgi文件的某处在之内。这应该工作。

编辑:好的,这里是一个例子httpd。CONF正在工作的生产机器上:

<VirtualHost *:80> 
    # Admin email, Server Name (domain name) and any aliases 
    ServerAdmin [email protected] 
    ServerName www.example.de 

    DocumentRoot /home/example/testing/parts/public 

    Alias /media /home/example/testing/parts/public/media 

    # WSGI Settings 
    WSGIDaemonProcess example user=example group=example threads=25 
    WSGIProcessGroup example 
    WSGIScriptAlias//home/example/testing/parts/public/django.wsgi 

    <Directory "/home/example/testing/parts/public"> 
     # Allow Apache to follow links 
     Options FollowSymLinks 
     # Turn on the ability to use .htaccess files 
     AllowOverride All 
     # Controls who can get stuff from this directory 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

因此,如果您dhango.wsgi是在一个地方定义设置由<Directory>指令的访问,你还sudo su httpd如果这是你的系统上运行的Apache用户可以,只是尝试阅读css文件,看看阿帕奇是否可以真正访问它们...

+0

如果我把django.wsgi放在martfiles中,我有一个错误403访问被拒绝([error] [client 127.0.0.1](13)Permission denied:access to/denied)。如果我添加<目录/ SRV ...它不会改变任何东西([错误] [客户端127.0.0.1](13)权限被拒绝:访问/media/css/style.css否认,引用者:HTTP:/ /本地主机/)。 – 2010-01-17 06:30:07

+0

尝试在''部分中简单地添加'DocumentRoot/home/mart/programmation/python/django/martfiles'。 – 2010-01-17 10:48:18

+0

把.htaccess文件放在哪里? – sharafjaffri 2013-11-05 14:11:15