2010-01-16 2 views
6

Ho cercato molto ma ho ancora un problema con i file statici (css, image, ...) con il mio sito django.file statico con mod_wsgi in django

sto utilizzando mod_wsgi con Apache su 64bits archlinux

ho aggiunto nella mia 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> 

Ho cercato di usare il django.wsgi nella mia cartella home, ma non funziona (permission denied to access /) (stranamente funziona se uso lo script di test dato here)

tutte le directory e contenuti (cartella apache, WSGI-script, martfiles) avere il permesso 775 root:devusers con il gruppo devuse rs tra cui il mio utente, http e radice

nel mio modello base.html, che io chiamo il css in questo modo:

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

e l'errore in /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

grazie


Edit: Ho preciso che il mio sito web Django funziona bene (eccetto le sessioni, ma non credo che è legato) e quindi non sono sicuro che sia legato al file di django.wsgi (forse mi sbaglio), ma quello che è sicuro è che dovrei essere in grado di utilizzare il django.wsgi dal di fuori della cartella apache

se cambio la linea Alias /media /home/mart/programmation/python/django/martfiles/media/ con Alias /media /srv/http/media/ e dà i permessi giusti, Funziona. Ma non voglio (e non dovrei) mettere tutti i miei media nella cartella apache

risposta

7

Non è sufficiente solo per la directory '/ home/mart/program/python/django/martfiles/media' contenente file statici per essere leggibili e ricercabili. L'utente che Apache esegue come deve avere letto e potenzialmente cercare l'accesso, a tutte le directory madri di esso backup nella directory principale. Poiché le directory home su molti sistemi sono 'rwx ------', ciò negherebbe l'accesso a Apache indipendentemente dalle direttive Nega/Permetti nella configurazione di Apache.

Suggerisco di posizionare il progetto Django e file statici al di fuori del proprio account di casa da qualche parte e rilassare le autorizzazioni del file system secondo necessità.

+0

è per questo che ho dato il permesso 775 con i devusers di gruppo che contengono il mio utente apache (http). Dove e quale permesso? Lo proverò –

+0

Ho messo i miei media in/usr/share/django con i soli privilegi di root e funziona! Grazie mille –

+2

+1 per aver corretto il mio errore. Quali sono le implicazioni sulla sicurezza di impostare le autorizzazioni di casa su 755? – g33kz0r

0

Questo sembra essere quello che ho per la mia applicazione eccetto che non ho visto la direttiva NameVirtualHost nel file http.conf che è richiesto se si desidera configurare i server virtuali. Puoi provare ad aggiungere NameVirtualHost *:80 prima della definizione dell'host virtuale.

+0

se lo faccio ho un errore in più nel file error.log: '[errore] VirtualHost *: 80 - il mix di porte * e non * con un indirizzo NameVirtualHost non è supportato, procedendo con risultati non definiti ' –

+0

Spiacente, dovrebbe essere stato 'NameVirtualHost *: 80'. Aggiornata la risposta. – abhaga

3

Il file django.wsgi,

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

è al di fuori del <Directory> definito da:

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

Prova ad aggiungere questo per httpd.conf:

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

Oppure, mettere il file django.wsgi da qualche parte all'interno di /home/mart/programmation/python/django/martfiles/. Questo dovrebbe funzionare

MODIFICA: va bene, ecco un esempio httpd.conf che sta lavorando su una macchina di produzione:

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

Quindi, se il vostro dhango.wsgi è definito in un luogo impostato come accessibili da una direttiva <Directory>, si potrebbe anche sudo su httpd se questo è l'utente che esegue Apache sul vostro sistema , e prova semplicemente a leggere i file css, per vedere se apache può davvero accedervi ...

+0

se metto django.wsgi in martfiles, ho un errore 403 accesso negato ([errore] [client 127.0.0.1] (13) Autorizzazione negata: accesso a/negato). se aggiungo

+0

Provate semplicemente ad aggiungere 'DocumentRoot/home/mart/program/python/django/martfiles' nella sezione' '. –

+0

Dove mettere il file .htaccess? – sharafjaffri