¿Es posible configurar Apache para diferentes hosts virtuales en función de la IP de origen ? (es decir, la misma interfaz, el mismo nombre de host, pero dos hosts virtuales diferentes, con contenido diferente, según la IP de origen ).
La motivación para esto es que mi dirección IP pueda acceder al sitio correctamente, pero que todos los demás obtengan la página de espera. La solución convencional parece ser usar mod_rewrite para dirigir a los visitantes a una página separada dentro de la misma docroot, pero en su lugar me gustaría usar una docroot completamente diferente para la página de retención.
apache-2.2
ip
virtualhost
ithinkihaveacat
fuente
fuente
Respuestas:
No sé si eso es posible (sin mod_rewrite, de todos modos) en el nivel de Apache.
Aquí hay otra idea. ¿Qué sucede si configura dos hosts virtuales Apache y luego usa iptables para reenviar de forma transparente al visitante para corregir el host virtual? Algo como
O algo similar. :)
fuente
Realmente no sería un host virtual diferente. Pero usando algo como mod_rewrite o mod_alias puede servir contenido de cualquier carpeta para la que haya establecido los permisos apropiados. Solo hay un docroot, pero puedes cambiarlo efectivamente sobre la marcha.
Una forma de hacerlo podría ser:
Sin embargo, tenga en cuenta que probablemente sería un poco más limpio manejar esto con un subdominio de desarrollo.
fuente
Apache 2.3 o posterior
Con Apache 2.3 o posterior, aparentemente puede hacer algo como esto (probado):
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.Debe habilitar
mod_rewrite
lo que puede hacer en Debian / Ubuntu con este comando: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 correosPOST
electrónicos se cambian silenciosamenteGET
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.
Luego puede usar este
iptables
comando para enrutar solicitudes desde su dirección IP en el puerto 80 al puerto 1222:Cambie
-A
a-D
para eliminar la regla.Tenga en cuenta que los documentos sugieren que necesita agregar comandos
Listen
y adicionalesNameVirtualHost
, pero en realidad descubrí que funciona sin ellos, y agregarlos hizo que se rompiera (al menos en ubuntu).fuente
Alias cannot occur within <Directory/Location/Files> section
alguna solución? Realmente necesito esto: $AFAIK, la única manera de hacer esto es vincular una ubicación dentro de la raíz del documento a su contenido fuera de la raíz del documento, luego reescribir la solicitud para eso.
fuente
Como dijo @Timmmm, pero corrigiendo la instrucción ipmatch (tenga en cuenta el '10 .10.10.10 '): ServerName www.example.com
Porque de lo contrario, mostrará el error:
fuente