Como configurar autenticação HTTP básica no Nginx
Os ficheiros num servidor Web estão acessíveis ao público por padrão. Se pretende proteger ficheiros contra acesso não autorizado, pode usar a autenticação básica HTTP. Um método simples de autenticação, em que os utilizadores precisam fornecer nome de utilizador e password para aceder a ficheiros no servidor.
Neste artigo, aprenderemos a utilizar a autenticação básica no Nginx.
Pré-requisitos
Obviamente, devera ter uma cópia do nginx no sistema antes de poder configurá-lo. Deve tambem instalar o htpasswd do Apache para gerar senhas com hash.
Num sistema Debian/Ubuntu, pode instalá-lo com o seguinte comando:sudo apt install apache2-utils
Ou no CentOS, pode instalá-lo com o seguinte comando:sudo yum install httpd-tools
Criar o ficheiro htpasswd
O ficheiro htpasswd contém uma lista de nomes de utilizadores e passwords. O Nginx o utiliza este para verificar as credenciais de utilizadores que pretendam aceder a áreas protegidas do site.
Primeiro, crie um ficheiro vazio com o nome htpasswd com o seguinte comando:sudo touch /etc/nginx/htpasswd
Agora, pode adicionar nomes de utilizador e passwords a este ficheiro com o comando htpasswd. Por exemplo, se pretende adicionar o utilizador nuno ao ficheiro, execute o seguinte comando:sudo htpasswd /etc/nginx/htpasswd nuno
Será solicitado a digitar a senha duas vezes.
Posteriormente, se pretender alterar uma password existente, basta executar o comando novamente. Da mesma forma, pode adicionar outros utilizadores ao ficheiro executando o comando acima com um nome de utilizador diferente.
Se pretende apagar um utilizador do ficheiro, utilize a opção -D com o seguinte comando:sudo htpasswd -D /etc/nginx/htpasswd nuno
Na próxima secção, configuraremos o nginx a utilizar este ficheiro para restringir acesso.
Configurar o nginx
Agora, abra o ficheiro de configuração do site com um editor como o nano. Se utlizar o Debian ou Ubuntu, a configuração do site está em /etc/nginx/sites-available/default:sudo nano /etc/nginx/sites-available/default
Se utiliza outra distribuição Linux, a configuração estará em /etc/nginx/nginx.conf:sudo nano /etc/nginx/nginx.conf
Nos dois casos, localize o bloco do servidor. Depois, adicione um bloco de localização para o caminho que deseja proteger. Dentro deste bloco, deve definir o nome da localização e o caminho para o ficheiro htpasswd. No exemplo abaixo, restringimos o acesso a todos os ficheiros em "arquivos".
server {
location /arquivos {
auth_basic "Restrito";
auth_basic_user_file /etc/nginx/htpasswd;
}
}
Guarde o ficheiro e feche o editor. Em seguida, para efetivar as alterações, deve recarregar a configuração do nginx com o seguinte comando:sudo systemctl reload nginx
Ou se utilizar uma distribuição mais antiga, que não utilize o systemd, execute o seguinte comando:sudo service nginx reload
Agora ao utilizar um navegador web para aceder qualquer ficheiro em /arquivos, o navegador solicitará um nome de utilizador e password:
Se pretender proteger outro caminho, basta adicionar outro bloco de localização com o mesmo conteúdo:
location /fotos {
# ...
}
Conclusão
Neste artigo, aprendemos sobre autenticação básica HTTP e como utilizar esse recurso do nginx. Ele fornece uma maneira simples de impedir acesso a ficheiros num servidor Nginx.