我想通过 nginx 代理将 IMAP 客户端请求发送到 IMAP 后端。根据邮件验证http模块,必须使用指令auth_http
来验证客户端。但是,目的究竟是什么auth_http
?为什么不能简单地将验证过程转发到 IMAP 后端?
据我所知,auth_http
指向一个使用自定义 HTTP 协议来确定将使用哪个后端等的身份验证脚本,并且完全跳过了基于 IMAP 的实际身份验证。我说得对吗?
如果有人能发布一个实际的例子我将不胜感激。
答案1
它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;
}
通过这样的身份验证脚本,nginx 将始终获得成功的身份验证结果,并且它将使用客户端提供的用户名和密码将连接传递给指定的后端。
但请注意,这应该不是与 SMTP 一起使用,因为 SMTP 没有后端身份验证。