2011-01-26 2 views
12

J'utilise Ubuntu 10.04.
créer un projet django sous /home/wong2/Code/python/django2/ nommé atest
et créer un fichier wsgi setting.wsgi dans le même répertoire
Voici le contenu de setting.wsgi:Apache mod_wsgi erreur: Interdit Vous n'avez pas l'autorisation d'accéder/sur ce serveur

import os 
import sys 

path = '/home/wong2/Code/python/django2' 

if path not in sys.path: 
    sys.path.append(path) 
os.environ["DJANGO_SETTINGS_MODULE"] = "atest.settings" 
from django.core.handlers.wsgi import WSGIHandler 
application = WSGIHandler() 

et voici ce que j'ajouter à mon mon httpd. conf:

<VirtualHost *:80> 
    ServerName localhost 
    WSGIScriptAlias//home/wong2/Code/python/django2/setting.wsgi 
    <Directory /> 
     Options FollowSymLinks 
     AllowOverride None 
     Order deny,allow 
     Allow from all 
    </Directory> 
    <Directory "/home/wong2/Code/python/django2/atest"> 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

Le problème est, quand je visite http://localhost, il dit

Forbidden

You don't have permission to access/ on this server.

Merci beaucoup.

+1

Otez la première section Directory - vous n'avez pas besoin, et je pense qu'il est décisif les WSGIAlias. –

Répondre

13

Le deuxième bloc de répertoire ne correspond pas à l'endroit où votre fichier de script WSGI est installé. Cependant, il est très mauvais de coller le fichier de script WSGI dans un emplacement où le code source ou d'autres fichiers sensibles existent, c'est-à-dire le même répertoire ou sous-répertoire. Au lieu de cela, vous devriez le coller dans un sous-répertoire qui lui est propre. Ainsi:

WSGIScriptAlias//home/wong2/Code/python/django2/atest/apache/setting.wsgi 
<Directory "/home/wong2/Code/python/django2/atest/apache"> 
    Order allow,deny 
    Allow from all 
</Directory> 

Créez donc le sous-répertoire 'apache' sous 'atest'. Déplacez 'setting.wsgi' dans ce sous-répertoire 'apache' et modifiez la configuration ci-dessus.

Votre problème peut également être provoqué par des restrictions restrictives sur votre répertoire personnel, car Apache ne peut pas voir à l'intérieur.

aller voir:

http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Conference_Presentations

car il explique ces problèmes d'autorisations ainsi que des questions comme l'endroit où coller votre code et le fichier script WSGI.

A lire aussi:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

0

essayez http://localhost/index.html cela montre-t-il la page apache?

Si wsgi est configuré correctement sur root, il ne le sera pas.

Vous obtenez ce message d'erreur parce que vous demandez peut-être le serveur Web pour la liste des répertoires du dossier www

modifier:

Mes projets sont toujours en

/var/pyproj // pysrc/ et fichiers serveur i mis en /var/py_proj // server/

Voici mon aller à wsgi scénario

import os, sys 

import logging 
logger =logging.getLogger("") 
logger.setLevel(logging.DEBUG) 
handler = logging.StreamHandler(sys.stderr) 
handler.setLevel(logging.DEBUG) 
formatter = logging.Formatter('%(levelname)-8s %(messages)s') 
handler.setFormatter(formatter) 
logger.addHandler(handler) 

sys.stdout = sys.stderr 
from os.path import abspath, dirname, join 
import site 

PROJECT_ROOT = abspath(join(dirname(__file__), "../pysrc")) 
SETTINGS_LOC = abspath(join(PROJECT_ROOT, '')) 
site.addsitedir(SETTINGS_LOC) 
os.environ["DJANGO_SETTINGS_MODULE"] = "settings" 

from django.core.management import setup_environ 
import settings 
setup_environ(settings) 

sys.path.insert(0, join(PROJECT_ROOT, "apps")) 

from django.core.handlers.wsgi import WSGIHandler 

application = WSGIHandler() 

et j'utiliser un vhost.conf

WSGIDaemonProcess pinax_demo user=www-data group=www-data threads=10 python-path=/var/.virtualenvs/pinax_demo/lib/python2.6/site-packages 

<Directory /var/py_proj/pinax_demo/server/> 
    Order deny,allow 
    Allow from all 
</Directory> 

Alias /pinax_demo /var/py_proj/pinax_demo/server/pinax_demo.wsgi 
<Location /pinax_demo/> 
    #WSGIProcessGroup must match the WSGIDaemonProcess 
    WSGIProcessGroup pinax_demo 
    SetHandler wsgi-script 
    Options +ExecCGI 
</Location> 

que j'inclure dans le dossier sites disponibles dans un fichier qui ressemble à ceci

<VirtualHost *:8080> 
     DocumentRoot /var/www/ 

     <Directory /var/www/> 
       Order deny,allow 
       Allow from all 
       Options -Indexes FollowSymLinks 
       DirectoryIndex index.php 
       AllowOverride None 
     </Directory> 

     ServerAdmin [email protected] 

     LogLevel error 
     ErrorLog /var/srv_logs/apache_error.log 
     CustomLog /var/srv_logs/apache_access.log combined 
     #insert 
     Include /var/py_proj/pinax_demo/server/vhost.conf 
     Include /var/py_proj/<other>/server/vhost.conf 
     Include /var/py_proj/<other>/server/vhost.conf 

</VirtualHost> 

httpd.conf est vide. Apache est aussi terrible à l'envoi de fichiers statiques donc j'ai ma configuration d'apache sur le port 8080 et la configuration de nginx sur le port 80 qui transmet à Apache. Vous devriez pouvoir changer le port sur mon site disponible pour l'exécuter sans nginx mais je n'irais pas en direct de cette façon

+0

Quand je visite http: //localhost/index.html, il montre toujours l'erreur '403 Forbidden' – wong2

+0

A la réflexion, votre problème pourrait être juste un problème d'autorisations. Si www-data (utilisateur linux apache) ne peut pas lire votre répertoire personnel qui pourrait lancer cette erreur. – Plahcinski

5

J'ai eu le même problème en raison d'autorisations de fichiers restreints.

Par défaut, votre utilisateur de dossier de base a les paramètres:

ls -l /home/ 

drwx------ 36 user user 12288 Nov 28 20:56 user

ce qui signifie que personne d'autre que vous-même est capable de parcourir même ce dossier.

Ajout d'exécuter l'option dans le dossier fixe mon problème

chmod o+x /home/user/ 
ls -l /home/ 

drwx-----x 36 user user 12288 Nov 28 20:56 user

-1

Vous pouvez obtenir une surprise où votre WSGI a son répertoire! Sur mon certes naïve installation wsgi_mod, il est/- Je suis tellement surpris que je devais écrire ce script pour vous assurer que:

import os 

def application(environ, start_response): 
    status = '200 OK'; e=os.listdir(os.getcwd()) 
    output = '''WSGI %s<hr>'''%(e) 
    response_headers = [('Content-type', 'text/html'), 
         ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 
    return [output] 

Cela signifie que les applications importées auront besoin d'un chemin complet se trouve, par exemple:

sys.path.append('/home/foo/www/Forms') 
from DataCommon import page 

C'est le recommandé (par Google) approche à ceci:

import sys; path='/home/foo/www/Forms'; 
if path not in sys.path: sys.path.append(path) 
8

Avec Django 1.5+ vous devez utiliser la manière suggérée décrite dans la documentation:

WSGIScriptAlias//path/to/mysite.com/mysite/wsgi.py 
WSGIPythonPath /path/to/mysite.com 

<Directory /path/to/mysite.com/mysite> 
<Files wsgi.py> 
Require all granted 
</Files> 
</Directory> 

https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/modwsgi/

+0

J'ai ajouté le '' et cela a fonctionné! – Renato

+0

Même ici. Ajout travaillé. Merci beaucoup. – Yathi

+0

FYI - 'Require all granted' ne fonctionnera que sur Apache 2.4.x et sur la base du' httpd.conf' de l'op il semble qu'il utilise 2.2.x ou au moins la syntaxe en tant que telle. Cela dit, bonne réponse! – Drewness

Questions connexes