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.
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)
.
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
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
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.
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
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