Por que o lighttpd ou o proxy Apache2 mudam minha URL ao acessar index.html?

1

Eu tenho uma configuração um pouco complicada, com um servidor da Web Apache 2 sendo o gatekeeper e o tráfego de proxy com base no domínio de entrada:

<VirtualHost *:80>
  ServerName example.org

  RewriteEngine On
  RewriteRule ^/(.*) http://localhost:3000/$1 [P]
</VirtualHost>

Executando sob localhost:3000 Eu tenho um lighttpd em execução que serve conteúdo estático e age como um proxy reverso para dois outros serviços, sendo executado nas portas 3001 e 3002. A configuração é assim:

# lighttpd will also be used to forward requests to node.js
server.modules = (
  "mod_proxy"
)

# This config is meant to work relative to certain directories,
# it is not meant to be used somewhere globally in /etc/
var.projectRoot = var.CWD

# Setting up paths
server.document-root = var.projectRoot + "/client"

# Port to listen on
server.port          = 3000

# We don't want to provide names of individual files
index-file.names = ( "index.html" )

# Serve all API calls to the API server
$HTTP["url"] =~ "^/api/.*$" {
  proxy.server  = ( "" => (
      ( "host" => "127.0.0.1", "port" => 3001 )
    )
  )
}

# Serve all pages that are not known as static or api routes
# to the page instance
$HTTP["url"] !~ "^/(assets|game|ige|api).*$" {
  proxy.server  = ( "" => (
      ( "host" => "127.0.0.1", "port" => 3002 )
    )
  )
}

Toda a configuração funciona bem nos seguintes casos:

  • GET /assets/textures/sources.txt exibe um arquivo estático do diretório client .
  • GET /api/games/byId/123 recupera os dados corretos do servidor da API na porta 3001
  • GET / recupera a página da porta 3002

No entanto, a solicitação GET /game (em que a pasta game tem um arquivo index.html ) é exibida, mas altera a URL para http://localhost:3000/game . Ou para ser mais preciso: Ele muda para qualquer URL que eu tenha especificado no vhost do Apache2, Se eu colocar example.org:3000 lá, ele tentará servir example.org:3000/game , Ignorando a diretiva de proxy [P].

As coisas somente dão errado quando o lighttpds "reescreve" para entregar folder/index.html arquivos para folder/ solicitações. Alguém pode me dizer por quê?

O comportamento é o mesmo para o Chrome e o Firefox e não recebo redirecionamentos HTTP.

    
por Marcus Riemer 13.01.2013 / 13:19

1 resposta

1

Pode ser algum redirecionamento sendo feito pelo servidor lighttpd, já que você não tem uma diretiva ProxyPassReverse especificada (ele também funciona com RewriteRule ). Dito isso, não vejo nada sobre sua configuração que exija especificamente o mod_rewrite para executar esse proxy: é uma prática recomendada evitar usá-lo quando houver diretivas dedicadas para executar o trabalho.

Você se importaria de tentar isso?

<Location />
    ProxyPass        http://localhost:3000
    ProxyPassReverse http://localhost:3000
</Location>
    
por 13.01.2013 / 19:47