UP | HOME

LPI-2 202-450 Topico 208.4
Implementação do Nginx

Índice

208.4 Implementação do Nginx como um servidor web e proxy reverso - Objetivos

Peso 2

O candidato deve ser capaz de instalar e configurar um servidor de proxy Nginx, incluindo configuração básica do Nginx como um servidor HTTP. Conhecimentos-chave:

  • Nginx;
  • Proxy reverso;
  • Servidor Web básico.

Lista parcial dos arquivos, termos e ferramentas utilizados:

  • /etc/nginx;
  • nginx

208.4 Implementação do Nginx como um servidor web e proxy reverso - Conteúdo

O NGINX (pronuncia-se engine x) é um poderoso web server e proxy reverso com uma arquitetura baseada em eventos (assíncrona).

Pode ser usado como um proxy reverso e também como um balanceador de carga, hoje é usado em muitos sites na Internet por sua alta performance.

Nginx vs Apache

O Apache e o Nginx são os web servers mais comuns na Internet e juntos representam 50% do tráfego na Internet. As duas soluções são capazes de administrar diferentes cargas de trabalho e trabalhar em conjunto com outros softwares pra prover uma pilha web completa.

Tanto o Apache quanto o Nginx tem muitas qualidades mas eles não podem ser considerados totalmente intercambiáveis. Cada um foi desenvolvido à sua maneira e é importante entender as situações em que mais vale aplicar um ou o outro.

Tabela 1: Comparativo Apache e Nginx
Critério Apache Nginx
Static speed Segundo mais rápido 2.5x mais rápido do que o Apache
Dynamic speed Empate Empate
OS support Unix, Windows, Mac OSX Roda bem em sistemas Unix like, mas não tão bem em Windows
Segurança Empate Empate
Flexibilidade Arquitetura altamente customizável Difícil de personalizar módulos para o servidor devido à complexa arquitetura de base
Suporte Uma vasta comunidade com uma grande base instalada Suporte comunitário e listas de discução
Custo Software Livre sob a licença Apache Licença Open Source, também disponível sob licença paga com mais recursos - Nginx plus

Implementando um Web Server com o Nginx

O Nginx é um software muito popular assim os pacotes disponíveis nos repositórios das distribuições atenderá na maioria dos cenários. Portanto sua instalação é trivialmente executada com o gerenciador de pacotes da distribuição usada.

Todas as configurações do Nginx ficam localizadas no diretório /etc/nginx/:

root@lpic-2-srv:~# cd /etc/nginx/
root@lpic-2-srv:/etc/nginx# ls -l
total 56
drwxr-xr-x 2 root root 4096 Jul 12  2019 conf.d
-rw-r--r-- 1 root root 1077 Mar 20  2019 fastcgi.conf
-rw-r--r-- 1 root root 1007 Mar 20  2019 fastcgi_params
-rw-r--r-- 1 root root 2837 Mar 20  2019 koi-utf
-rw-r--r-- 1 root root 2223 Mar 20  2019 koi-win
-rw-r--r-- 1 root root 3957 Mar 20  2019 mime.types
-rw-r--r-- 1 root root 1462 Mar 20  2019 nginx.conf
-rw-r--r-- 1 root root  180 Mar 20  2019 proxy_params
-rw-r--r-- 1 root root  636 Mar 20  2019 scgi_params
drwxr-xr-x 2 root root 4096 Jun 30 03:12 sites-available
drwxr-xr-x 2 root root 4096 Jun 30 03:12 sites-enabled
drwxr-xr-x 2 root root 4096 Jun 30 03:12 snippets
-rw-r--r-- 1 root root  664 Mar 20  2019 uwsgi_params
-rw-r--r-- 1 root root 3071 Mar 20  2019 win-utf

O arquivo de configuração primário é /etc/nginx/nginx.conf. Assim como no Apache as opções de configuração são chamadas de diretivas. Essas diretivas são organizadas em blocos que também são conhecidos como contextos. Como na maioria dos arquivos de configuração o símbolo # dá início a um comentário e tanto ele quanto o que vier depois dele não será interpretado. Também é importante entender que assim como no arquivo de configuração do Bind as linhas que contiverem diretivas devem terminar com um ; caso contrário o Nginx falhará ao carregar a configuração e irá relatar um erro.

O arquivo de configuração principal começa com 5 diretivas: user, worker_processes, error_log e pid. Elas estão fora de qualquer bloco ou contexto específico, portanto, diz-se que existem no contexto principal (main).

Os blocos events e http são áres para diretivas adicionais e também existem no contexto principal (main).

O bloco HTTP
O bloco http contém diretivas para lidar com o tráfego da web. Essas diretivas são frequentemente chamadas de universais porque são passadas para todas as configurações de site que o NGINX atende.
O bloco Server
O bloco HTTP acima contém uma diretiva incluída que informa ao NGINX onde os arquivos de configuração do site estão localizados.
events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

Atenção algo a ser notado é a diretiva root ela aponta para o diretório raiz do site, no Apache seria DocumentRoot.

Em um sistema RedHat like quando instalado dos repositórios oficiais o arquivo de configuração conterá include /etc/nginx/conf.d/*.conf; no bloco http. Logo todo website que hospedarmos nesse serviço deverá ter seu arquivo de configuração em /etc/nginx/conf.d/ com o nome terminado em .conf. Assim para desabilitar um site basta renomear sua extensão com um .conf.disabled.

Em um sistema Debian like quando instalado dos repositórios oficiais o arquivo de configuração conterá include /etc/nginx/sites-enabled/*;. O diretório /etc/nginx/sites-enabled/ conterá links simbólicos apontando para /etc/nginx/sites-available/ de forma semelhante ao que temos na instalação do Apache.

Ouvindo portas
A diretiva listen indica ao Nginx o hostname ou IP e a porta TCP onde o serviço ouvirá conexões HTTP. O argumento default_server significa que este virtual host responderá às solicitações da porta 80 que não correspondem especificamente à instrução de escuta de outro virtual host em outras palavras a página padrão caso a requisição HTTP não der match em nenhum dos virtual hosts configurados no servidor;
Name-based virtual hosting
A diretiva server_name habilita múltiplos domínios no servidor. Fazendo o servidor decidir qual site entregar mediante ao cabeçalho request.
#exemplos: 
        #processa requisições para dois endereços:
        server_name       exemplo.com.br www.exemplo.com.br;
        # Uso de wildcards
        server_name       *.exemplo.com.br;
        server_name       .exemplo.com.br;
        #Processa requisições para todos os nomes de domínio
        #iniciados com a palavra exemplo
        server_name       exemplo.*;

O NGINX nos permite especificar nomes de servidor que não são nomes de domínio válidos. O NGINX usa o nome do cabeçalho HTTP para responder a solicitações, independentemente de o nome de domínio ser válido ou não.

Usar nomes de host sem domínio é útil se o servidor estiver em uma LAN ou se já conhecermos todos os clientes que farão solicitações ao servidor.

Blocos de localização
A diretiva location permite configurar como o Nginx responderá as requisições que chegarem ao servidor. Assim como a diretiva server_name diz ao Nginx como processar as requisições para um domínio a diretiva location cobre as requisições por arquivos ou diretórios específicos. Tal como http://exemplo.com.br/.local, essa diretiva tem suporte a expressões regulares;
Localização raiz e index

A diretiva location é uma das variáveis que tem seu próprio bloco de argumentos. Depois de o Nginx determinar qual diretiva de localização melhor corresponde a uma determinada solicitação, a resposta a essa solicitação é determinada pelo conteúdo do bloco de diretiva de localização associada.

location / {
    root html;
    index index.html index.htm;
}

No exemplo o document root está localizado no diretório html/. Abaixo da localização default do Nginx, logo o caminho completo para esse document root seria /var/www/html/. A variável index diz ao Nginx qual arquivo apresentar caso nenhum seja especificado.

O comando nginx

Assim como o Apache tem o apachectl o Nginx também tem um comando para manusear o deamon o comando é nginx

root@lpi-2-srv:~# nginx -?
nginx version: nginx/1.10.3 (Ubuntu)
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
                    stop — shut down quickly
                    quit — shut down gracefully
                    reload — reload configuration, start the new worker process with a new configuration, gracefully shut down old worker processes.
                    reopen — reopen log files
  -p prefix     : set prefix path (default: /usr/share/nginx/)
  -c filename   : set configuration file (default: /etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file

Proxy reverso

Para usufruir dos recursos do Nginx, sem abrir mão dos módulos e versatilidade do Apache é comum utilizarmos o Nginx como um proxy reverso. Nesse cenário o Nginx responde a todas as solicitações HTTP do cliente. Porém quando é solicitado algum conteúdo dinâmico, o Nginx encaminha a solicitação HTTP para o Apache, recebe o conteúdo da resposta e envia para o cliente.

Configurando um proxy reverso simples

A configuração do proxy reverso no Nginx inicia-se verificando o conteúdo do arquivo /etc/nginx/proxy_params

proxy_set_header Host $http_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;

Podemos copiar esse conteúdo e colar ele no nosso arquivo de Virtual Host ou apenas fazer um include apontando para ele.

server {
    listen 80;
    server_name exemplo.com.br;

    location \ {
        proxy_pass http://infralinux.com.br/;
        include /etc/nginx/proxy_params;
        }
    }

Agora basta restartar o deamon do Nginx.

Autor: Jeremias Alves Queiroz

Criado em: 2021-12-19 dom 19:00

Valid XHTML 1.0 Strict