mod_wsgi - WSGIDaemonProcess中的用户选项无效
我正在尝试配置我的wsgi应用程序,让它在我的用户身份下运行。我的操作系统是Ubuntu 13.10。以下是我的虚拟主机配置:
<VirtualHost *:80>
ServerName lz5.local
DocumentRoot /home/kompas/git/lz5/front-app
WSGIDaemonProcess lz user=#1000 group=#1000
WSGIApplicationGroup lz
<Directory /home/kompas/git/lz5>
AllowOverride None
Require all granted
</Directory>
LogFormat "%V %l %u %t \"%r\" %>s %b" common_vhost
CustomLog "/var/log/apache2/logzilla_access.log" common_vhost
ErrorLog "/var/log/apache2/logzilla_error.log"
WSGIScriptAlias /api /home/kompas/git/lz5/app.wsgi
</VirtualHost>
这是我的app.wsgi文件:
(...imports...)
sys.stderr.write("My uid={}, gid={}, euid={}, egid={}".format(
os.getuid(), os.getgid(), os.geteuid(), os.getegid()))
sys.stderr.flush()
application = make_app()
application.debug = True
看起来一切正常:
[Wed Mar 12 09:55:45.059101 2014] [:info] [pid 25068:tid 139724309714816] mod_wsgi (pid=25068): Starting process 'lz' with uid=1000, gid=1000 and threads=15.
...但是在app.wsgi中,用户身份(uid)没有改变:
[Wed Mar 12 09:55:49.457056 2014] [:error] [pid 25070:tid 139724094150400] My uid=33, gid=33, euid=33, egid=33
我还注意到,有一个apache进程组的用户身份设置正确为“kompas”(uid 1000),但这并不是运行我应用程序的那个进程!
apache2(23368)─┬─apache2(25479,www-data)─┬─{apache2}(25526)
...
├─apache2(25480,www-data)─┬─{apache2}(25499)
│ ├─{apache2}(25500)
...
└─apache2(25478,kompas)─┬─{apache2}(25481)
├─{apache2}(25482)
不过,我从我的app.wsgi中得到的进程ID是25480,而不是我预期的25478。
有什么想法吗?
1 个回答
4
你缺少一个 WSGIProcessGroup 指令,这个指令是用来告诉 mod_wsgi 你的应用程序应该在哪个守护进程组中运行。
去看看这些内容:
- http://blog.dscpl.com.au/2012/10/why-are-you-using-embedded-mode-of.html
- http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Embedded_Or_Daemon_Mode
你应该使用的是:
WSGIProcessGroup lz
WSGIApplicationGroup %{GLOBAL}