Nginx · 3 min read · Jan 23, 2026

Autenticação HTTP Básica com Nginx

Este tutorial mostra como você pode usar a autenticação HTTP básica com Nginx para proteger por senha diretórios em seu servidor ou até mesmo um site inteiro. Este é o equivalente do Nginx à autenticação HTTP básica no Apache com .htaccess /.htpasswd.

1 Nota Preliminar

Estou usando o site www.example.com aqui com o diretório raiz /var/www/www.example.com/web/ e o arquivo de configuração do vhost do Nginx /etc/nginx/sites-enabled/www.example.com.vhost. O diretório que quero proteger por senha é /var/www/www.example.com/web/test/.

2 Criando o Arquivo de Senha

Precisamos de um arquivo de senha onde os usuários que devem ser capazes de fazer login estão listados com suas senhas (em forma criptografada). Para criar tal arquivo de senha, podemos usar a ferramenta htpasswd do Apache ou usar o script Python de http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

2.1 Usando o Comando htpasswd do Apache

Se você quiser usar o comando htpasswd do Apache, verifique se ele existe em seu sistema:

which htpasswd
root@server1:~# which htpasswd  
/usr/bin/htpasswd  
root@server1:~#

Se você obtiver uma saída como a acima, tudo está bem - htpasswd já está instalado. Se o comando retornar sem nenhuma saída, htpasswd não existe em seu sistema e você deve instalá-lo. No Debian/Ubuntu, faz parte do pacote apache2-utils que podemos instalar da seguinte forma:

apt-get -y install apache2-utils

Quero criar o arquivo de senha /var/www/www.example.com/.htpasswd agora e armazenar o usuário falko nele (você pode dar ao arquivo de senha qualquer nome que desejar - não é necessário nomeá-lo .htpasswd; eu apenas o nomeei .htpasswd porque é assim que os arquivos de senha são nomeados no Apache):

htpasswd -c /var/www/www.example.com/.htpasswd falko

Você será solicitado a inserir uma senha para o usuário falko. Observe que o switch -c faz com que o arquivo seja criado do zero; se ele não existia antes, será criado; se existia antes, será sobrescrito com um novo, e todos os usuários do arquivo antigo serão perdidos! Portanto, se você quiser adicionar outro usuário sem excluir todos os usuários existentes, use o comando htpasswd sem o switch -c:

htpasswd /var/www/www.example.com/.htpasswd till

O último comando adiciona o usuário till ao /var/www/www.example.com/.htpasswd para que agora tenhamos os usuários falko e till nele.

2.2 Usando o Script Python htpasswd.py

Se você não quiser ou não puder usar o comando htpasswd do Apache, pode usar o script Python de http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

Nós o baixamos para /usr/local/bin e o tornamos executável da seguinte forma:

cd /usr/local/bin  
wget http://trac.edgewall.org/export/14464/trunk/contrib/htpasswd.py  
chmod 755 /usr/local/bin/htpasswd.py

Quero criar o arquivo de senha /var/www/www.example.com/.htpasswd agora e armazenar o usuário falko nele (você pode dar ao arquivo de senha qualquer nome que desejar - não é necessário nomeá-lo .htpasswd; eu apenas o nomeei .htpasswd porque é assim que os arquivos de senha são nomeados no Apache):

htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret

Por favor, substitua falkossecret por uma senha para o usuário falko. Observe que o switch -c faz com que o arquivo seja criado do zero; se ele não existia antes, será criado; se existia antes, será sobrescrito com um novo, e todos os usuários do arquivo antigo serão perdidos! Portanto, se você quiser adicionar outro usuário sem excluir todos os usuários existentes, use o comando htpasswd.py sem o switch -c:

htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret

O último comando adiciona o usuário till ao /var/www/www.example.com/.htpasswd para que agora tenhamos os usuários falko e till nele.

3 Configurando o Nginx

Agora que temos nosso arquivo de senha em seu lugar, só precisamos adicioná-lo à nossa configuração do vhost do Nginx em /etc/nginx/sites-enabled/www.example.com.vhost, dentro do contêiner server {}.

nano /etc/nginx/sites-enabled/www.example.com.vhost

Como quero proteger por senha o diretório de teste no diretório raiz, uso location /test {} aqui (para proteger por senha todo o site, você usaria location / {}):

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;
[...]  
       location /test {
                auth_basic "Restrito";
                auth_basic_user_file /var/www/www.example.com/.htpasswd;
       }
[...]  
}

Recarregue o Nginx depois:

service nginx reload

É isso! Agora você pode ir ao seu diretório de teste em um navegador ( http://www.example.com/test), e você deve ser solicitado a inserir um nome de usuário e senha:

Prompt de autenticação básica do Nginx (.htpasswd).

Se você inserir o nome de usuário e a senha corretos, terá acesso:

Login ok.

Caso contrário, você verá uma mensagem de erro 401 Authorization Required:

Autorização necessária do Nginx.

4 Links

Sobre o Autor

Falko Timme é o proprietário da Timme Hosting (hospedagem web nginx ultra-rápida). Ele é o principal mantenedor do HowtoForge (desde 2005) e um dos desenvolvedores principais do ISPConfig (desde 2000). Ele também contribuiu para o livro da O’Reilly “Administração de Sistemas Linux”.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.