0

similar to this: Deploying multiple django apps on Apache with mod_wsgi

I'm trying to host two django apps on mod_wsgi but one is on root. i.e. the WSGI directives would be

WSGIScriptAlias / <path to django wsgi file for app1>
WSGIScriptAlias /app2 <path to django wsgi file for app2>

Just using the WSGIScript aliases like this doesn't seem to work. I tried putting them in location directives but that doesn't work either. Is there a way to accomplish this?


after Graham's answer below I attempted this:

<VirtualHost <server ip>:80>
    ServerName site1.com    

    ##### app2 CONFIG
    WSGIDaemonProcess app2 python-path=/<path to django app2>/:/<path to virtualenv app2>/ threads=15 display-name=%{GROUP}

    WSGIProcessGroup app2

    WSGIScriptAlias /app2 /<path to app2 wsgi file>/


    ##### app1 CONFIG    
    WSGIDaemonProcess app1 python-path=/<path to django app1>/:/<path to virtualenv app1>/ threads=15 display-name=%{GROUP}

    WSGIProcessGroup app1

    WSGIScriptAlias / /<path to app1 wsgi file>
</VirtualHost>

but unfortunately requests to site1.com/app2 still get handled by the django application app1. Did I make a mistake in the config?

Community
  • 1
  • 1
w--
  • 6,427
  • 12
  • 54
  • 92

1 Answers1

2

Wrong order. Use:

WSGIScriptAlias /app2 <path to django wsgi file for app2>
WSGIScriptAlias / <path to django wsgi file for app1>

The most deeply nested must be first, else '/' will be matched first and override everything else.


UPDATE 1

After additions to question. Now use:

<VirtualHost <server ip>:80>
    ServerName site1.com    

    ##### app2 CONFIG
    WSGIDaemonProcess app2 python-path=/<path to django app2>/:/<path to virtualenv app2>/ threads=15 display-name=%{GROUP}

    <Location /app2>
    WSGIProcessGroup app2
    </Location>

    WSGIScriptAlias /app2 /<path to app2 wsgi file>/


    ##### app1 CONFIG    
    WSGIDaemonProcess app1 python-path=/<path to django app1>/:/<path to virtualenv app1>/ threads=15 display-name=%{GROUP}

    WSGIProcessGroup app1

    WSGIScriptAlias / /<path to app1 wsgi file>
</VirtualHost>

You need to scope the WSGIProcessGroup directive to the sub URL so only that sub URL's requests are delegated to the mod_wsgi daemon process group.

Another way of writing above is:

<VirtualHost <server ip>:80>
    ServerName site1.com    

    ##### app2 CONFIG
    WSGIDaemonProcess app2 python-path=/<path to django app2>/:/<path to virtualenv app2>/ threads=15 display-name=%{GROUP}

    WSGIScriptAlias /app2 /<path to app2 wsgi file>/ process-group=app2

    ##### app1 CONFIG    
    WSGIDaemonProcess app1 python-path=/<path to django app1>/:/<path to virtualenv app1>/ threads=15 display-name=%{GROUP}

    WSGIScriptAlias / /<path to app1 wsgi file> process-group=app1
</VirtualHost>

In other words, use the process-group option to WSGIScriptAlias to indicate where each should run.

When using daemon mode and only one application per process, also recommended to add:

WSGIApplicationGroup %{GLOBAL}

This forces use of main Python interpreter context by WSGI application in respective processes, avoiding problems that can arise where some Python packages with C extensions are not implemented correctly so as to work with Python sub interpreters.

Graham Dumpleton
  • 57,726
  • 6
  • 119
  • 134
  • ahh ok. so order is important. will attempt. thank you – w-- Apr 18 '16 at 01:52
  • i've updated my question based on this answer. Do you mind having a quick look and letting me know if i made a silly mistake? Thank you. – w-- Apr 19 '16 at 08:05