Apache 2.3 ou posterior
Com o Apache 2.3 ou posterior, você aparentemente pode 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. Ver abaixo.
Você tem que fazer um hack como este. Observe o [PT]
que significa "passagem". Sem ele, um redirecionamento HTTP real é enviado de volta ao cliente, o que provavelmente não é o que você deseja. A [OR]
coisa (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 habilitar o mod_rewrite
que pode fazer no Debian / Ubuntu com este comando:
sudo a2enmod rewrite
Observe que esse método não impede completamente que outras pessoas acessem seu site de teste; portanto, você provavelmente desejará adicionar alguma segurança ou apenas escolher um prefixo mais obscuro do que next
.
Atualização no método mod_rewrite.
Existem alguns problemas com esse método. Primeiro, o Django não funciona com dois sites no mesmo processo como este, você precisa seguir as instruções nesta resposta .
Em segundo lugar, mod_rewrite não funciona com POST
solicitações ! Todos os POST
s são alterados silenciosamente para GET
e os dados da postagem são descartados. Muito frustrante! Portanto, eu recomendo que você use o ...
versão do iptables
Simplesmente execute os servidores em duas portas diferentes. Este inclui o material WSGI para ter dois sites django separados.
<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>
Então você pode usar este iptables
comando 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
Mude -A
para -D
para remover a regra.
Observe que os documentos sugerem que você precisa adicionar comandos Listen
e adicionais NameVirtualHost
, mas na verdade descobri que funciona sem eles, e a adição deles fez com que parasse (pelo menos no ubuntu).