J'ai un serveur EC2 AWS sur lequel j'aimerais héberger quelques applications Django. Chacune de ces applications a sa propre URL. Par exemple,Servir plusieurs applications WSGI en tant que différents hôtes virtuels sur Apache
example1.com
example2.com
par lui-même, example1.com
œuvres. Le problème est d'obtenir example2.com
de travailler avec elle en même temps.
Lorsque je visite example2.com
, je reçois une erreur:
DisallowedHost at/
Invalid HTTP_HOST header: 'example2.com'. You may need to add 'example2.com' to ALLOWED_HOSTS.
Request Method: GET
Request URL: http://example2.com
Django Version: 1.9.13
Exception Type: DisallowedHost
Exception Value:
Invalid HTTP_HOST header: 'example2.com'. You may need to add 'example2.com' to ALLOWED_HOSTS.
Exception Location: /var/www/vhosts/example1/example1-env/lib/python3.5/site-packages/django/http/request.py in get_host, line 109
Python Executable: /usr/bin/python3
Python Version: 3.5.1
Python Path:
['/usr/lib64/python3.5',
'/usr/lib64/python3.5/plat-linux',
'/usr/lib64/python3.5/lib-dynload',
'/usr/local/lib64/python3.5/site-packages',
'/usr/local/lib/python3.5/site-packages',
'/usr/lib64/python3.5/dist-packages',
'/usr/lib/python3.5/dist-packages',
'/var/www/vhosts/example1/',
'/var/www/vhosts/example1/example1-env/lib/python3.5/site-packages']
Server time: Wed, 14 Jun 2017 20:31:27 +0000
Comme vous pouvez le voir, en quelque sorte Apache tente d'utiliser l'environnement virtuel de example1.com
quand il sert example2.com
. Comment pourrais-je corriger cela? Chacun devrait être servi avec son propre virtualenv.
Voici le fichier de configuration Apache:
<VirtualHost *:80>
# This is name based virtual hosting. So place an appropriate server name
# here. Example: django.devsrv.local
ServerName example1.com
WSGIDaemonProcess example1 python-home=/var/www/vhosts/example1/example1-env
WSGIProcessGroup %{GLOBAL}
# Insert the full path to the wsgi.py-file here
WSGIScriptAlias//var/www/vhosts/example1/example1/wsgi.py
<Directory /var/www/vhosts/example1/>
Require all granted
</Directory>
Alias /static/ /var/www/vhosts/example1/static/
<Directory /var/www/vhosts/example1/static/>
Order deny,allow
Allow from all
</Directory>
Alias /media/ /var/www/vhosts/example1/media/
<Directory /var/www/vhosts/example1/media/>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
# This is name based virtual hosting. So place an appropriate server name
# here. Example: django.devsrv.local
ServerName example2.com
WSGIDaemonProcess example2 python-home=/var/www/vhosts/example2/example2-env
WSGIProcessGroup %{GLOBAL}
# Insert the full path to the wsgi.py-file here
WSGIScriptAlias//var/www/vhosts/example2/example2/wsgi.py
<Directory /var/www/vhosts/example2/>
Require all granted
</Directory>
Alias /static/ /var/www/vhosts/example2/static/
<Directory /var/www/vhosts/example2/static/>
Order deny,allow
Allow from all
</Directory>
Alias /media/ /var/www/vhosts/example2/media/
<Directory /var/www/vhosts/example2/media/>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Edit: Après avoir lu quelques suggestions dans les commentaires, je suis venu à ce sujet. Cela ne fonctionne toujours pas.
ServerName example1.com
WSGIDaemonProcess example1 display-name=%{GROUP} python-path=/var/www/vhosts/example1/ python-home=/var/www/vhosts/example1/example1-env/
WSGIApplicationGroup %{GLOBAL}
WSGIProcessGroup example1
# Insert the full path to the wsgi.py-file here
WSGIScriptAlias//var/www/vhosts/example1/example1/wsgi.py process-group=example1
...
ServerName example2.com
WSGIDaemonProcess example2 display-name=%{GROUP} python-home=/var/www/vhosts/example2/example2-env/ python-path=/var/www/vhosts/example2/
WSGIApplicationGroup %{GLOBAL}
WSGIProcessGroup example2
# Insert the full path to the wsgi.py-file here
WSGIScriptAlias//var/www/vhosts/example2/example2/wsgi.py process-group=example2
Cette erreur n'a rien à voir avec l'environnement virtuel. Vous devez ajouter example2.com aux hôtes autorisés dans votre settings.py. – giaco
Vous manquez le point. Cela ne le résoudra pas car l'erreur provient d'exemple1 env Python – MadPhysicist
Vous ne définissez pas correctement '' WSGIProcessGroup''. Ce devrait être le nom du groupe de processus démon pour l'hôte virtuel, pas ''% {GLOBAL} ''. Vous vouliez probablement dire '' WSGIApplicationGroup% {GLOBAL} '', ce qui est recommandé, mais vous avez toujours besoin du '' WSGIProcessGroup''. Lire http://blog.dscpl.com.au/2012/10/requests-running-in-wrong-django.html –