Roteamento para proxy e injeção de código em arquivos atendidos na rede local

4

Estou tentando criar um Open Device Lab .

Esta questão se concentra no roteamento de rede e na injeção de código nas respostas às solicitações feitas pelos dispositivos de teste.

Eu quero que as pessoas possam entrar com seus laptops e testá-las o mais dolorosamente possível. Eu quero que os desenvolvedores sejam capazes de:

  • inspecione os navegadores de dispositivos móveis,
  • não precisa atualizar todas as páginas na alteração do arquivo e
  • não precisa navegar em cada dispositivo separadamente.

Para conseguir isso, optei por usar as seguintes tecnologias (respectivamente):

Todas essas tecnologias exigem snippets de JavaScript nas páginas da Web solicitadas para abrir e manter conexões de soquete com um programa do servidor. Eu quero usar um servidor proxy para injetar esses trechos.

Abaixo está uma imagem de como planejo configurar a rede de testes:

Euexplicareirapidamenteospapéisdasdiferentespartesdolaboratório:

Servidordaweblocal+dispositivodeteste

Estamáquinaéamáquinacomaqualumdesenvolvedorentraria,executandoumservidordaWebdesuaescolha(Apache,Nginx,IIS,qualquerqueseja,nãoimporta).Issofuncionacomoumdispositivodeteste.OdesenvolvedorteráqueinstalaralgumsoftwarequenotifiqueoservidorLiveReloadquandoumarquivoforalterado(como guard-livereload ). Ele se conectará ao roteador via WiFi.

Dispositivos de teste

Estes são os dispositivos móveis que são a razão pela qual o laboratório está aqui. As páginas da web que eles renderizam serão inspecionáveis usando o Weinre, atualizarão a alteração do arquivo usando o LiveReload e navegarão quando qualquer outro dispositivo navegar usando o Shim. Eles vão se conectar via Wi-Fi ao roteador.

Roteador

O roteador usará o servidor proxy para todas as solicitações atendidas na porta 80. Ele também usará a máquina do servidor proxy como um servidor DNS.

Servidor proxy

Este servidor é mais do que apenas um servidor proxy. Suas tarefas são:

  • um servidor DNS (para que os domínios de teste locais funcionem sem ter que configurar cada dispositivo separadamente, pensando em usar o Smbind para isso),
  • um servidor proxy (para injetar os snippets de JavaScript),
  • um servidor weinre (para poder inspecionar qualquer cliente WebKit conectado),
  • um servidor LiveReload (para sinalizar a todos os navegadores conectados para atualizar a página inteira ou alguns de seus recursos quando apropriado),
  • um servidor Shim (para sinalizar todos os navegadores conectados para navegar quando apropriado) e
  • um acelerador de velocidade de rede (para simular conexões lentas).

TL; DR

Estou lutando com o seguinte:

  • Qual software proxy pode injetar código nas solicitações?
  • Como faço para injetar o código somente em solicitações da porta local 80 que são HTML (conforme indicado pelo tipo MIME) e contêm </body> ('local' refere-se à rede de teste, não solicitações que saem para a Internet mais ampla )? Além disso, o código precisa ser injetado bem na frente de </body> .
  • Como faço a rota transparente de todo o tráfego através do proxy (para que eu possa injetar código e acelerar o acelerador), ou seja, minha configuração atual funciona?

Eu apreciaria muito seus pensamentos.

    
por Xandor Schiefer 31.01.2013 / 16:16

2 respostas

1

Embora eu aprecie a sugestão do ICAP, os servidores ICAP de código aberto estão desatualizados e / ou mal documentados. Passei alguns dias tentando configurar a solução ICAP, sem dados.

Então eu mudei para o Apache como proxy. Configurei-o como um proxy de encaminhamento transparente e configurei a cadeia de filtros para inflar (se o conteúdo foi esvaziado), fazer uma substituição e esvaziar (se originalmente esvaziado). Isso funciona como um encanto.

Em termos de roteamento de todo o tráfego por meio do proxy, tenho pontos de acesso separados para todos os dispositivos e o servidor da Web local. Eles estão em sub-redes diferentes, portanto, o roteador (o mesmo que a máquina proxy) precisa rotear o tráfego entre os dois e envia o tráfego através do proxy.

Com apenas um ponto de acesso, tive o problema de que o tráfego de saída passou pelo proxy, mas o tráfego local não o fez.

Vou publicar uma descrição muito mais detalhada de como configuro o laboratório de dispositivos quando terminar. Eu ainda estou descobrindo algumas coisas (não relacionadas a essa questão).

    
por 01.03.2013 / 08:07
2

O recurso que você possivelmente está procurando é o ICAP (Internet Content Adaptation Protocol) .

Existe um framework Python que lida com ele ( link ), e o próprio Squid pode ter o recurso agora ( pelo menos em desenvolvimento ).

Há mais informações (e uma lista de outros servidores ICAP) no Wiki do Squid, no link

    
por 31.01.2013 / 18:11