【问题标题】:Troubles with running django app via wsgi on ubuntu 17在 ubuntu 17 上通过 wsgi 运行 django 应用程序的问题
【发布时间】:2018-09-18 05:57:39
【问题描述】:

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

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

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

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

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.S.还通过 pip3 安装了“libapache2-mod-wsgi-py3”或“mod-wsgi”等软件包。

谢谢大家的建议

【问题讨论】:

    标签: python django apache mod-wsgi wsgi


    【解决方案1】:

    不要将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 处理。

    【讨论】:

    • 非常感谢您的帮助。我做了这些更改,但不幸的是错误仍然存​​在.. :(
    • 您还定义了其他VirtualHost 吗?正如我所说,如果你这样做,则不会使用这个,因为ServerName 没有设置。
    • 也可以尝试注释掉 mod_rewrite 规则以消除它们的问题。
    猜你喜欢
    • 2020-04-08
    • 2021-02-19
    • 2021-01-16
    • 2022-07-08
    • 2020-05-31
    • 2020-08-29
    • 1970-01-01
    • 2013-07-29
    • 2022-12-30
    相关资源
    最近更新 更多