This message was posted on the mod_wsgi list, but the poster seemed to have
deleted it before they could even be moderated into the list. Though it was
worthwhile responding anyway.
> I was attempting to setup a mass-virtual hosting type of situation on my
> server for a few django apps that my company has by using the undocumented
> %{HOST} WSGIApplicationGroup option.
First added in 4.4.0.
* http://modwsgi.readthedocs.io/en/develop/release-notes/version-4.4.0.html
<http://modwsgi.readthedocs.io/en/develop/release-notes/version-4.4.0.html>
Not something I would generally recommend using though.
At the same time a %{HOST} value was also allowed with WSGIDaemonProcess.
Although in that case you still had to manually provision the daemon process
groups to match.
> Using info level debugging in Apache, I can see it creating, what I think,
> are two sub-interpreters. But it seems that the environment variables from
> the first application are still showing up in the second app, which is
> causing some issues with the python dotenv library.
>
> I've read a few threads from a few years ago where it was stated that in
> order to run multiple apps successfully, multiple processes must be used,
> especially with Django apps because of the settings module. But based on the
> example in the WSGIApplicationGroup docs about putting user apps into their
> own application group just for that user, I figured the same could be done by
> using the HOST variable. Am I mis-understanding how the WSGIApplicationGroup
> directive works when it comes to running multiple python apps? I also
> confirmed that the proper settings module is being loaded for each app the
> way I have it setup now.
WSGIApplicationGroup relates to a sub interpreter context of a process. So it
isn’t creating a new process. If for the one process you direct multiple WSGI
applications to run in different application groups based on host name, then
they are all still running in the same process. Even when using a daemon
process group with multiple processes, this still occurs, you just have it
occurring in all processes at the same time.
Although sub interpreters can be useful, the separation between them isn’t
perfect. One issue as you found is environment variables. This is made worse by
fact that Django by default sets the environment variable for
DJANGO_SETTINGS_MODULE in wsgi.py in a way that will cause leakage of the
environment variable across sub interpreters. Other scenarios also arise where
they can leak.
In short, do not use application groups to try and implement mass virtual
hosting where user could run any application they want. It will cause all sorts
of problems, including security problems as different users code would run in
the same process, so technically they could write an extension module that
allows them to steal data from other users applications.
The best practice recommendation is to use separate daemon process groups for
each WSGI application, with the WSGI application being forced into the main
interpreter context using %{GLOBAL} for WSGIApplicationGroup or
application-group option to WSGIScriptAlias. The latter is to get around
problems with third party Python extension modules that do not work properly in
sub interpreters.
Graham
--
You received this message because you are subscribed to the Google Groups
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.