mod_wsgi 仅在用户登录时工作

mod_wsgi 仅在用户登录时工作

我在 Linux 服务器(Ubuntu 服务器 12.4)上设置了一个 Django 应用程序,使用 Apache(mod_wsgi)和 PostgreSQL(psycopg2)。我遇到了一些问题Postgres 的 unix 身份验证,所以我选择了一个普通用户作为数据库所有者和 apache 用户。它工作正常,但现在我必须以该用户身份登录才能使 mod_wsgi 正常工作。如果我没有登录,apache 会正常提供静态文件,但尝试访问 mod_wsgi 时会出现以下错误:

[...] [error] [...] Target WSGI script not found or unable to stat: /parent/folder

我试过检查文件的权限(包括将其设置为 777),但仍然出现相同的错误(父文件夹也可供所有人读取)。该文件(以及静态文件和 Django 文件)存储在同一用户的主目录中。我现在陷入困境,有什么想法吗?

PS 我对 *nix 机器非常不熟悉,我将其设置为一种黑客手段来启动和运行系统。但我宁愿为 Apache 和 PostgreSQL 设置不同的用户,或者至少为两者设置相同的用户,但不要使用普通用户(即也用于登录和执行操作的用户)。我可以立即使用的快速解决方案非常棒,但即使我不能立即应用,合适的解决方案也会非常受欢迎。


更新:我的apache2.conf文件大部分未经修改(从默认设置),只更改了用户和组:

#User ${APACHE_RUN_USER}
#Group ${APACHE_RUN_GROUP}
User myuser
Group myuser

(用户名和组名相同)

带有虚拟主机的文件几乎包含标准的 Django 安装,但每个文件都存储在该用户的主文件夹中(设置为 755,确认可由 Apache 访问):

<VirtualHost *:80>

    DocumentRoot /home/myuser/myproject
    <Directory />
        Options All
        AllowOverride None
    </Directory>
    <Directory /home/myuser/myproject>
        Options All
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    WSGIDaemonProcess myproject processes=6 threads=1
    WSGIProcessGroup myproject

    Alias /media/ "/home/myuser/myproject/media/"
    Alias /static/ "/home/myuser/myproject/static/"
    WSGIScriptAlias / "/home/myuser/myproject/myproject.wsgi"

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
</VirtualHost>

我已经离开了客户的站点,但我会尝试尽快在我的开发机器上复制设置(因此我最感兴趣的是合适的解决方案,而不是快速修复)。欢迎提供任何提示或指示。

答案1

主目录myuser加密,这意味着它仅在用户登录时才挂载。因此,即使具有正确的权限,Apache 进程也无法读取该wsgi文件,从而导致“未找到”日志条目。静态文件被缓存,因此它们仍能正常加载(一段时间)。

相关内容