Skip to content

Files

nginx

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Nginx

O papel de um servidor web na prática, via de regra.

Um servidor web vai ficar esperando uma conexão chegar. Quando ela chegar, o servidor web faz seu trabalho, garantindo que a mensagem recebida está no formato HTTP e depois fazendo o que deve fazer segundo suas configurações.

Mas como o nginx e o computador sabem o que significa "localhost"?

Todo sistema operacional possui um arquivo de hosts. No Linux, por padrão fica em /etc/hosts. No Mac, /private/etc/hosts. Já no Windows, C:\Windows\System32\Drivers\Etc\hosts. Esse arquivo informa ao sistema operacional que quando uma conexão for estabelecida usando algum nome, o IP correspondente deve ser usado. Para o nome localhost, temos o IP da nossa própria máquina (127.0.0.1).

Install nginx whith Docker

docker run --name docker-nginx -p 80:80 -d nginx
Output
b91f3ce26553f3ffc8115d2a8a3ad2706142e73d56dc279095f673580986257
docker ps
Output
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
b91f3ce26553   nginx     "/docker-entrypoint.…"   56 seconds ago   Up 54 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   docker-nginx
navegador web
localhost:80
docker stop docker-nginx
docker rm docker-nginx
mkdir -p ~/docker-nginx/html
cd ~/docker-nginx/html
vim index.html
<!DOCTYPE html>
<html lang="en" class="dark-mode">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOCKER NGINX</title>
    <style>
        body {
            background-color: #121212;
            color: #ffffff;
            font-family: Arial, sans-serif;
            text-align: center;
            padding: 50px;
        }

        h1 {
            font-size: 36px;
            margin-bottom: 20px;
        }
    </style>
</head>
<body>
    <h1>Jéssica! DOCKER NGINX*</h1>
</body>
</html>
docker run --name docker-nginx -p 80:80 -d -v ~/docker-nginx/html:/usr/share/nginx/html nginx
navegador web
localhost:80

alt text

Como saber onde está o arquivo de configuração principal?

Este comando nos fornece diversas informações. Ao digitarmos nginx -h uma ajuda é exibida, e lá podemos ver o caminho do arquivo de configuração.

root@d4af018e55e6:/# nginx -h

Output

nginx version: nginx/1.25.5
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
             [-e filename] [-c filename] [-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
  -p prefix     : set prefix path (default: /etc/nginx/)
  -e filename   : set error log file (default: /var/log/nginx/error.log)
  -c filename   : set configuration file (default: /etc/nginx/nginx.conf)
  -g directives : set global directives out of configuration file

Comands nginx CLI For example

 nginx -s reload 
 nginx -s stop 
 nginx -s quit

Criando um servidor

server {
    listen 80;
    server_name localhost;

    location / {
        root /usr/share/nginx/html;
        index index.html
    }
}

Finalmente configuramos um servidor web, usando a diretiva server e dentro dela temos a diretiva chamada location.

  • Qual o propósito dessa diretiva location na configuração de um servidor web no nginx?

    Informar qual caminho acessado cairá nas regras a seguir

    Se definirmos um location /, tudo que começar com / (que no caso é literalmente tudo) cairá nesse conjunto de regras. Nessas regras podemos definir qual o diretório raiz do projeto, qual o arquivo padrão, regras de redirecionamento, etc.

Criando uma pagina de erro no nginx

Infelizmente quando desenvolvemos uma aplicação, um site ou um sistema, erros acontecem. Quando estamos falando de HTTP, erros são representados através de códigos HTTP. De novo, por isso é importante fazermos o treinamento de HTTP, para entendermos melhor como isso funciona, mas eu vou super simplificar um conceito aqui.

Se aconteceu algum erro e estamos utilizando bem o HTTP, um código de resposta é devolvido. Então, o código de erro “404” indica que algum recurso que eu estou tentando acessar não foi encontrado.

O código “200” indica que está tudo OK, que nós encontramos o que tinha que encontrar e processamos o que tinha que processar. Então existem diversos códigos HTTP.

Os códigos de erro estão na faixa “400” quando é algum erro do cliente, ou seja, o cliente digitou a URL errada, por exemplo. Ou na faixa “500” quando é erro no servidor. Então, por exemplo: o servidor não está disponível, o servidor de aplicação caiu, meu banco de dados está fora ou alguma coisa assim.

  • Então vamos configurar exatamente o erro “404” para ser direcionado para uma página nossa, uma página que nós podemos configurar como quisermos, deixar ela bonita etc.
server {
    listen 80;
    server_name localhost;

    location / {
        root /usr/share/nginx/html;
        index index.html
    }
    error_page 404 400 401 /erro.html;
}
root@d4af018e55e6:/usr/share/nginx/html# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@d4af018e55e6:/usr/share/nginx/html# vim erro.html
erro code 400
root@d4af018e55e6:/usr/share/nginx/html# nginx -s reload
2024/05/04 22:22:31 [notice] 428#428: signal process started
localhost/erro.html  

alt text

Proxy Reverso

Por que o nome é Proxy REVERSO e não apenas Proxy? Porque normalmente um proxy fica no lado do cliente

O conceito padrão de proxy é algo que fica no lado do cliente interceptando os pacotes de rede. Como nesse caso o proxy está no lado do servidor, chamamos de proxy reverso.

Configurando o proxy reverso com NGINX

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://localhost;
    }
    error_page 404 400 401 /erro.html;
}
cd /etc/nginx/

file: cd conf.d/default.conf | vim nginx.conf

cd /usr/share/nginx/html

file: index.html