Nginx proxy reverso

Nginx proxy reverso

O que é um proxy reverso?

Um servidor proxy é o que fala com a Internet em seu nome. Por exemplo, se a rede da sua faculdade bloqueou https: // www.Facebook.com/mas o domínio https: // exemploproxy.com ainda está acessível, então você pode visitar o último e encaminhará todos os seus pedidos de servidores do Facebook para o Facebook e enviará pelas respostas do Facebook de volta ao seu navegador.

Para recapitular, um proxy envia solicitações em nome de um dos mais clientes para qualquer servidor na Internet. Um proxy reverso se comporta de maneira semelhante.

A proxy reverso recebe solicitação de todo e qualquer cliente em nome de um ou mais servidores. Então, se você tiver alguns servidores que hospedam WW1.exemplo.com e Segunda Guerra Mundial.exemplo.Com um servidor proxy reverso pode aceitar solicitações em nome dos dois servidores, encaminhar essas solicitações para seus respectivos pontos finais em que a resposta é gerada e enviada de volta ao proxy reverso para ser encaminhado de volta aos clientes.

A configuração

Antes de começarmos a ajustar arquivos de configuração nginx e fazer um servidor de proxy reverso. Eu quero colocar em pedra como é a minha configuração, então quando você está tentando implementar seu design, seria menos confuso.

Eu usei a plataforma do Digitalocean para girar três VPs. Eles estão todos na mesma rede, cada um com seu próprio IP privado, e apenas um VPS tem um IP público estático (este será o nosso servidor de proxy reverso.)

VM/HostName IP privado IP Público Papel
Reverseproxy 10.135.123.187 159.89.108.14 Proxy reverso, executando nginx
Nó-1 10.135.123.183 N / D Executando o primeiro site
Nó-2 10.135.123.186 N / D Executando o segundo site

Os dois sites diferentes que estão em execução têm nomes de domínio WW1.ranvirslog.com e WW2.ranvirslog.com E ambos os registros A apontam para o IP público da reverseproxy, eu.E, 159.89.108.14

A idéia por trás do IP privado é que, as três VMs podem conversar umas com as outras através deste IP privado, mas um usuário remoto pode acessar apenas a VM proxy reversa em seu IP público. Isso é importante para ter em mente. Por exemplo, você não pode ssh em nenhuma das vm usando seu IP privado.

Além disso, o Node-1 e o Node-2 têm um servidor da Web Apache que serve duas páginas da web distintas. Isso nos ajudará a distinguir um do outro.

O primeiro site diz “O site 1 funciona!!!”

Da mesma forma, o segundo site mostra isso:

Seus sites podem diferir, mas se você deseja replicar essa configuração como ponto de partida, execute o APT Install Apache2 no Node-1 e Node-2. Em seguida, edite o arquivo/var/www/html/index.HTML para que o servidor da web diga o que você quiser dizer.

A VM reverseproxy ainda está intocada. Todas as VMs estão executando o Ubuntu 18.04 LTS, mas você é livre para usar qualquer outro sistema operacional que quiser. Você pode até imitar isso usando recipientes do Docker. Ao criar uma rede de ponte Docker definida pelo usuário e recipientes de desova, você pode atribuir a cada contêiner um IP privado e encaminhar todo o proxy HTTP/HTTPS a um contêiner, que seria nosso contêiner de proxy reverso nginx.

Até agora tudo bem.

Configuração padrão nginx

Vamos começar instalando o nginx no servidor reverseproxy, estou usando o Ubuntu, então o apt é meu gerenciador de pacotes:

$ sudo apt install nginx

Removendo a configuração padrão se você estiver usando a distribuição baseada no Debian

Antes de prosseguirmos com uma pequena nota sobre a configuração do Nginx. Todos os vários arquivos de configuração são armazenados em /etc /nginx, incluindo o nginx.arquivo confer que é o principal arquivo de configuração. Se olharmos para o conteúdo deste arquivo (dentro do bloco HTTP), você notará as duas linhas a seguir:

..
incluir/etc/nginx/conf.d/*.conf;
incluir/etc/nginx/sites-habilitado/*;
..

A segunda linha inclui todos os arquivos no diretório habilitado para sites para a configuração do Nginx. Esta é a prática padrão na maioria das distribuições baseadas em Debian. Por exemplo, a página da web “Bem-vindo ao Nginx” possui um arquivo correspondente chamado Padrão no local/etc/nginx/sites que estão disponíveis/padrão com um symlink para/etc/nginx/sites-habilitados/, mas não precisamos disso página da web padrão para que possamos remover com segurança o symlink. O original ainda está disponível no diretório disponível.

$ rm/etc/nginx/sites-habilitados/inadimplacente

Mas quando criaremos a configuração de proxy reversa, faremos isso em confê.diretório D (com nosso nome de arquivo com um .Extensão confiada) Isso é universal, e funciona em todas as distribuições não apenas Debian ou Ubuntu.

Removendo a configuração padrão para outras distros

Se você não estiver usando distro baseado no Debian, encontrará o padrão Página de boas -vindas Configuração em/etc/nginx/conf.D/Padrão.Conf basta mover o arquivo para algum lugar seguro, se você quiser usá -lo no futuro (já que este não é um symlink)

$ mv/etc/nginx/conf.D/Padrão.conf ~/padrão.conf

Às vezes, pode ser encontrado em/etc/nginx/padrão.D porque as pessoas simplesmente não podem concordar com um único padrão simples! Então você teria que cavar um pouco no diretório /etc /nginx, para descobrir isso.

Adicionando blocos de proxy reverso

Como afirmado anteriormente, os dois nomes de domínio diferentes que estou hospedando por trás desse proxy são

  1. ranvirslog.com (Site 1) com IP 10.135.123.183
  2. ranvirslog.com (Site 2) com IP 10.135.123.186

Então, vamos criar um arquivo por site em/etc/nginx/conf.D/ Pasta. Então, estamos bem organizados.

$ touch/etc/nginx/conf.D/WW1.conf
$ touch/etc/nginx/conf.D/WW2.conf

Você pode nomear os arquivos o que quiser, desde que tenha um .conf no final de seu nome.

No primeiro arquivo WW1.Conf adicione as seguintes linhas:

servidor
Ouça 80;
Ouça [::]: 80;
Server_name WW1.ranvirslog.com;
Localização /
proxy_pass http: // 10.135.123.183/;
proxy_buffering off;
proxy_set_header x-real-ip $ remote_addr;

As declarações de escuta diz ao Nginx para ouvir na porta 80 para casos IPv4 e IPv6. Em seguida, ele verifica se o server_name é ww1.ranvirslog.com então o bloco de localização entra em ação e proxies a solicitação para http: // 10.135.123.183/ com buffers desligado. Além disso, a linha proxy_set_header… garante que o IP original do cliente seja encaminhado para o servidor proxado. Isso é útil, caso você queira calcular o número de visitantes únicos, etc. Caso contrário, o servidor proxado teria apenas um visitante - o servidor nginx.

A opção de buffer e as opções Set_Header são completamente opcionais e são adicionadas para tornar o proxy o mais transparente possível. Para a Segunda Guerra Mundial.ranvirslog.com site com, adicionei a seguinte configuração em/etc/nginx/conf.D/WW2.conf:

servidor
Ouça 80;
Ouça [::]: 80;
Server_name WW2.ranvirslog.com;
Localização /
proxy_pass http: // 10.135.123.186/;
proxy_buffering off;
proxy_set_header x-real-ip $ remote_addr;

Salve os arquivos e teste se a configuração geral é válida ou não:

$ sudo nginx -t

Se houver erros, a saída do comando acima ajudará você a encontrá -los e corrigi -los. Agora reinicie o servidor:

$ service nginx reiniciar

E você pode testar se funcionou ou não visitando os diferentes nomes de domínio em seu navegador e vendo o resultado.

Conclusão

O caso de uso de cada indivíduo é diferente. A configuração mencionada acima pode precisar de um pouco de ajustes para funcionar para o seu cenário. Talvez você esteja executando vários servidores no mesmo host, mas em portas diferentes, nesse caso a linha proxy_pass… terá http: // localhost: portNumber/como seu valor.

Esses detalhes dependem muito do seu caso de uso. Para mais detalhes sobre outras opções e túnicos, consulte os documentos oficiais do Nginx.