Como configurar a autenticação HTTP básica no NGINX
A autenticação básica de nome de usuário e senha é uma maneira fácil e simples de proteger painéis administrativos e serviços de back-end. O Nginx pode ser configurado para proteger determinadas áreas do seu site ou até mesmo usado como proxy reverso para proteger outros serviços.
Como funciona a autenticação HTTP?
Na autenticação HTTP básica, certas rotas no servidor são bloqueadas e exigem um nome de usuário e senha para acessá-las. Por exemplo, os painéis de administração da maioria dos roteadores domésticos são protegidos dessa maneira; quando você tenta acessá-los, o navegador abre uma caixa de diálogo solicitando credenciais.
Quando um usuário tenta acessar um recurso protegido, o servidor envia ao usuário um cabeçalho WWW-Authenticate, juntamente com uma resposta 401 Não autorizada. O cliente envia de volta o nome de usuário e a senha adequados, armazenados no cabeçalho da Autorização, e se corresponder a um arquivo de chave, eles poderão se conectar.
Como a autenticação HTTP básica requer o envio de senhas, você precisa ter o HTTPS / TLS configurado no servidor ou qualquer pessoa no meio pode detectar a senha de texto sem formatação. O HTTPS criptografará a conexão, tornando segura a transmissão. Você pode configurar um certificado gratuito com o LetsEncrypt ou, se estiver procurando proteger um servidor privado, crie e assine um você mesmo.
A autenticação básica de nome de usuário / senha é apenas um dos muitos esquemas de autenticação; outro esquema comum são os tokens de portadora, usados para fluxos OAuth 2.0. Você pode usar esse esquema com o Nginx usando o módulo JSON Web Tokens, mas a configuração completa é muito mais complexa do que a autenticação de nome de usuário / senha.
Gere um arquivo de senha
Você pode usar o htpasswd para gerar arquivos de senha. Provavelmente, isso já está instalado no seu sistema, mas se não estiver, você poderá instalá-lo a partir do pacote apache2-utils. (O Nginx usa o mesmo formato de senha que o Apache):
sudo apt-get install apache2-utils
Gere um novo arquivo de senha executando htpasswd com o sinalizador -c, neste caso, para o usuário “ admin ”:
sudo htpasswd -c /etc/nginx/. htpasswd admin
Você será solicitado a digitar uma senha, que será hash e armazenada em /etc/nginx/. htpasswd. Se você deseja adicionar vários usuários, deixe de fora o sinalizador -c para adicionar novas entradas.
Ative a autenticação HTTP básica
Você pode proteger qualquer rota no nginx usando a diretiva auth_basic dentro de um local. Por exemplo, para proteger com senha / admin, você colocaria esse bloco de localização dentro do bloco do servidor no seu arquivo de configuração principal do nginx (geralmente localizado em /etc/nginx/nginx. conf):
local / admin {try_files $ uri $ uri / = 404; auth_basic "Conteúdo restrito"; auth_basic_user_file /etc/nginx/. htpasswd; }[/PRÉ]A diretiva auth_basic_user_file deve apontar para o arquivo de senha que você criou na primeira etapa. Isso não precisa ser nomeado com nada de especial, para que você possa criar arquivos de senha diferentes para rotas diferentes.
O Nginx deve cuidar do resto para você. Reinicie para aplicar as alterações:
serviço sudo nginx restartE verifique a rota protegida no seu navegador. Você deve solicitar uma senha e acesso negado, se não puder fornecê-la.
Usando autenticação proxy
Um caso de uso comum de autenticação básica é proteger um recurso externo com um proxy reverso nginx. Isso funciona perfeitamente com auth_basic e é tão simples quanto usar os dois juntos:
local
/ {# // ativar a autenticação para este local auth_basic "Conteúdo restrito"; auth_basic_user_file /etc/nginx/. htpasswd; # // configuração normal do proxy proxy_http_version 1.1; proxy_pass_request_headers on; proxy_set_header Host $ host; proxy_set_header X-Real-IP $ remote_addr; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header Accept-Encoding ""; proxy_pass https: // < endereço IP & gt ;; proxy_redirect padrão; }[/PRÉ]Isso funciona negando qualquer entrada no proxy antes que um usuário seja autenticado. Depois que eles são autenticados, o nginx funciona normalmente.
No entanto, se você deseja executar a autenticação no servidor atrás do proxy reverso, a configuração é mais complicada. Em vez disso, você desejará que o nginx faça proxy de sua entrada no servidor da web, que pode, por exemplo, consultar um banco de dados ou executar verificações mais complexas do que um arquivo de senha simples.
Você precisará usar o módulo headers-more para poder modificar os cabeçalhos mais diretamente:
local
/ {proxy_http_version 1.1; proxy_pass_request_headers on; proxy_set_header Host $ host; proxy_set_header X-Real-IP $ remote_addr; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header Accept-Encoding ""; proxy_pass https: // < endereço IP & gt ;; proxy_redirect padrão; more_set_input_headers 'Autorização: $ http_authorization'; more_set_headers -s 401 'WWW-Authenticate: Região básica = "your_server. com"'; }[/PRÉ]A configuração do proxy é a mesma, exceto que ele está ausente em auth_basic porque não queremos fazer a autenticação com o nginx. A diretiva more_set_input_headers está fazendo a mágica aqui e definindo o cabeçalho para quando ele se comunica com o servidor da Web para incluir a variável $ http_authorization que obteve do cliente. Dessa forma, o nome de usuário e a senha são passados pelo nginx para o back-end.
A próxima linha é mais complicada; a maneira regular de definir cabeçalhos sobrescreverá a variável realm quando ela estiver proxy através do nginx, o que não é o ideal. O uso de more_set_headers preservará isso e mostrará ao cliente as informações corretas.
Via: How to Geek
Nenhum comentário