【问题标题】:Apache2 cannot run WSGI scriptApache2 无法运行 WSGI 脚本
【发布时间】:2012-10-18 09:32:34
【问题描述】:

我在 linux 上安装 Reviewboard,我已将安装包提供的配置复制到 httpd.conf

    <VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/usr/www/reviewboard/htdocs"

    # Error handlers
    ErrorDocument 500 /errordocs/500.html

    WSGIPassAuthorization On
    WSGIScriptAlias "/reviewboard" "/usr/www/reviewboard/htdocs/reviewboard.wsgi/reviewboard"

    <Directory "/usr/www/reviewboard/htdocs">
            AllowOverride All
            Options -Indexes FollowSymLinks
            Allow from all
    </Directory>

    # Alias static media requests to filesystem
    Alias /reviewboard/media "/usr/www/reviewboard/htdocs/media"
    Alias /reviewboard/errordocs "/usr/www/reviewboard/htdocs/errordocs"
    Alias /reviewboard/favicon.ico "/usr/www/reviewboard/htdocs/media/rbcommons/images/favicon.png"
    </VirtualHost>

但是,当我访问“http://SITE/reviewboard/htdocs/reviewboard.wsgi”时,它只会以纯文本形式提供文件,而不是运行脚本

我已经通过“apache2ctl -t -D DUMP_MODULES”检查了 mod_wsgi 是否在 apache2 上运行

我是否遗漏了任何其他配置?

【问题讨论】:

    标签: apache2 wsgi review-board


    【解决方案1】:

    您应该使用 URL:

    http://SITE/reviewboard
    

    WSGIScriptAlias 指令应该是:

    WSGIScriptAlias "/reviewboard" "/usr/www/reviewboard/htdocs/reviewboard.wsgi"
    

    请注意,将整个 Django 站点放在 DocumentRoot 下是不好的做法。您所看到的 WSGI 脚本文件的源代码突出了它不好的原因。也就是说,您的 Apache 配置有问题,您可以公开所有源代码供人们下载。如果 settings.py 在那里并且包含数据库密码,则尤其糟糕。

    现在,解决这些问题并用您当时遇到的问题和下一个问题来更新问题,因为我不希望这能完全解决问题,因为有了这些错误,您应该会遇到与您描述的不同的问题,所以怀疑您的配置甚至没有被使用。

    【讨论】:

    • 非常感谢。我现在得到它的工作。我认为WSGIScriptAlias "/reviewboard" "/usr/www/reviewboard/htdocs/reviewboard.wsgi/reviewboard" 很好。
    • 顺便说一句,我认为你提到了一个好点。你的意思是我应该把目录 htdocs 放在 DocumentRoot 下吗?并将其他目录(如日志、conf、数据和日志)留在另一个地方,如 /etc/revieboard?但是用户仍然可以通过这种方式查看 reviewboard.wsgi。我该如何预防?
    • 拥有 WSGIScriptAlias 不一定很好。在目标 WSGI 脚本的末尾重复挂载点对 Apache 具有非常特殊的意义。如此特别和神奇,它甚至没有记录在 mod_wsgi 网站上,只在需要它的特定情况下向人们解释。如果它有效,那么它只能意味着你所有的 urls.py URL 都以'reviewboard'为前缀,否则看不到它是如何工作的。
    • 对于DocumentRoot,根本不要将整个Django项目的任何部分,相关的配置或数据文件粘贴到DocumentRoot指定的目录下。只要您设置了仅包含具有正确 Apache 访问权限的 WSGI 脚本文件的单独目录,那么一切都应该可以正常工作,而无需位于 DocumentRoot 下。我可能会建议您查看一个简单的 hello world 所需的内容。 code.google.com/p/modwsgi/wiki/QuickConfigurationGuide
    • 最后。如果你让它工作并且它不是任何建议的答案或略有不同,那么最好自己用正确的答案回答问题,以便其他人可以学习,而不是猜测你为解决问题所做的工作.
    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 2013-07-21
    • 2010-09-12
    • 2021-06-01
    • 2013-08-27
    • 2016-09-26
    • 1970-01-01
    • 2015-12-27
    相关资源
    最近更新 更多