Una manera fácil de ver un sitio web en un IP diferente de asociado con hostname?

Algunos antecedentes – WordPress es realmente molesto en términos de qué nombre de host que acceder a él, lo que hace que la creación de entornos de prueba bastante doloroso (Es decir, podría crear un subdominio para la puesta en escena, yxcom , pero WordPress establecería todos los enlaces en la base de datos como Ser de allí y no x.com , que es donde van a ser tan pronto como hago el cambio de DNS). Para evitar esto, he configurado un alias en mi archivo / etc / hosts, así que no tengo que seguir cambiando el nombre de dominio en la configuración de WP.

En otras palabras: ahora mismo tengo un sitio en vivo ejecutándose en IP x y hostname x.com . Quiero dejar el sitio en ejecución y configurar una máquina de x.com en IP y , accedida a través del nombre de host x.com , usando una entrada en el /etc/hosts anteriormente mencionado.

Mi pregunta: ¿Cómo puedo mostrar la máquina de ensayo al cliente sin tener que editar su archivo / etc / hosts? ¿Hay un servicio en línea que configura un iframe y le muestra una IP en particular como un nombre de host particular?

¡Gracias!

Edit: No estoy preguntando cómo configurar mis registros de DNS; Son buenos por el momento. Puedo navegar a la máquina de ensayo simplemente escribiendo su IP en la barra de direcciones, y WordPress carga y todo es genial, excepto todos los enlaces son x.com , y al hacer clic en ellos me lleva al sitio de producción en vivo. Puedo corregir esto poniendo una entrada en el archivo de los hosts mi máquina local (IE, /etc/hosts ), que substituye los expedientes públicos del DNS al sitio vivo y en lugar de otro me muestra la máquina de puesta en escena. Estoy esencialmente queriendo una manera de hacer esto fácilmente para mi cliente, es decir, sin él tener que editar su archivo de hosts .

Mapa x.com/staging a otro servidor

Suponiendo que se esté ejecutando en Apache, proxy puede hacer el truco. La ejecución de un proxy inverso en Apache sugiere que lo siguiente podría funcionar, pero no lo probé:

 ProxyPreserveHost on ProxyPass /staging/ http://yyyy/ ProxyHTMLURLMap http://yyyy /staging <Location /staging/> ProxyPassReverse / ProxyHTMLEnable On ProxyHTMLURLMap / /staging/ # We need to peek into the HTML, so ensure we don't get gzip'd content: RequestHeader unset Accept-Encoding </Location> 

Arriba, una carpeta virtual /staging todos desde http://x.com/staging/ a / en la otra dirección IP. Para seguir utilizando x.com como el host, he añadido ProxyPreserveHost .

Todo esto necesitará la barra inclinada; Algunos reescritura estándar podría añadir que cuando sea necesario:

 # Add trailing slash if omitted RewriteRule ^staging$ /staging/ [R=302,L] 

Evite compartir cookies: use un dominio dedicado

Sin embargo, para evitar problemas muy desagradables con las cookies de sesión, preferiría un dominio dedicado (preferiblemente ni siquiera un subdominio de x.com ). Para ello, quite todas las referencias a la staging en staging arriba. Y para enviar todavía el nombre de dominio esperado, supongo que uno podría agregar un adicional:

 RequestHeader set Host x.com 

Al utilizar dicho dominio dedicado, Apache también no tendrá que volver a escribir ninguna URL relativa, como /some/page en /staging/some/page . Sin embargo, esto podría implicar que no notará fallas en la reescritura de URLs absolutas (especialmente posible cuando JavaScript está involucrado). Al igual que un fallo al volver a escribir http://x.com/some/page nuevo en http://client.mycompany.com/some/page puede pasar desapercibido si existe la misma URL en el servidor de producción y el buscador recopila directamente . Eso podría ser un beneficio, o podría ser un desastre cuando todavía estás conectado al servidor de producción y piensas que estás cambiando contenido en el servidor de prueba …

Usando .htaccess

Sólo para la posteridad, antes me imaginé uno también podría utilizar algo como lo siguiente en un archivo. .htaccess :

 # Does NOT work (for me). On the target server, this gets me: # HTTP_HOST = yyyy - from the proxy request? Expected x.com # HTTP_X_FORWARDED_HOST = x.com - from Host # HTTP_X_MY_DUMMY = x.com - from X-My-Dummy, as expected RewriteEngine On RequestHeader set Host x.com RequestHeader set X-My-Dummy x.com RewriteRule ^(.*) http://yyyy/$1 [L,P] ProxyPassReverse / http://yyyy/ 

Sin embargo, ProxyPassReverse no parece estar permitido en .htaccess . Y algunas pruebas básicas parecen revelar que el proxy [P] también siempre agrega su propio encabezado de Host , y traduce mi Host en X-Forwarded-Host . Esto podría muy bien estar relacionado con el alojamiento virtual compartido que utilicé para una prueba rápida. Pero ProxyPreserveHost no se puede utilizar en .htaccess .

Consulte la documentación de mod_proxy , mod_headers y mod_rewrite de Apache.

No se puede enlazar un mismo nombre de host a ip diferentes. Tienes que editar tus registros DNS para apuntar el dominio hacia la máquina de ensayo o tienes que hacer cambios en la resolución del host local a través del archivo hosts.

También puede agregar una variable de comprobación / condición a través de PHP o de otro idioma de su sitio se está ejecutando con, si está presente abrirá su sitio web en la máquina de ensayo por ejemplo http://examplesite.com/?staging=true

Otra forma es un servidor proxy normal (como Squid ) y un /etc/hosts editado en el servidor proxy.

Cuando utiliza un proxy HTTP, el navegador del cliente no realiza una búsqueda de DNS para x.com, sino que se conecta al servidor proxy y le indica que se conecte a x.com. Debido a que ha doblado x.com a otro IP en el servidor proxy, obtiene los resultados del servidor de ensayo.