Configurando aplicação NODEJS com proxy reverso NGINX - DigitalOcean & Nodejs
Índice:
- Pré-requisitos
- Usando o Nginx como um proxy reverso
- Passando cabeçalhos de solicitação
- Configurando o Nginx como um proxy reverso para um servidor com proxy não HTTP
- Opções comuns de proxy reverso do Nginx
- Conclusão
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
.
/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õeskeepalivevocê 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_upgradeeConnection "upgrade"- Esses campos de cabeçalho são necessários se o aplicativo estiver usando Websockets.Host $host- A variável$hostna 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 deHostou 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 paraX-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.
nginxWiMax Forum Configurando o Laboratório de Certificação na Índia
O WiMax Forum está montando um laboratório de certificação na Índia seguindo a decisão do governo local de…
Configurar o odoo com nginx como um proxy reverso
O Odoo vem com um servidor da Web incorporado, mas na maioria dos casos, é recomendável ter um proxy reverso à frente, que funcionará como um intermediário entre os clientes e o servidor Odoo. Este guia fornece instruções sobre como usar o Nginx como um proxy reverso para o Odoo.
Configurando o log de erro e acesso nginx
O Nginx grava registros de seus eventos em dois tipos de logs: logs de acesso e logs de erro. Os logs de acesso gravam informações sobre solicitações do cliente e os logs de erros gravam informações sobre os problemas do servidor e do aplicativo.







