2010-01-16 24 views
6

Çok arandım ama django web sitemde statik dosyalar (css, resim, ...) ile ilgili bir sorunum var.django içinde mod_wsgi ile statik dosya

benim http.conf bunu ekledik

Arch Linux 64bits üzerinde apache ile mod_wsgi kullanıyorum:

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> 

benim ev klasöründe django.wsgi kullanmaya çalıştı ama

tüm dizinleri ve içeriği (apache klasöründe WSGI-senaryo, martfiles) (permission denied to access /) çalışmıyor (ı here verilen test script kullanıyorsanız garip çalışır) grubu devuse ile iznine 775 root:devusers var

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

ve /var/log/http/error.log

hata: my şablon base.html benim kullanıcı, http ve kökü

dahil rs, CSS bu şekilde aramak

[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

Benim Django web ince çalıştığını ben kesin (oturumların dışında ama ilgili sanmıyorum) bu yüzden ile ilgili olduğunu emin değilim:

size


düzenlemeyi teşekkür django.wsgi dosya (belki de yanılıyorum) ama ne emin ben çizgiyi Alias /media /home/mart/programmation/python/django/martfiles/media/ değiştirirseniz Alias /media /srv/http/media/ ile apache klasöründe

dışından django.wsgi kullanabilmek için gerektiğidir ve sağ izinleri verir, işe yarıyor. Ama istemiyorum (ve olmamalıdır) apache klasöründe tüm medyayı koymak

cevap

7

Sadece '/ home/mart/programmation/python/django/martfiles/media' okunabilir ve aranabilir statik dosyalar. Apache'nin çalıştırdığı kullanıcı, tüm ana dizinleri için kök dizinine kadar okuma ve potansiyel olarak arama erişimine sahip olmalıdır. Birçok sistemdeki ev dizinleri 'rwx ------' olduğundan, bu Apache yapılandırmasında Reddetme/İzin Verme yönergelerine bakılmaksızın Apache erişimini reddeder.

Django projesini ve statik dosyalarını ev hesabınızın dışında bir yere yerleştirmenizi ve dosya sistemi izinlerini gerektiği gibi gevşetmenizi öner.

+0

bu yüzden apache kullanıcımı (http) içeren grup devreleriyle 775 izni verdim. Nerede ve hangi izin? Bunu deneyeceğim –

+0

/Rozetleri/rootları/django'ları sadece root ayrıcalıklarına yerleştirdim ve işe yarıyor! Hatanımı düzeltmek için çok –

+2

+1'e teşekkürler. Ev izinlerini 755 olarak ayarlamanın güvenlik sonuçları nelerdir? – g33kz0r

0

Bu ben http.conf içinde NameVirtualHost yönergesine görmediğini haricinde Uygulamam için ne gibi görünüyor sanal sunucuları kurmak istiyorsanız gereklidir. Sanal ana bilgisayar tanımından önce NameVirtualHost *:80 eklemeyi deneyebilirsiniz.

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

deneyin bu ekleme httpd.conf için:

+0

Bunu yaparsam error.log dosyasında bir hata daha var: '[error] VirtualHost *: 80 - NameVirtualHost adresiyle * bağlantı noktaları ve * olmayan bağlantı noktaları desteklenmiyor, tanımlanmamış sonuçlarla devam ediyor ' –

+0

Üzgünüm,' NameVirtualHost *: 80' olmalıydı. Cevabı güncellendi. – abhaga

3

Sizin django.wsgi dosya,

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

dışında <Directory> arasında tanımlanan olduğu

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

Veya bir yerde senin django.wsgi dosyayı koymakiçinde. Bu işe yaramalı.

DÜZENLEME: tamam, işte bir örnek httpd.Bir üretim makine üzerinde çalışıyor conf: En dhango.wsgi bir yerde tanımlanması durumunda

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

Yani, bir <Directory> yönergesi tarafından erişilebilir set, ayrıca sudo su httpd o sisteminizde apache çalıştıran kullanıcı eğer could ve apache'nin bunlara gerçekten erişip erişemeyeceğini görmek için css dosyalarını okumayı deneyin ...

+0

martfiles içinde django.wsgi koyduysanız, 403 erişim engellendi bir hata yaşıyorum ([error] [client 127.0.0.1] (13) İzin reddedildi: erişim/reddedildi).

+0

"DocumentRoot/home/mart/programmation/python/django/martfiles" öğesini 'bölümüne eklemeyi deneyin. –

+0

.htaccess dosyası nereye yerleştirilir? – sharafjaffri

İlgili konular