Python Apache mod_wsgi错误:禁止您使用';我没有访问/访问此服务器的权限
我正在使用Ubuntu 10.04。Python Apache mod_wsgi错误:禁止您使用';我没有访问/访问此服务器的权限,python,django,apache,mod-wsgi,wsgi,Python,Django,Apache,Mod Wsgi,Wsgi,我正在使用Ubuntu 10.04。 我在/home/wong2/code/python/django2/下创建了一个名为atest的django项目 并在同一目录中创建一个wsgi文件setting.wsgi 以下是设置的内容。wsgi: import os import sys path = '/home/wong2/Code/python/django2' if path not in sys.path: sys.path.append(path) os.environ["D
我在
/home/wong2/code/python/django2/
下创建了一个名为atest的django项目
并在同一目录中创建一个wsgi文件setting.wsgi
以下是设置的内容。wsgi
:
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()
下面是我在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>
服务器名本地主机
WSGIScriptAlias//home/wong2/Code/python/django2/setting.wsgi
选项如下符号链接
不允许超限
命令拒绝,允许
通融
命令允许,拒绝
通融
问题是,当我访问时,它会说
禁止的
您没有访问的权限/
在这个服务器上
非常感谢。试试看,这会显示apache页面吗
如果您在根目录上正确配置了wsgi,它将不会
您收到该错误消息是因为您可能正在向Web服务器询问www文件夹的目录列表
编辑:
我的项目总是在进行中
/var/pyproj//pysrc/
还有我放进去的服务器文件
/var/py_项目//服务器/
这是我的go to 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>
WSGIDaemonProcess pinax_demo user=www-data-group=www-data-threads=10 python-path=/var/.virtualenvs/pinax_demo/lib/python2.6/site-packages
命令拒绝,允许
通融
别名/pinax_demo/var/py_proj/pinax_demo/server/pinax_demo.wsgi
#WSGIProcessGroup必须与WSGIDaemonProcess匹配
WSGIProcessGroup pinax_演示
SetHandler wsgi脚本
选项+执行CGI
我将其包含在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>
DocumentRoot/var/www/
命令拒绝,允许
通融
选项-索引跟随符号链接
DirectoryIndex.php
不允许超限
服务器管理员oto@example.com
日志级错误
ErrorLog/var/srv_logs/apache_error.log
CustomLog/var/srv_logs/apache_access.log组合
#插入
包括/var/py_proj/pinax_demo/server/vhost.conf
Include/var/py_proj//server/vhost.conf
Include/var/py_proj//server/vhost.conf
httpd.conf为空。Apache在发送静态文件方面也很糟糕,所以我在端口8080上安装了Apache,在端口80上安装了nginx,并将其转发给Apache。您应该可以只更改my sites Available文件上的端口,以便在没有nginx的情况下运行它,但我不会以这种方式上线第二个目录块与您安装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>
WSGIScriptAlias//home/wong2/code/python/django2/atest/apache/setting.wsgi
命令允许,拒绝
通融
因此,在“atest”下创建“apache”子目录。将“setting.wsgi”移动到“apache”子目录中,并将config更改为上文
您的问题也可能是由于主目录上的限制性权限造成的,因为Apache无法看到其内部
去看:
因为它解释了这些权限问题以及将代码和WSGI脚本文件粘贴到何处等问题
另见:
由于文件权限受限,我也遇到了同样的问题
默认情况下,主文件夹用户具有以下设置:
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用户
您可能会惊讶于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]
这是(谷歌)推荐的方法:
import sys; path='/home/foo/www/Forms';
if path not in sys.path: sys.path.append(path)
对于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>
WSGIScriptAlias//path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath/path/to/mysite.com
要求所有授权
当我访问时,它仍然显示403禁止
错误经过仔细考虑,您的问题可能只是权限问题。如果www数据(linux apache用户)无法读取您的主目录,则可能会引发该错误。请删除第一个目录部分-您不需要它,我认为它正在覆盖WSGIAlias.FYI-Require所有被授予的
将只在Apache2.4.x上工作,并且基于OP的httpd.conf
,看起来他使用的是2.2.x或者至少是语法本身。那就是说,回答得好!Django 3的新链接:
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>