Ich möchte IMAP-Client-Anfragen über einen Nginx-Proxy an ein IMAP-Backend senden. Laut dermail_auth_httpModul muss eine Direktive auth_http
verwendet werden, um die Clients zu authentifizieren. Aber was genau ist der Zweck von auth_http
, warum kann der Authentifizierungsprozess nicht einfach an das IMAP-Backend weitergeleitet werden?
Soweit ich weiß, auth_http
verweist es auf ein Authentifizierungsskript, das ein benutzerdefiniertes HTTP-Protokoll verwendet, um zu bestimmen, welches Back-End verwendet wird usw., und die eigentliche IMAP-basierte Authentifizierung wird vollständig übersprungen. Habe ich Recht?
Ich wäre dankbar, wenn jemand ein praktisches Beispiel posten könnte.
Antwort1
Es auth_http
hat zwei Hauptfunktionen:
- Es authentifiziert Benutzer (einschließlich verschiedener Optionen, um Benutzer bei fehlgeschlagener Authentifizierung effektiv zu verzögern).
- Und es bestimmt, welches Backend verwendet werden soll (und welcher Benutzername und welches Passwort bei der Backend-Authentifizierung verwendet werden sollen, falls überhaupt).
Während die Authentifizierung in manchen Fällen direkt von einem Backend abgewickelt werden kann, ist dies nicht immer möglich. Wenn nginx als Mail-Proxy verwendet werden muss, bedeutet dies außerdem fast immer, dass mehrere Backends vorhanden sind und das Backend nicht im Voraus bekannt ist.
Darüber hinaus ist die Authentifizierung (insbesondere von Authentifizierungsfehlern) mit nginx effizienter abzuwickeln, da Mailserver dazu neigen, ein Prozess-pro-Verbindung-Modell zu verwenden und nicht effektiv eine Weile warten können, bevor sie einen Fehler zurückgeben.
Wenn Sie sich um all das oben Genannte nicht kümmern und möchten, dass nginx einfach eine Verbindung an ein vorbestimmtes Backend weiterleitet, können Sie so etwas im nginx-http{}-Block als absolut einfaches auth_http-Skript verwenden:
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;
}
Mit einem solchen Authentifizierungsskript erhält Nginx immer ein erfolgreiches Authentifizierungsergebnis und leitet die Verbindung mit dem vom Client bereitgestellten Benutzernamen und Kennwort an das angegebene Backend weiter.
Beachten Sie jedoch, dass diesnichtmit SMTP verwendet werden, da bei SMTP keine Backend-Authentifizierung erfolgt.