我想透過 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 沒有後端驗證。