Mapeie x.com/staging para outro servidor
Supondo que você esteja executando no Apache, o proxy pode fazer o truque. A execução de um proxy reverso no Apache sugere que o seguinte pode funcionar, mas eu não testei:
ProxyPreserveHost on
ProxyPass /staging/ http://y.y.y.y/
ProxyHTMLURLMap http://y.y.y.y /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>
Acima, uma pasta virtual /staging
mapeia tudo de http://x.com/staging/
para /
no outro endereço IP. Para continuar usando x.com
como host, adicionei ProxyPreserveHost .
Tudo isso precisará da barra final; alguma reescrita padrão poderia acrescentar isso quando necessário:
# Add trailing slash if omitted
RewriteRule ^staging$ /staging/ [R=302,L]
Evite compartilhar cookies: use um domínio dedicado
No entanto, para evitar problemas muito desagradáveis com cookies de sessão, eu preferiria um domínio dedicado (de preferência nem mesmo algum subdomínio de x.com
). Para isso, remova todas as referências a staging
acima. E para ainda enviar o nome de domínio esperado, suponho que se poderia adicionar um adicional:
RequestHeader set Host x.com
Ao usar esse domínio dedicado, o Apache também não precisará reescrever nenhuma URL relativa, como /some/page
em /staging/some/page
. No entanto, isso pode implicar que você não notará falhas ao reescrever URLs absolutos (especialmente possíveis quando o JavaScript está envolvido). Como uma falha ao reescrever http://x.com/some/page
de volta para http://client.mycompany.com/some/page
, pode passar despercebido se a mesma URL existir no servidor de produção e o navegador buscar isso diretamente. Isso pode ser um benefício ou pode ser um desastre quando você ainda está conectado ao servidor de produção e acha que está alterando o conteúdo no servidor de teste ...
Usando o .htaccess
Apenas para a posteridade, imaginei que também era possível usar algo como o seguinte em um arquivo .htaccess
:
# Does NOT work (for me). On the target server, this gets me:
# HTTP_HOST = y.y.y.y - 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://y.y.y.y/$1 [L,P]
ProxyPassReverse / http://y.y.y.y/
No entanto, ProxyPassReverse
parece não ser permitido em .htaccess
. E alguns testes básicos parecem revelar que o [P]
proxy também sempre adiciona seu próprio Host
header, e traduz meu Host
em X-Forwarded-Host
. Isso pode muito bem estar relacionado à hospedagem virtual compartilhada que eu usei para algum teste rápido. Mas ProxyPreserveHost
não pode ser usado em .htaccess
.
Veja o mod_proxy do Apache, mod_headers e mod_rewrite documentação.