Apache 2.3 ou posterior
Com o Apache 2.3 ou posterior, você pode aparentemente fazer algo assim (testado):
<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 anterior
Atualização: esta não é uma boa solução. Veja abaixo.
Você tem que fazer um hack como este. Observe o [PT]
que significa "passthrough". Sem isso, um redirecionamento HTTP real é enviado de volta ao cliente, o que provavelmente não é o que você deseja. A [OR]
thing (que significa "ou") mostra como combinar vários endereços.
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]
Você precisa ativar mod_rewrite
, o que você pode fazer no Debian / Ubuntu com este comando:
sudo a2enmod rewrite
Note que este método não bane completamente outras pessoas de acessar o seu site de teste, então você provavelmente desejará adicionar alguma segurança, ou apenas escolher um prefixo mais obscuro que next
.
Atualização no método mod_rewrite.
Existem alguns problemas com este método. Primeiro, o Django não funciona com dois sites no mesmo processo como este, você precisa seguir as instruções em esta resposta .
Em segundo lugar, o mod_rewrite não funciona com POST
requests ! Todos os POST
s são alterados silenciosamente para GET
e os dados da postagem são descartados. Muito frustrante! Por isso eu recomendo que você use o ...
versão iptables
Basta executar os servidores em duas portas diferentes. Este inclui o material do WSGI para ter dois sites separados do django.
<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 [email protected]
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 [email protected]
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>
Em seguida, você pode usar este comando iptables
para rotear solicitações do seu endereço IP na porta 80 para a porta 1222:
sudo iptables -A PREROUTING -t nat -p tcp -s your.ip.address --dport 80 -j DNAT --to-destination :1222
Altere -A
para -D
para remover a regra.
Note que os documentos sugerem que você precisa adicionar mais comandos Listen
e NameVirtualHost
, mas eu realmente descobri que ele funciona sem eles, e adicioná-los fez com que ele quebrasse (pelo menos no Ubuntu).