我正在使用Ubuntu 10.04
我在名为/home/wong2/Code/python/django2/
的{{1}}下创建了一个django项目
并在同一目录中创建一个wsgi文件atest
以下是setting.wsgi
:
setting.wsgi
这是我添加到我的httpd.conf中的内容:
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()
问题是,当我访问http://localhost时,它说
禁止
您无权访问/ 在这台服务器上。
非常感谢。
答案 0 :(得分:17)
第二个目录块与安装WSGI脚本文件的位置不匹配。虽然将WSGI脚本文件粘贴在存在源代码或其他敏感文件的位置(即同一目录或子目录),但这是非常糟糕的做法。相反,你应该把它放在自己的子目录中。因此:
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>
所以,在'atest'下创建'apache'子目录。将'setting.wsgi'移动到'apache'子目录中,并将config更改为上面。
你的问题也可能是由于你无法在里面看到主目录上的限制性权限造成的。
去观看:
http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Conference_Presentations
因为它解释了这些权限问题以及诸如粘贴代码和WSGI脚本文件的问题。
同时阅读:
答案 1 :(得分:9)
使用Django 1.5+,您应该使用文档中描述的建议方式:
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/
答案 2 :(得分:6)
由于文件权限受限,我遇到了同样的问题。
默认情况下,您的主文件夹用户具有以下设置:
ls -l /home/
drwx ------ 36位用户12288 11月28日20:56用户
意味着除了你自己以外没有人能够浏览该文件夹。
在文件夹中添加执行选项修复了我的问题
chmod o+x /home/user/
ls -l /home/
drwx ----- x 36用户用户12288 11月28日20:56用户
答案 3 :(得分:0)
尝试http://localhost/index.html会显示apache页面吗?
如果你在root上正确配置了wsgi,它就不会。
您收到该错误消息,因为您可能正在向Web服务器询问www文件夹
的目录列表修改强>
我的项目总是在
的/ var / pyproj // pysrc / 和我放入的服务器文件 的/ var / py_proj //服务器/
这是我的wsgi脚本
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()
我使用的是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>
我将其包含在看似此内容的文件中的sites-available文件夹中
<VirtualHost *:8080>
DocumentRoot /var/www/
<Directory /var/www/>
Order deny,allow
Allow from all
Options -Indexes FollowSymLinks
DirectoryIndex index.php
AllowOverride None
</Directory>
ServerAdmin oto@example.com
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是空的。 Apache在发送静态文件方面也很糟糕,所以我在端口8080上安装了apache,在端口80上安装了nginx,然后转发到apache。您应该能够只更改我的站点可用文件上的端口,以便在没有nginx的情况下运行它,但我不会那样生活
答案 4 :(得分:-1)
您可能会对WSGI的主目录感到惊讶!在我公认的天真的wsgi_mod安装中,它是/ - 我很惊讶我必须写这个脚本以确保:
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]
这意味着导入的应用程序需要找到完整的路径,例如:
sys.path.append('/home/foo/www/Forms')
from DataCommon import page
这是推荐(通过Google)的方法:
import sys; path='/home/foo/www/Forms';
if path not in sys.path: sys.path.append(path)