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

4

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

Tanto quanto sei, auth_http aponta 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 é ignorada completamente. Estou correto?

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

    
por watain 14.05.2014 / 08:26

1 resposta

6

O auth_http faz duas coisas principais:

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

Embora, em alguns casos, a autenticação possa ser tratada diretamente por um back-end, não é algo sempre possível. Além disso, se o nginx precisar ser usado como um proxy de correio, quase sempre significa que há vários back-ends e back-ends que não são conhecidos antecipadamente.

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

Se você não se importa com todos os itens acima, e quer que o nginx passe uma conexão para um backend predeterminado, você pode usar algo parecido com isso no nginx http {} block como um script auth_http morto:

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 ao backend especificado, com nome de usuário e senha fornecidos pelo cliente.

Note, porém, que isso deve ser não usado com SMTP, já que não há autenticação de back-end com SMTP.

    
por 06.07.2014 / 21:28