2010-01-16 8 views
6

He buscado mucho pero todavía tengo un problema con los archivos estáticos (css, image, ...) con mi sitio web django.archivo estático con mod_wsgi en django

estoy usando mod_wsgi con apache en 64bits archlinux

que he añadido en mi 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> 

He intentado utilizar el django.wsgi en mi carpeta de inicio pero no funciona (permission denied to access /) (extrañamente funciona si uso el script de prueba dada here)

todos los directorios y de contenido (carpeta Apache, wsgi-escritura, martfiles) tener el permiso 775 root:devusers con el grupo devuse rs incluyendo mi usuario, http y raíz

en mi plantilla base.html, me llaman el css de esta manera:

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

y el error en /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

gracias


edición: Yo precisa que mi página web Django está trabajando muy bien (excepto las sesiones, pero no creo que esté relacionado) así que no estoy seguro de que está relacionado con la django.wsgi archivo (tal vez me equivoque), pero lo que es seguro es que yo debería ser capaz de utilizar el django.wsgi desde fuera de la carpeta Apache

si cambio de la línea Alias /media /home/mart/programmation/python/django/martfiles/media/ con Alias /media /srv/http/media/ y da los permisos correctos, funciona. Pero no quiero (y no debería) poner todos mis medios en la carpeta apache

Respuesta

7

No es suficiente solo para el directorio '/ home/mart/programmation/python/django/martfiles/media' que contiene archivos estáticos para ser legibles y buscables. El usuario que Apache ejecuta como debe haber leído y potencialmente buscar acceso, a todos los directorios principales de la misma copia de seguridad en el directorio raíz. Como los directorios de inicio en muchos sistemas son 'rwx ------' esto denegaría el acceso de Apache independientemente de las directivas Denegar/Permitir en la configuración de Apache.

Le sugerimos que coloque el proyecto Django y los archivos estáticos fuera de la cuenta de su hogar en alguna parte y relaje los permisos del sistema de archivos según sea necesario.

+0

es por eso que dí el permiso 775 con los usuarios del grupo que contienen mi usuario de apache (http). ¿Dónde y qué permiso? Lo intentaré –

+0

Puse mis medios en/usr/share/django con solo privilegios de root y funciona! Muchas gracias –

+2

+1 por arreglar mi error. ¿Cuáles son las implicaciones de seguridad de configurar los permisos de casa a 755? – g33kz0r

0

Esto parece ser lo que tengo para mi aplicación, excepto que no vi la directiva NameVirtualHost en el http.conf que se requiere si desea configurar servidores virtuales. Puede intentar agregar NameVirtualHost *:80 antes de la definición del host virtual.

+0

si hago eso, tengo un error más en el error.log: '[error] VirtualHost *: 80 - mezclar * puertos y no * puertos con una dirección NameVirtualHost no es compatible, procediendo con resultados indefinidos ' –

+0

Lo sentimos, debería haber sido 'NameVirtualHost *: 80'. Actualizado la respuesta. – abhaga

3

Su archivo django.wsgi,

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

está fuera de la <Directory> definido por:

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

Trate de añadir esto a httpd.conf:

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

O, dicho de su archivo django.wsgi alguna parte dentro de /home/mart/programmation/python/django/martfiles/. Eso debería funcionar.

EDIT: bien, aquí hay un ejemplo de httpd.conf que está trabajando en una máquina de producción:

<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> 

tanto, si su dhango.wsgi se define en un lugar establecido como accesible por una directiva <Directory>, usted podría también sudo su httpd si ese es el usuario que se ejecuta Apache en su sistema , y simplemente intente leer los archivos css, para ver si apache realmente puede acceder a ellos ...

+0

si pongo django.wsgi en martfiles, tengo un error 403 acceso denegado ([error] [cliente 127.0.0.1] (13) Permiso denegado: acceso a/denegado). si agrego el

+0

Intenta simplemente agregar 'DocumentRoot/home/mart/programmation/python/django/martfiles' dentro de la sección' '. –

+0

¿Dónde poner el archivo .htaccess? – sharafjaffri

Cuestiones relacionadas