статический файл с mod_wsgi в django - PullRequest
6 голосов
/ 16 января 2010

Я много искал, но у меня все еще есть проблема со статическими файлами (css, image, ...) на моем сайте django.

Я использую mod_wsgi с apache на archlinux 64bit

Я добавил его в свой 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 /) (странно, что он работает, если я использую тестовый скрипт, указанный здесь )

все каталоги и содержимое (папка apache, wsgi-script, martfiles) имеют разрешение 775 root:devusers с группами разработчиков, включая мой пользователь, http и root

в моем шаблоне 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 ''

/ и т.д. / HTTPD / CONF / http.conf

/ SRV / HTTP / WSGI-скрипт / django.wsgi

/ дома /.../ martfiles / settings.py

спасибо


edit : Я уточняю, что мой веб-сайт django работает нормально (кроме сессий, но я не думаю, что он связан), поэтому я не уверен, что он связан с файлом django.wsgi (возможно, я я ошибаюсь) но я уверен, что я могу использовать django.wsgi вне папки apache

, если я изменю строку Alias /media /home/mart/programmation/python/django/martfiles/media/ на Alias /media /srv/http/media/ и предоставлю необходимые разрешения, это сработает. Но я не хочу (и не должен) помещать все мои медиафайлы в папку apache

Ответы [ 3 ]

7 голосов
/ 17 января 2010

Недостаточно, чтобы только каталог '/ home / mart / programmation / python / django / martfiles / media', содержащий статические файлы, был доступен для чтения и поиска. Пользователь, с которым работает Apache, должен иметь права на чтение и, возможно, поиск, чтобы все его родительские каталоги снова находились в корневом каталоге. Поскольку домашние каталоги во многих системах имеют вид 'rwx ------', это запретит доступ Apache независимо от директив Deny / Allow в конфигурации Apache.

Предложите вам разместить где-нибудь проект Django и статические файлы вне вашей домашней учетной записи и при необходимости ослабьте разрешения файловой системы.

3 голосов
/ 17 января 2010

Ваш 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 где-нибудь внутри /home/mart/programmation/python/django/martfiles/. Это должно работать.

РЕДАКТИРОВАТЬ: хорошо, вот пример httpd.conf, который работает на рабочей машине:

<VirtualHost *:80>
    # Admin email, Server Name (domain name) and any aliases
    ServerAdmin testing@example.de
    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 , чтобы увидеть, может ли Apache действительно получить к ним доступ ...

0 голосов
/ 17 января 2010

Это похоже на то, что у меня есть для моего приложения, за исключением того, что я не увидел директиву NameVirtualHost в http.conf, которая необходима, если вы хотите настроить виртуальные серверы.Вы можете попробовать добавить NameVirtualHost *:80 до определения виртуального хоста.

...