Configurando Nginx em servidor Linux

By on 19 Jan 2023 | 20:00 .

Categories | | | |

Tempo de leitura: #

Visualizações: #

Olá pessoal, neste artigo gostaria de compartilhei com vocês como disponibilizar aplicações web em rede local utilizando proxy reverso do Nginx.

Sumário

Instalação

No Archlinux pra instalar o nginx basta utilizar o seguinte comando:

$ sudo pacman -S nginx

E para fazer funcionar basta cadastrar o serviço:

$ sudo systemctl enable nginx.service --now

E pronto, agoras tens uma instância Nginx rodando

Vale lembrar que se está utilizando um firewall você necessita habilitar a porta web, porta 80. Exemplo com ufw:

$ sudo ufw allow 80
$ sudo systemctl restart ufw.service

Configuração

A configuração do Nginx é sempre conforme a escolha do usuário, não há um único jeito de fazer as coisas, mas aqui vou mostrar como configurar uma diretório onde você poderá colocar arquivos de configuração separados para cada serviço web que vc desejar. Em contraste, normalmente as configuração para cada serviço possuem modelos definidos, então antes de colocar um serviço atrás do proxy reverso do Nginx, procure na internet, documentação oficial do serviço de preferência, como fazer o deploy de tal aplicação atrás do Nginx.

Para começar vamos definir o arquivo de configuração principal como:

/etc/nginx/nginx.conf:

user www-data www-data;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

events {
    worker_connections  1024;
}

http {
    include conf.d/apps/*.conf;

    server {
		listen 80 default_server;
		error_page 404 /404.html;
    }
}

Então, temos a definição de um usuário, sendo este o usuário que o processo worker do Nginx vai ser executado como, isto é importante pois os arquivos que o Nginx terá acesso serão os de mesmas permissões daquele usuário, neste caso o www-data, usuário comum utilizado para servir arquivos do servidor, principalmente em aplicações PHP com Apache.

O worker é um sub processo do nginx que de fato serve os dados, enquanto que o Nginx mesmo roda como usuário root. Estamos definindo que haverá apenas um worker e que este pode aceitar até 1024 conexões.

As linhas comentadas são as saídas de log do Nginx, recomendo des comentar las quando estiver configurando a primeira vez, para poder ter acesso a informação caso necessário.

Até agora é configuração normal, mas gostaríamos de servir aplicações web, para isso um bloco http é feito, onde dentro definimos a inclusão de arquivos conf do diretório /etc/nginx/conf.d/apps/, lá definiremos todas os nossos serviços/aplicações, e caso o subdomínio não seja mapeado para uam configuração, temos uma config server padrão, que escuta na porta 80, é o servidor padrão e sempre devolve error 404.

No diretório de aplicações podemos defini las, neste exemplo, uma configuração para o Pihole por exemplo, como visto no artigo Configurando um servidor DNS local com Pihole em servidor Linux.

/etc/nginx/conf.d/apps/pihole.conf:

server {
    listen 80;
    server_name pihole.DOMAIN.lan;

    location / {
        proxy_pass http://127.0.0.1:3080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Note que estamos mapeando subdomínios de um domínio que sempre sera resolvido para o IP de nossa máquina na porta 80, onde o Nginx receberá a requisição e conforme dado subdomínio teremos um certo servidor de retorno, nossa aplicação definida, neste caso para pihole.DOMAIN.lan será mapeado para a aplicação pihole rodando como uma serviço web em nosso servidor na porta 3080, qual não está exposta para fora pelo firewall, mas receberá tráfego via Nginx.

As configuração extras são necessárias para modificar os Headers das requisições, pois o Nginx as altera previamente, o que faz algumas aplicações não se comportarem de maneira usual, assim iremos alterar o Host, Ip real e Forwarded para que o Pihole consiga interpretar a requisição de maneira normal.

Agora se você acessar o subdomínio do mesmo terá acesso a página web do Pihole, e assim poderá ser feito para qualquer aplicação que você deseje, lembrando sempre de criar um arquivo novo no diretório /etc/nginx/conf.d/apps/ e buscar uma configuração recomendada para cada aplicação, ou então se afundar em todos as configurações possíveis do nginx, bem como os detalhes do protocolo http.

Espero que tenham gostado, em um futuro artigo espero trazer um exemplo de como realizar o deploy de uma aplicação PHP sem apache, utilizando Nginx e o PHP-FPM, onde teremos uma configuração Nginx mais complicada. Até breve.

Referências