Apache 2.3 o posterior
Con Apache 2.3 o posterior, aparentemente puede hacer algo como esto (probado):
<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 anterior
Actualización: esta no es una buena solución. Vea abajo.
Tienes que hacer un truco como este. Tenga en cuenta lo [PT]
que significa "paso a través". Sin él, se envía una redirección HTTP real al cliente, lo que probablemente no sea lo que desea. La [OR]
cosa (que significa "o") muestra cómo hacer coincidir múltiples direcciones.
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]
Debe habilitar mod_rewrite
lo que puede hacer en Debian / Ubuntu con este comando:
sudo a2enmod rewrite
Tenga en cuenta que este método no prohíbe completamente que otras personas accedan a su sitio de prueba, por lo que probablemente desee agregar algo de seguridad, o simplemente elegir un prefijo más oscuro que next
.
Actualización sobre el método mod_rewrite.
Hay un par de problemas con este método. Primero, Django no funciona con dos sitios en el mismo proceso como este, debe seguir las instrucciones en esta respuesta .
En segundo lugar, mod_rewrite no funciona con POST
solicitudes . Todos los correos POST
electrónicos se cambian silenciosamente GET
y los datos de publicación se descartan. ¡Muy frustrante! Por lo tanto, te recomiendo que uses el ...
versión de iptables
Simplemente ejecute los servidores en dos puertos diferentes. Este incluye las cosas de WSGI para tener dos sitios de 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>
Luego puede usar este iptables
comando para enrutar solicitudes desde su dirección IP en el puerto 80 al puerto 1222:
sudo iptables -A PREROUTING -t nat -p tcp -s your.ip.address --dport 80 -j DNAT --to-destination :1222
Cambie -A
a -D
para eliminar la regla.
Tenga en cuenta que los documentos sugieren que necesita agregar comandos Listen
y adicionales NameVirtualHost
, pero en realidad descubrí que funciona sin ellos, y agregarlos hizo que se rompiera (al menos en ubuntu).