Ficha 01 · Instalação e virtual hosts
- Instalar servidor web
- Configurar virtual hosts
- Servir dinâmico
- Diagnosticar
Parte I · Conceitos
Exercício 1 · Estático vs dinâmico (10 pts)
a) Diferença entre servir conteúdo estático e dinâmico. (5 pts)
b) Onde entra o servidor web quando a aplicação é Python (Gunicorn)? (5 pts)
a) Estático — o servidor entrega ficheiros (HTML/CSS/JS/imagens) tal como estão; muito rápido. Dinâmico — uma aplicação gera a resposta em cada pedido (PHP/Python/Node), tipicamente consultando uma BD.
b) O servidor web (Nginx) funciona como reverse proxy: recebe o pedido HTTPS, serve os estáticos diretamente e encaminha o resto para a app Python (Gunicorn) numa porta local (ex.: 127.0.0.1:8000), devolvendo a resposta ao cliente.
Exercício 2 · Escolher servidor (10 pts)
Indica um servidor adequado:
a) Servir muitos ficheiros estáticos + reverse proxy, leve. ___
b) Site que depende de .htaccess e módulos Apache. ___
c) HTTPS automático com configuração mínima. ___
a) Nginx. b) Apache. c) Caddy.
Parte II · Instalação
Exercício 3 · Instalar Nginx (15 pts)
Escreve os comandos para instalar o Nginx no Ubuntu, ativá-lo no arranque, abrir a firewall e confirmar que responde.
sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx
sudo ufw allow 'Nginx Full'
curl -I http://localhost # esperado: HTTP/1.1 200 OK
Exercício 4 · Ativar site (10 pts)
Tens /etc/nginx/sites-available/escola.conf. Que passos para o tornar ativo com segurança?
sudo ln -s /etc/nginx/sites-available/escola.conf /etc/nginx/sites-enabled/
sudo nginx -t # validar sintaxe ANTES de aplicar
sudo systemctl reload nginx
nginx -t evita derrubar o serviço com um erro de configuração; reload aplica sem cortar ligações ativas.
Parte III · Virtual hosts
Exercício 5 · Server block (15 pts)
Escreve um server block Nginx para o site escola.pt (e www.escola.pt), raiz /var/www/escola, index index.html, com logs próprios.
server {
listen 80;
server_name escola.pt www.escola.pt;
root /var/www/escola;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/escola.access.log;
error_log /var/log/nginx/escola.error.log;
}
Exercício 6 · PHP (15 pts)
a) Que pacote instalar para servir PHP com Nginx? (5 pts)
b) Escreve o location que entrega ficheiros .php ao PHP-FPM. (10 pts)
a) sudo apt install php-fpm -y
b)
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
(O caminho do socket varia com a versão do PHP — confirmar com ls /run/php/.)
Parte IV · Diagnóstico
Exercício 7 · Códigos (15 pts)
A app está atrás do Nginx (reverse proxy). Que problema indica cada situação e por onde começar?
a) 502 Bad Gateway. ___
b) 403 Forbidden numa pasta. ___
c) 404 em todas as páginas mas o ficheiro existe. ___
d) Erro de certificado no browser. ___
a) 502 — o backend (app/PHP-FPM) está em baixo ou o proxy_pass/socket está errado. Verificar: systemctl status da app, porta/socket, error.log.
b) 403 — permissões do filesystem (utilizador www-data não lê) ou regra de acesso/autoindex off. Verificar ls -l, dono/permissões.
c) 404 generalizado — root ou try_files mal configurados (caminho errado). Verificar o root do server block e o caminho real.
d) Certificado — expirado, cadeia incompleta, ou server_name/domínio não coincide. Verificar com curl -I / openssl s_client e renovar (certbot renew).