Nginx

Proxy reverso Nginx

Proxy reverso Nginx

O que é um proxy reverso?

Um servidor proxy é aquele que se comunica com a Internet em seu nome. Por exemplo, se a rede da sua faculdade bloqueou https: // www.Facebook.com / mas o domínio https: // exampleproxy.com ainda está acessível, então você pode visitar o último e ele encaminhará todas as suas solicitações de servidores do Facebook para o Facebook e enviará as respostas do Facebook de volta para o seu navegador.

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

UMA proxy reverso recebe solicitação de todo e qualquer cliente em nome de um ou mais servidores. Então, se você tiver alguns servidores hospedando ww1.exemplo.com e ww2.exemplo.com um servidor proxy reverso pode aceitar solicitações em nome dos dois servidores, encaminhar essas solicitações para seus respectivos pontos de extremidade, onde a resposta é gerada e enviada de volta ao proxy reverso para ser encaminhada de volta aos clientes.

A configuração

Antes de começarmos a ajustar os arquivos de configuração do Nginx e fazer um servidor proxy reverso. Eu quero definir em pedra a aparência da minha configuração, então quando você estiver tentando implementar seu projeto, seria menos confuso.

Usei a plataforma 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 proxy reverso.)

VM / Nome do host IP privado IP Público Função
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 em execução têm nomes de domínio ww1.ranvirslog.com e ww2.ranvirslog.com e ambos os seus registros A apontam para o IP público do proxy reverso, i.e, 159.89.108.14

A ideia por trás do IP privado é que as três VMs podem se comunicar por meio desse IP privado, mas um usuário remoto só pode acessar o proxy reverso da VM em seu IP público. É importante ter isso em mente. Por exemplo, você não pode ssh em qualquer uma das VMs usando seu IP privado.

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

O primeiro site diz “WEBSITE 1 WORKS!!!”

Da mesma forma, o segundo site mostra isso:

Seus sites podem ser diferentes, mas se você quiser replicar esta configuração como ponto de partida, execute apt install apache2 no Node-1 e Node-2. Em seguida, edite o arquivo / var / www / html / index.html para que o servidor web diga o que você quiser.

A VM de proxy reverso ainda está intacta. Todas as VMs estão executando o Ubuntu 18.04 LTS, mas você está livre para usar qualquer outro sistema operacional que quiser. Você pode até mesmo emular isso usando contêineres Docker. Ao criar uma rede de ponte Docker definida pelo usuário e gerar contêineres nela, você pode atribuir a cada contêiner um IP privado e encaminhar todo o proxy HTTP / HTTPS para 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 de proxy reverso, estou usando o Ubuntu, então apt é meu gerenciador de pacotes:

$ sudo apt install nginx

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

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


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

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 padrão “Bem-vindo ao Nginx” tem um arquivo correspondente chamado default no local / etc / nginx / sites-available / default com um link simbólico para / etc / nginx / sites-enabled /, mas não precisamos disso página da web padrão para que possamos remover com segurança o link simbólico. O original ainda está disponível no diretório de sites disponíveis.

$ rm / etc / nginx / sites-enabled / default

Mas quando criarmos a configuração do proxy reverso, faremos isso na conf.diretório d (com nosso nome de arquivo tendo um .extensão conf) 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 uma distribuição baseada em Debian, você encontrará o padrão Página de boas-vindas configuração em / etc / nginx / conf.d / default.conf basta mover o arquivo para algum lugar seguro se você quiser usá-lo no futuro (uma vez que este não é um link simbólico)

$ mv / etc / nginx / conf.d / default.conf ~ / default.conf

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

Adicionar blocos de proxy reverso

Como afirmado antes, os dois nomes de domínio diferentes que estou hospedando por trás deste 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, somos bem organizados.

$ touch / etc / nginx / conf.d / ww1.conf
$ touch / etc / nginx / conf.d / ww2.conf

Você pode nomear os arquivos como desejar, desde que tenha um .conf no final do nome.

No primeiro arquivo ww1.conf adicione as seguintes linhas:

servidor
escute 80;
ouvir [::]: 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 instruções de escuta informam ao Nginx para escutar na porta 80 para casos IPv4 e IPv6. Em seguida, verifica se o server_name é ww1.ranvirslog.com então o bloco de localização entra em ação e encaminha a solicitação para http: // 10.135.123.183 / com buffer desativado. Além disso, a linha proxy_set_header… garante que o IP original do cliente seja encaminhado para o servidor proxy. Isso é útil caso você queira calcular o número de visitantes únicos, etc. Caso contrário, o servidor proxy teria apenas um visitante - o servidor Nginx.

As opções de buffering e set_header são completamente opcionais e foram apenas adicionadas para tornar o proxy o mais transparente possível. Para o ww2.ranvirslog.com site, adicionei a seguinte configuração em / etc / nginx / conf.d / ww2.conf:

servidor
escute 80;
ouvir [::]: 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 localizá-los e corrigi-los. Agora reinicie o servidor:

$ service nginx restart

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 alguns ajustes para funcionar em 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 obter mais detalhes sobre outras opções e ajustes, consulte os documentos oficiais do Nginx.

Mecanismos de jogos gratuitos e de código aberto para o desenvolvimento de jogos Linux
Este artigo cobrirá uma lista de mecanismos de jogo gratuitos e de código aberto que podem ser usados ​​para desenvolver jogos 2D e 3D no Linux. Exist...
Tutorial de Shadow of the Tomb Raider para Linux
Shadow of the Tomb Raider é a décima segunda adição à série Tomb Raider - uma franquia de jogos de ação e aventura criada pela Eidos Montreal. O jogo ...
Como aumentar o FPS no Linux?
FPS significa Quadros por segundo. A tarefa do FPS é medir a taxa de quadros em reproduções de vídeo ou desempenho de jogos. Em palavras simples, o nú...