1

The site runs fine at local host but when I go to localhost/site2 it just loads the 404 page for the root Django site.

<VirtualHost *:80>
        ServerName localhost
        #site1.com
        #ServerAlias www.site1.com
        ErrorLog /var/www/virtualenv-2.7/django-error-log
        Alias /static/ /var/www/virtualenv-2.7/site1/mainapp/static/
        Alias /media/   /var/www/virtualenv-2.7/site1/media/
        WSGIDaemonProcess site1 python-path=/var/www/virtualenv-2.7/site1:/var/www/virtualenv-2.7/lib/python2.7/site-packages
        WSGIProcessGroup site1
        WSGIScriptAlias / /var/www/virtualenv-2.7/site1/site1/wsgi.py

        <Directory /var/www/virtualenv-2.7/site1>
                <Files wsgi.py>
                Allow from all
                </Files>
        </Directory>

        WSGIDaemonProcess site2 python-path=/var/www/virtualenv-2.7/site2:/var/www/virtualenv-2.7/lib/python2.7/site-packages
        WSGIProcessGroup site2
        WSGIScriptAlias /site2 /var/www/virtualenv-2.7/site2/site2/wsgi.py

        <Directory /var/www/virtualenv-2.7/site2>
                <Files wsgi.py>
                Allow from all
                </Files>
        </Directory>
</VirtualHost>

WSGISocketPrefix /var/run/wsgi
WSGIPythonPath /var/www/virtualenv-2.7/site1:var/www/virutalenv-2.7/lib/python2.7/site-packages:/var/www/virutalenv-2.7/site2:
WSGIPythonHome /var/www/virtualenv-2.7
dnozay
  • 23,846
  • 6
  • 82
  • 104
User
  • 23,729
  • 38
  • 124
  • 207
  • 1
    Maybe the problem is that you are configuring 2 sites when you should configure 1 site with two subfolfers (that are different pages). But the site is the root and it is only one – hoaphumanoid Dec 20 '15 at 11:47
  • @HoapHumanoid and how do I do that? – User Dec 22 '15 at 15:49

2 Answers2

3

You cannot run two sites or django applications inside a single VirtualHost this configuration is faulty.

You will need two different virtual host to do that, like this:

<VirtualHost *:80>
        ServerName site1.com
        ServerAlias www.site1.com
        ErrorLog /var/www/virtualenv-2.7/django-error-log-from-site1

        Alias /static/ /var/www/virtualenv-2.7/site1/mainapp/static/
        Alias /media/   /var/www/virtualenv-2.7/site1/media/

        WSGIDaemonProcess site1 python-path=/var/www/virtualenv-2.7/site1:/var/www/virtualenv-2.7/lib/python2.7/site-packages
        WSGIProcessGroup site1
        WSGIScriptAlias / /var/www/virtualenv-2.7/site1/site1/wsgi.py

        <Directory /var/www/virtualenv-2.7/site1>
                <Files wsgi.py>
                Allow from all
                </Files>
        </Directory>
</VirtualHost>

<VirtualHost *:80>
        ServerName site2.com
        ServerAlias www.site2.com
        ErrorLog /var/www/virtualenv-2.7/django-error-log-from-site2

        Alias /static/ /var/www/virtualenv-2.7/site2/mainapp/static/
        Alias /media/   /var/www/virtualenv-2.7/site2/media/

        WSGIDaemonProcess site2 python-path=/var/www/virtualenv-2.7/site2:/var/www/virtualenv-2.7/lib/python2.7/site-packages
        WSGIProcessGroup site2
        WSGIScriptAlias /site2 /var/www/virtualenv-2.7/site2/site2/wsgi.py

        <Directory /var/www/virtualenv-2.7/site2>
                <Files wsgi.py>
                Allow from all
                </Files>
        </Directory>
</VirtualHost>

If you are testing this out on your local system then depending on your OS you may need to do of the following configuration for trying it out.

  1. In Windows: C:\Windows\System32\Drivers\etc\hosts
  2. In Linux/Mac: /etc/hosts

In this file append the following lines:

127.0.0.1 site1.com
127.0.0.1 site2.com

If you are using domain name then make there A Records point to the required server IP.

Now when you will open site1.com in your browser first VH configuration will be used and likewise for site2.com when type it as the URL.

anand
  • 1,506
  • 14
  • 28
  • I want to use the same domain name. Site 1 is `site1.com` and Site 2 is `site1.com/site2` – User Dec 22 '15 at 15:49
  • @User that cannot be done; two django projects cannot run on same domain, all you can do is create a URL in your `site1.com` app and when user opens it, you can `HttpRedirect("http://site2.com")`. – anand Dec 22 '15 at 16:03
  • Then please edit your answer to reflect that it cannot be done. – User Dec 22 '15 at 16:56
  • @User if you will read the first line of my answer very carefully it says so **You cannot run two sites or django applications inside a single VirtualHost this configuration is faulty.** – anand Dec 22 '15 at 17:14
  • But it doesn't say they can't be the same domain. – User Dec 23 '15 at 05:00
  • Also, your setup gives the warning `[warn] _default_ VirtualHost overlap on port 80, the first has precedence` – User Dec 24 '15 at 22:31
  • @User no problems it will work, if you are looking for complete configuration may be you should also take a look at: https://httpd.apache.org/docs/2.2/vhosts/examples.html be sure to read the docs specific to your apache version. – anand Dec 25 '15 at 08:14
1

One more thought. What do you really need is conditional config. It is possible in Apache 2.4 (sad but not in 2.2), using <If> statement (docs here)

So your config will be transformed to something like

<VirtualHost *:80>
        ServerName localhost
        #site1.com
        #ServerAlias www.site1.com
        ErrorLog /var/www/virtualenv-2.7/django-error-log




<If "%{QUERY_STRING} =~ ^/site1">
        Alias /static/ /var/www/virtualenv-2.7/site1/mainapp/static/
        Alias /media/   /var/www/virtualenv-2.7/site1/media/

        WSGIDaemonProcess site1 python-path=/var/www/virtualenv-2.7/site1:/var/www/virtualenv-2.7/lib/python2.7/site-packages
        WSGIProcessGroup site1
        WSGIScriptAlias / /var/www/virtualenv-2.7/site1/site1/wsgi.py

        <Directory /var/www/virtualenv-2.7/site1>
                <Files wsgi.py>
                Allow from all
                </Files>
        </Directory>
</If>
<Else>
        Alias /static/ /var/www/virtualenv-2.7/site2/mainapp/static/
        Alias /media/   /var/www/virtualenv-2.7/site2/media/

        WSGIDaemonProcess site2 python-path=/var/www/virtualenv-2.7/site2:/var/www/virtualenv-2.7/lib/python2.7/site-packages
        WSGIProcessGroup site2
        WSGIScriptAlias /site2 /var/www/virtualenv-2.7/site2/site2/wsgi.py

        <Directory /var/www/virtualenv-2.7/site2>
                <Files wsgi.py>
                Allow from all
                </Files>
        </Directory>
</Else>
</VirtualHost>

I have not system with apache 2.4 to test , so possibly can miss something.

1844144
  • 657
  • 4
  • 11