nginx: entendendo o propósito de auth_http (proxy IMAP)

nginx: entendendo o propósito de auth_http (proxy IMAP)

Gostaria de enviar solicitações de clientes IMAP para um back-end IMAP por meio de um proxy nginx. De acordo com omail_auth_httpmódulo, uma diretiva auth_httpdeve ser usada para autenticar os clientes. Mas qual é exatamente o propósito auth_http, por que o processo de autenticação não pode simplesmente ser encaminhado para o back-end IMAP?

Pelo que eu sei, auth_httpaponta para um script de autenticação que usa um protocolo HTTP personalizado para determinar qual back-end será usado, etc., e a autenticação real baseada em IMAP é completamente ignorada. Estou correcto?

Eu apreciaria se alguém pudesse postar um exemplo prático.

Responder1

O auth_httpfaz duas coisas principais:

  • Ele autentica usuários (incluindo várias opções para atrasar efetivamente os usuários em caso de falha na autenticação).
  • E determina qual back-end usar (e qual nome de usuário e senha usar na autenticação de back-end, se for o caso).

Embora em alguns casos a autenticação possa ser realizada diretamente por um back-end, nem sempre é possível. Além disso, se o nginx precisar ser usado como proxy de email, isso quase sempre significa que há vários back-ends e o back-end não é conhecido com antecedência.

Também é mais eficiente lidar com a autenticação (em particular, erros de autenticação) com o nginx, pois os servidores de e-mail tendem a usar o modelo de processo por conexão e não podem esperar um pouco antes de retornar um erro.

Se você não se importa com todos os itens acima e deseja que o nginx apenas passe uma conexão para um back-end predeterminado, você pode usar algo como isto no bloco nginx http{} como um script auth_http simples:

location = /auth {
    add_header Auth-Status OK;
    add_header Auth-Server 127.0.0.2;  # backend ip
    add_header Auth-Port   143;        # backend port
    return 204;
}

Com esse script de autenticação, o nginx sempre obterá um resultado de autenticação bem-sucedido e passará a conexão para o backend especificado, com nome de usuário e senha fornecidos pelo cliente.

Observe, porém, que isso devenãoser usado com SMTP, pois não há autenticação de back-end com SMTP.

informação relacionada