Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Apache mod_wsgi错误:禁止您使用';我没有访问/访问此服务器的权限_Python_Django_Apache_Mod Wsgi_Wsgi - Fatal编程技术网

Python Apache mod_wsgi错误:禁止您使用';我没有访问/访问此服务器的权限

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

我正在使用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["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>