mod_wsgi工作目录和用户
我在用mod_wsgi运行flask。我的flask应用程序在/var/www/app
,它会接收用户上传的文件,并把这些文件保存到/var/www/app/tmp
目录里。不过,即使我已经做了所有的chmod和chown(我以为是权限问题),我还是无法访问那个tmp目录。
经过一些调试,我发现flask应用程序的当前工作目录是/
。我可以通过os.chdir('/var/www/')
来改变工作目录,但出于安全考虑,我不想这样做。
这是我的apache配置:
<VirtualHost *:80>
ServerName mysite.com
ServerAlias site.com
ServerAdmin admin@localhost
WSGIDaemonProcess app user=www-data group=www-data processes=1
WSGIScriptAlias / /var/www/app.wsgi
Alias /static /var/www/app/static
<Directory /var/www/app>
WSGIProcessGroup app
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Order deny,allow
Allow from all
</Directory>
<Location "/static">
SetHandler None
</Location>
</VirtualHost>
我该如何把我的应用程序的工作目录从/
改成/var/www
呢?
1 个回答
15
关于WSGIDaemonProcess的文档提到,你可以使用home=...
这一设置:
home=目录
这个设置定义了一个目录的绝对路径,这个目录将作为进程组内守护进程的初始工作目录。如果没有定义这个选项,在mod_wsgi 1.X版本中,守护进程会继承Apache父进程的当前工作目录。通常情况下,Apache父进程的当前工作目录是根目录。而在mod_wsgi 2.0及以上版本中,初始工作目录会设置为运行守护进程的用户的主目录。
不过,我很好奇——你认为使用os.chdir
会带来更多的安全风险,为什么呢?