Apache 2.3 ou version ultérieure
Avec Apache 2.3 ou version ultérieure, vous pouvez apparemment faire quelque chose comme ça (testé):
<VirtualHost *:80>
ServerName www.example.com
<If "-R '10.10.10.10'">
# The next version of the website...
Alias /favicon.ico /home/ubuntu/website-new/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website-new/main/wsgi.py
</If>
<Else>
# The standard version (e.g. holding page).
Alias /favicon.ico /home/ubuntu/website/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website/main/wsgi.py
</Else>
# and so on...
</VirtualHost>
Apache 2.2 ou version antérieure
Mise à jour: ce n'est pas une bonne solution. Voir ci-dessous.
Vous devez faire un hack comme ça. Notez le [PT]
qui signifie "passthrough". Sans cela, une redirection HTTP réelle est renvoyée au client, ce qui n'est probablement pas ce que vous voulez. La [OR]
chose (qui signifie "ou") montre comment faire correspondre plusieurs adresses.
Alias /next/favicon.ico /home/ubuntu/website-new/favicon.ico
Alias /next/static/ /home/ubuntu/static/
WSGIScriptAlias /next /home/ubuntu/website-new/main/wsgi.py
Alias /favicon.ico /home/ubuntu/website/favicon.ico
Alias /static/ /home/ubuntu/static/
WSGIScriptAlias / /home/ubuntu/website/main/wsgi.py
# Rewrite for our IP.
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^80\.4\.170\.209$ [OR]
RewriteCond %{REMOTE_ADDR} ^94\.193\.52\.157$
RewriteRule ^/(.*) /next/$1 [PT]
Vous devez activer mod_rewrite
ce que vous pouvez faire sur Debian / Ubuntu avec cette commande:
sudo a2enmod rewrite
Notez que cette méthode n'interdit pas complètement à d'autres personnes d'accéder à votre site de test, vous voudrez donc probablement ajouter un peu de sécurité, ou simplement choisir un préfixe plus obscur que next
.
Mise à jour sur la méthode mod_rewrite.
Il y a quelques problèmes avec cette méthode. Tout d'abord, Django ne fonctionne pas avec deux sites dans le même processus comme celui-ci, vous devez suivre les instructions de cette réponse .
Deuxièmement, mod_rewrite ne fonctionne pas avec les POST
requêtes ! Tous les POST
s sont modifiés en silence GET
et les données de publication sont supprimées. Très frustrant! Par conséquent, je vous recommande d'utiliser le ...
version iptables
Exécutez simplement les serveurs sur deux ports différents. Celui-ci comprend les éléments WSGI pour avoir deux sites django distincts.
<VirtualHost *:80>
ServerName www.example.com
Alias /favicon.ico /home/ubuntu/alpha/favicon.ico
Alias /static/ /home/ubuntu/alpha/static/
WSGIDaemonProcess alpha_wsgi user=www-data group=www-data
WSGIScriptAlias / /home/ubuntu/alpha/alpha/wsgi.py
WSGIProcessGroup alpha_wsgi
ServerAdmin info@example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:1222>
ServerName www.example.com
Alias /favicon.ico /home/ubuntu/main/favicon.ico
Alias /static/ /home/ubuntu/main/static/
WSGIDaemonProcess main_wsgi user=www-data group=www-data
WSGIScriptAlias / /home/ubuntu/main/main/wsgi.py
WSGIProcessGroup main_wsgi
ServerAdmin info@example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Ensuite, vous pouvez utiliser cette iptables
commande pour router les demandes de votre adresse IP sur le port 80 vers le port 1222:
sudo iptables -A PREROUTING -t nat -p tcp -s your.ip.address --dport 80 -j DNAT --to-destination :1222
Passez -A
à -D
pour supprimer la règle.
Notez que les documents suggèrent que vous devez ajouter des commandes supplémentaires Listen
et NameVirtualHost
, mais j'ai trouvé que cela fonctionne sans eux, et les ajouter l'a fait casser (au moins dans ubuntu).