我需要你的帮助。 我试图在wsgi我的django项目上运行时出错。 我正在使用Ubuntu 17,Apache2,Django 2.0,Python 3.6
当我从manage.py运行时,一切正常,但是当wsgi遇到下一个错误时:
AH01276:无法提供目录/ var / cardsite / cardsite /:无匹配 的DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm)找到了, 和Options指令禁止的服务器生成的目录索引
并且不知道为什么,因为我猜想一切都正确。 Bellow我的配置:
的apache.conf
<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()
P.S。权限我已经给了文件夹和所有内容。 P.S.S.通过pip3安装的软件包如“libapache2-mod-wsgi-py3”或“mod-wsgi”。
谢谢大家提出的任何建议
答案 0 :(得分:2)
不要将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
处理。