我已经使用 Apache (mod_wsgi) 和 PostgreSQL (psycopg2) 在 Linux 服务器(Ubuntu 服务器 12.4)上设置了一个 Django 应用程序。我遇到了Postgres 的 unix 身份验证问题,所以我选择了一个普通用户作为数据库所有者和 apache 用户。它工作正常,但现在我必须使用该用户登录才能使 mod_wsgi 工作。如果我没有登录,apache 会正常提供静态文件,但是当尝试访问 mod_wsgi 时会出现以下错误:
[...] [error] [...] Target WSGI script not found or unable to stat: /parent/folder
我尝试检查文件的权限(包括将其设置为 777),但仍然出现相同的错误(每个人都可以读取父文件夹)。该文件(以及静态文件和 Django 文件)存储在同一用户的主目录中。我现在卡住了,有什么想法吗?
PS 我对 *nix 机器非常缺乏经验,我将其设置为 hack 来启动和运行系统。但我宁愿为 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>
我已经离开了客户的站点,但我会尝试尽快在我的开发机器上复制设置(所以我最感兴趣的是正确的解决方案而不是快速修复)。欢迎任何提示或指示。
的主目录
myuser
已加密,这意味着它仅在用户登录时挂载。因此,即使具有正确的权限,Apache 进程也无法读取该wsgi
文件,从而导致“未找到”日志条目。静态文件被缓存,因此它们仍然可以正常加载(一段时间)。