我想通过Nginx代理将IMAP客户端请求发送到IMAP后端.根据mail_auth_http模块,必须使用指令auth_http来验证客户端.但是auth_http究竟是什么目的,为什么认证过程不能简单地转发到IMAP后端呢?
据我所知,auth_http指向一个身份验证脚本,该脚本使用自定义HTTP协议来确定将使用哪个后端等,并且完全跳过基于IMAP的实际身份验证.我对么?
如果有人能发布一个实际的例子,我会很感激.
最佳答案
auth_http主要做两件事:
>它对用户进行身份验证(包括有效延迟用户身份验证失败的各种选项).
>它确定使用哪个后端(以及在后端身份验证中使用的用户名和密码,如果有的话).
虽然在某些情况下,身份验证可以由后端直接处理,但这并不总是可行的.此外,如果需要将Nginx用作邮件代理,则几乎总是意味着有多个后端,并且事先不知道后端.
使用Nginx处理身份验证(特别是身份验证错误)也更有效,因为邮件服务器倾向于使用每个连接进程的模型,并且在返回错误之前无法有效等待一段时间.
如果您不关心上述所有内容,并希望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;
}
使用这样的auth脚本,Nginx将始终获得成功的身份验证结果,并且它将通过客户端提供的用户名和密码将连接传递给指定的后端.
但请注意,这不应与SMTP一起使用,因为SMTP没有后端身份验证.