Apache 2.3 o successivo
Con Apache 2.3 o versioni successive puoi apparentemente fare qualcosa del genere (testato):
<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 o precedenti
Aggiornamento: questa non è una buona soluzione. Vedi sotto.
Devi fare un trucco come questo. Nota [PT]
che sta per "passthrough". Senza di esso, un reindirizzamento HTTP effettivo viene inviato al client, che probabilmente non è quello che desideri. La [OR]
cosa (che sta per "o") mostra come abbinare più indirizzi.
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]
Devi abilitare mod_rewrite
ciò che puoi fare su Debian / Ubuntu con questo comando:
sudo a2enmod rewrite
Nota che questo metodo non impedisce completamente ad altre persone di accedere al tuo sito di test, quindi probabilmente vorrai aggiungere un po 'di sicurezza o semplicemente scegliere un prefisso più oscuro di next
.
Aggiornamento sul metodo mod_rewrite.
Ci sono un paio di problemi con questo metodo. Innanzitutto, Django non funziona con due siti nello stesso processo come questo, è necessario seguire le istruzioni in questa risposta .
In secondo luogo mod_rewrite non funziona con le POST
richieste ! Tutti POST
i messaggi vengono silenziosamente modificati GET
e i dati di post vengono eliminati. Molto frustrante! Pertanto ti consiglio di usare il ...
versione di iptables
Basta eseguire i server su due porte diverse. Questo include le cose WSGI per avere due siti django separati.
<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>
Quindi è possibile utilizzare questo iptables
comando per instradare le richieste dal proprio indirizzo IP dalla porta 80 alla porta 1222:
sudo iptables -A PREROUTING -t nat -p tcp -s your.ip.address --dport 80 -j DNAT --to-destination :1222
Passare -A
a -D
per rimuovere la regola.
Si noti che i documenti suggeriscono che è necessario aggiungere ulteriori comandi Listen
e NameVirtualHost
, ma in realtà ho scoperto che funziona senza di essi, e l'aggiunta di essi lo ha fatto rompere (almeno in Ubuntu).