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.