在 ubuntu 17 上通过 wsgi 运行 django 应用程序的麻烦



我需要你的帮助。尝试在我的 django 项目上运行 wsgi 时出现错误。我正在使用Ubuntu 17,Apache2,Django 2.0,Python 3.6

当我从 manage.py 运行时,一切正常,但是当通过wsgi时出现下一个错误:

AH01276:无法提供目录/var/cardsite/cardsite/:无匹配 目录索引 (索引.html,索引.cgi,索引.pl,索引.php,索引.xhtml,索引.htm( 找到, 和选项指令禁止的服务器生成的目录索引

不知道为什么,因为我想一切都正确。波纹管我的配置:

阿帕奇·康普

<VirtualHost *:80>
CustomLog /var/log/apache2/cardsite-access.log common
ErrorLog /var/log/apache2/cardsite-error.log
DocumentRoot /var/cardsite/cardsite/
Alias /static /var/cardsite/cardsite/static/
<Directory /var/cardsite/cardsite/static>
Require all granted
</Directory>
<Directory /var/cardsite/cardsite>
    <Files wsgi.py>
    Require all granted
    </Files>
</Directory>
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
WSGIDaemonProcess cardsite python-path=/var/cardsite/ python-home=/var/venv_python36/
WSGIProcessGroup cardsite
WSGIScriptAlias / /var/cardsite/cardsite/wsgi.py
</VirtualHost>

wsgi.py

import os
import sys
PROJECT_DIR = '/var/cardsite'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cardsite.settings")
def execfile(filename):
     globals = dict( __file__ = filename )
     exec( open(filename).read(), globals )
activate_this = os.path.join( '/var/venv_python36/bin', 'activate_this.py' )
execfile( activate_this )
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

附言我给予文件夹和所有里面的权限。PSS 还通过 pip3 安装了像 "libapache2-mod-wsgi-py3" 或 "mod-wsgi" 这样的软件包。

谢谢大家的任何建议,它可以是什么

不要将DocumentRoot设置为源代码的父目录。如果你要把WSGIScriptAlias拿出来,人们可以下载你的源代码。您应该避免这种风险,即使WSGIScriptAlias当前拦截了/下的所有内容。DocumentRoot目录不允许访问也可能是问题的一部分。

尝试:

<VirtualHost *:80>
CustomLog /var/log/apache2/cardsite-access.log common
ErrorLog /var/log/apache2/cardsite-error.log
DocumentRoot /var/cardsite/htdocs
<Directory /var/cardsite/htdocs>
    Require all granted
</Directory>
Alias /static /var/cardsite/cardsite/static
<Directory /var/cardsite/cardsite/static>
    Require all granted
</Directory>
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
WSGIDaemonProcess cardsite python-path=/var/cardsite python-home=/var/venv_python36
WSGIProcessGroup cardsite
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /var/cardsite/cardsite/wsgi.py
<Directory /var/cardsite/cardsite>
    <Files wsgi.py>
    Require all granted
    </Files>
</Directory>
</VirtualHost>
添加

WSGIApplicationGroup一如既往是一个好主意,只有一个 WSGI 应用程序委派给守护进程组。

确保创建目录:

/var/cardsite/htdocs

最后,您缺少ServerName指令。因此,如果这不是默认VirtualHost,您的请求甚至可能不会被此VirtualHost处理。

最新更新