nginx:了解auth_http(IMAP代理)的用途

我想通过nginx代理将IMAP客户端请求发送到IMAP后端。 根据mail_auth_http模块,必须使用伪指令auth_http来validation客户端。 但auth_http的目的究竟是什么,为什么authentication过程不能简单地转发到IMAP后端呢?

据我所知, auth_http指向一个authentication脚本,它使用一个自定义的HTTP协议来确定将使用哪个后端等,实际的基于IMAP的authentication被完全跳过。 我对么?

如果有人能举一个实际的例子,我会很感激。

auth_http做了两件事:

  • 它对用户进行身份validation(包括各种选项以有效延迟用户失败的身份validation)。
  • 它确定使用哪个后端(以及在后端身份validation中使用哪个用户名和密码,如果有的话)。

虽然在某些情况下,身份validation可以直接由后端处理,但这并不总是可行的。 而且,如果需要使用nginx作为邮件代理,那么几乎总是意味着有多个后端,并且事先不知道后端。

使用nginx处理身份validation(特别是身份validation错误)也更为有效,因为邮件服务器倾向于使用每个连接进程的模型,并且在返回错误之前无法等待一段时间。

如果你不关心上面的所有内容,并希望nginx只传递一个连接到预定的后端,你可以在nginx http {}块中使用类似下面这样的简单的auth_http脚本:

 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; } 

有了这样的authentication脚本,nginx将始终获得成功的authentication结果,并将连接传递给指定的后端,并使用客户端提供的用户名和密码。

请注意,这应该与SMTP一起使用,因为没有使用SMTP的后端身份validation。