mod_wsgi工作目录和用户

14 投票
1 回答
10189 浏览
提问于 2025-04-17 15:28

我在用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会带来更多的安全风险,为什么呢?

撰写回答