Android

Configurando um proxy reverso nginx

Configurando aplicação NODEJS com proxy reverso NGINX - DigitalOcean & Nodejs

Configurando aplicação NODEJS com proxy reverso NGINX - DigitalOcean & Nodejs

Índice:

Anonim

Um proxy reverso é um serviço que recebe uma solicitação do cliente, envia a solicitação para um ou mais servidores com proxy, busca a resposta e entrega a resposta do servidor ao cliente.

Devido ao seu desempenho e escalabilidade, o NGINX é frequentemente usado como proxy reverso para servidores HTTP e não HTTP. Uma configuração típica de proxy reverso é colocar o Nginx na frente dos aplicativos Node.js, Python ou Java.

O uso do Nginx como proxy reverso oferece vários benefícios adicionais:

  • Balanceamento de carga - O Nginx pode executar o balanceamento de carga para distribuir solicitações dos clientes entre servidores proxy, o que melhora o desempenho, a escalabilidade e a confiabilidade. Armazenamento em cache - Com o Nginx como um proxy reverso, você pode armazenar em cache as versões pré-renderizadas das páginas para acelerar o tempo de carregamento das páginas. Ele funciona armazenando em cache o conteúdo recebido das respostas dos servidores em proxy e usando-o para responder aos clientes sem precisar entrar em contato com o servidor em proxy para o mesmo conteúdo todas as vezes. Terminação SSL - Nginx pode atuar como um terminal SSL para conexões com os clientes. Ele manipulará e descriptografará as conexões SSL de entrada e criptografará as respostas do servidor em proxy. Compactação - Se o servidor em proxy não enviar respostas compactadas, você poderá configurar o Nginx para compactar as respostas antes de enviá-las aos clientes. Atenuando ataques DDoS - Você pode limitar as solicitações recebidas e o número de conexões por endereço IP único a um valor típico para usuários comuns. O Nginx também permite bloquear ou restringir o acesso com base na localização do cliente e no valor dos cabeçalhos da solicitação, como "User-Agent" e "Referer".

Este artigo descreve as etapas necessárias para configurar o Nginx como um proxy reverso.

Pré-requisitos

Supomos que você tenha o Nginx instalado no servidor Ubuntu, CentOS ou Debian.

Usando o Nginx como um proxy reverso

Para configurar o Nginx como um proxy reverso para um servidor HTTP, abra o arquivo de configuração de blocos do servidor do domínio e especifique um local e um servidor proxy dentro dele:

server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }

A URL do servidor em proxy é configurada usando a diretiva proxy_pass e pode usar HTTP ou HTTPS como protocolo, nome de domínio ou endereço IP e uma porta e URI opcionais como endereço.

A configuração acima informa ao Nginx para passar todas as solicitações para o local /app para o servidor proxy em http://127.0.0.1:8080 .

Nas distribuições baseadas no Ubuntu e Debian, os arquivos de bloqueio do servidor são armazenados no diretório /etc/nginx/sites-available , enquanto no CentOS no diretório /etc/nginx/conf.d .

Para ilustrar melhor como as diretivas location e proxy_pass funcionam, vamos proxy_pass o seguinte exemplo:

server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }

Se um visitante acessar http://example.com/blog/my-post , o Nginx fará proxy desta solicitação para http://node1.com:8000/wordpress/my-post .

Quando o endereço do servidor proxy contém um URI, ( /wordpress/ ), o URI da solicitação passado ao servidor proxy é substituído por um URI especificado na diretiva. Se o endereço do servidor em proxy for especificado sem um URI, o URI de solicitação completo será passado para o servidor em proxy.

Passando cabeçalhos de solicitação

Quando o Nginx faz proxy de uma solicitação, ele define automaticamente dois campos de cabeçalho em uma solicitação de proxy do cliente, Host e Connection , e remove os cabeçalhos vazios. Host está definido para a variável $proxy_host e o Connection está definido para fechar.

Para ajustar ou definir cabeçalhos para conexões com proxy, use a diretiva proxy_set_header , seguida pelo valor do cabeçalho. Você pode encontrar uma lista de todos os cabeçalhos de solicitação disponíveis e seus valores permitidos aqui. Se você deseja impedir que um cabeçalho seja passado para o servidor proxy, defina-o como uma string vazia "" .

No exemplo a seguir, estamos alterando o valor do campo de cabeçalho Host para $host e removendo o campo de cabeçalho Accept-Encoding , definindo seu valor como uma sequência vazia.

location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }

Sempre que você modifica o arquivo de configuração, é necessário reiniciar o serviço Nginx para que as alterações tenham efeito.

Configurando o Nginx como um proxy reverso para um servidor com proxy não HTTP

Para configurar o Nginx como um proxy reverso para um servidor com proxy não HTTP, você pode usar as seguintes diretivas:

  • fastcgi_pass - proxy reverso para um servidor FastCGI. uwsgi_pass - proxy reverso para um servidor uwsgi. scgi_pass - proxy reverso para um servidor SCGI. memcached_pass - proxy reverso para um servidor Memcached.

Um dos exemplos mais comuns é usar o Nginx como um proxy reverso para o PHP-FPM:

server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }

Opções comuns de proxy reverso do Nginx

Atualmente, a veiculação de conteúdo por HTTPS se tornou um padrão. Nesta seção, daremos um exemplo da configuração do proxy reverso HTTPS Nginx, incluindo os parâmetros e cabeçalhos recomendados do proxy Nginx.

location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }

  • proxy_http_version 1.1 - Define a versão do protocolo HTTP para proxy, por padrão, ela é definida como 1.0. Para Websockets e conexões keepalive você precisa usar a versão 1.1. proxy_cache_bypass $http_upgrade - Define as condições sob as quais a resposta não será obtida de um cache. Upgrade $http_upgrade e Connection "upgrade" - Esses campos de cabeçalho são necessários se o aplicativo estiver usando Websockets. Host $host - A variável $host na seguinte ordem de precedência contém: nome do host da linha de solicitação ou nome do host do campo de cabeçalho da solicitação de Host ou o nome do servidor que corresponde a uma solicitação. X-Real-IP $remote_addr - Encaminha o endereço IP remoto do visitante real para o servidor proxy. X-Forwarded-For $proxy_add_x_forwarded_for - Uma lista contendo os endereços IP de todos os servidores pelos quais o cliente foi submetido a proxy. X-Forwarded-Proto $scheme - Quando usado dentro de um bloco de servidor HTTPS, cada resposta HTTP do servidor em proxy é reescrita para X-Forwarded-Host $host - Define o host original solicitado pelo cliente. X-Forwarded-Port $server_port - Define a porta original solicitada pelo cliente.

Conclusão

Você aprendeu como usar o Nginx como um proxy reverso. Também mostramos como passar parâmetros adicionais para o servidor e modificar e definir campos de cabeçalho diferentes em solicitações por proxy.

nginx