Ocultar o caminho para o back-end com o Nginx

5

Eu tenho o OpenNMS em execução no host B-beta com o seguinte URL:

http://b-beta:8980/opennms

Eu gostaria de usar o NginX para esconder este caminho acessível do host a-alpha assim:

https://a-alpha/omber/nms

Então eu acho que o que eu preciso é reescrever os pedidos enviados para o backend para mudar o caminho de / omber / nms para / opennms - mas sem que seja visível para o usuário - isso é algo que pode ser feito?

O HTTPS já funciona bem.

    
por Lukasz 20.04.2012 / 21:42

1 resposta

4

O primeiro passo é fazer o proxy dos pedidos do Nginx para o seu outro servidor. Em um alfa:

location /ombre/nms {
    proxy_pass http://b-beta:8980/opennms
}

A partir daqui, as configurações restantes são muito dependentes do funcionamento do OpenNMS (com o qual não estou familiarizado).

A próxima parte é lidar com redirecionamentos. Se as solicitações vierem do lado do cliente (por exemplo, seus formulários POST para um URL no b-beta ou se houver links apontando para o b-beta), será necessário resolvê-los separadamente do Nginx. Lembre-se de que o navegador não está ciente do proxy - portanto, ele enviará solicitações sem modificação para o servidor.

Se você olhar a página de login do OpenNMS (por exemplo, a demonstração ao vivo ). O formulário de login POSTs para opennms/j_spring_security_check . Um login bem-sucedido resulta em:

  • um redirecionamento 302 para opennms , seguido por
  • um redirecionamento 302 para opennms/frontPage.htm seguido por
  • um redirecionamento 302 para opennms/index.jsp .

Usando o Nginx, você não pode (facilmente) alterar o caminho para o qual os POSTs do formulário (que provavelmente é uma opção de configuração do OpenNMS), mas você pode alterar os redirecionamentos que retornam ao navegador. Existem algumas diretrizes a serem consideradas:

proxy_redirect : Se você precisar modificar o redirecionamento (isto é, o cabeçalho do local) sendo retornado ao navegador

proxy_redirect http://b-beta:8980/opennms/ http://a-alpha/ombre/nms/; 

Isso deve ser equivalente a proxy_redirect default se estiver contido no bloco de localização acima.

rewrite ... break : Se você precisar modificar o caminho que está sendo enviado para o opennms (break significa que somente o bloco de localização atual será processado).

rewrite /ombre/nms/a/(.*) /opennms/b/$1 break;

proxy_set_header : se você precisar modificar alguns dos cabeçalhos enviados para o back-end.

Por padrão, o Nginx definirá o cabeçalho do host como $proxy_host . Se você configurar o OpenNMS no b-beta para atuar como se estivesse rodando em a-alpha (por exemplo, dizer que o domínio é o alfa, os bloqueios do servidor de configuração correspondem a alfa, etc), então você precisará passar Cabeçalho do host como é recebido por um alfa em vez de deixar o Nginx modificá-lo:

proxy_set_header Host $host;
    
por 25.04.2012 / 02:11

Tags