Nginx wird häufig in Reverse-Proxy-, Lastausgleichs- und anderen Szenarien verwendet. Diese Anwendungsszenarien erfordern häufig eine Zugriffskontrolle. Nginx bietet eine Konfigurationsmethode basierend auf der Zugriffskontrollliste (ACL), mit der die Zugriffskontrolle für verschiedene Benutzer, unterschiedliche IP-Adressen, unterschiedliche Anforderungspfade usw. implementiert werden kann. Dieser Artikel konzentriert sich auf die ACL-Konfigurationsmethode, die auf der Benutzerauthentifizierung basiert, um Identitätsauthentifizierung und Berechtigungskontrolle zu erreichen.
Nginx bietet zwei Benutzerauthentifizierungsmodule: ngx_http_auth_basic_module und ngx_http_auth_request_module. Ersteres basiert auf HTTP Basic Auth und der Benutzer muss den Benutzernamen und das Passwort im Anforderungsheader angeben, während letzteres die Anforderung über den Back-End-Server authentifiziert. Beide Authentifizierungsmodule haben ihre eigenen Vor- und Nachteile. Wählen Sie das für Sie passende Authentifizierungsmodul entsprechend Ihren tatsächlichen Anforderungen.
Der Benutzerauthentifizierungsprozess basierend auf dem Modul ngx_http_auth_request_module ist wie folgt:
1) Der Client sendet eine Anfrage an Nginx;
2) Nginx fängt die Anfrage ab und sendet eine Authentifizierungsanforderung an den Backend-Server;
3) Der Backend-Server authentifiziert den Benutzer und gibt das Authentifizierungsergebnis zurück.
4) Nginx antwortet dem Client basierend auf dem Authentifizierungsergebnis.
Angenommen, unsere Anwendung bietet die folgenden Schnittstellen:
1)/admin: nur Administratoren können darauf zugreifen;
2)/user: jeder Benutzer kann darauf zugreifen;
3)/login: Schnittstelle für die Benutzerauthentifizierung .
Jetzt hoffen wir, einen Reverse-Proxy über Nginx durchführen zu können, um eine Zugriffskontrolle auf der Schnittstelle zu erreichen. Gleichzeitig hoffen wir, dass nur authentifizierte Benutzer auf die Schnittstelle zugreifen können. Wir können den Anmeldestatus durch die folgende Konfiguration überprüfen.
location /admin { auth_request /auth; error_page 401 = /login; proxy_pass http://upstream; } location /user { auth_request /auth; proxy_pass http://upstream; } location = /auth { internal; proxy_pass http://upstream/auth; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; }
In dieser Konfiguration haben wir drei Standorte definiert. Unter diesen stellen /admin und /user jeweils die Schnittstellen dar, die eine Zugriffskontrolle erfordern, und /auth ist die Schnittstelle, die zur Benutzerauthentifizierung verwendet wird. Wenn der Client /admin anfordert, leitet Nginx die Authentifizierungsanforderung über die auth_request-Direktive an /auth weiter. Wenn ein 401-Fehlercode zurückgegeben wird, springt es zu /login. Die Verarbeitung von /user ist ähnlich, außer dass die Fehlercodeverarbeitung nicht hinzugefügt wird. Bei der Verarbeitung von /auth wird die Benutzerauthentifizierung tatsächlich implementiert. Es wird zur Authentifizierung an den Back-End-Server weitergeleitet und das Authentifizierungsergebnis zurückgegeben.
In diesem Beispiel ist /auth die Backend-Schnittstelle für die Benutzerauthentifizierung. Wir können verschiedene Authentifizierungsmethoden (wie LDAP, Datenbank usw.) unterstützen, indem wir entsprechenden Backend-Code schreiben.
Im Allgemeinen basiert die ACL-Funktion von Nginx auf einer leistungsstarken Engine für reguläre Ausdrücke und einigen vereinbarten Variablen. Es handelt sich um eine sehr effektive Implementierungsmethode für die Berechtigungskontrolle für Entwickler von Benutzerauthentifizierungslösungen. Selbstverständlich muss bei der Umsetzung eine gezielte Konfiguration bedarfsgerecht erfolgen und anhand der Besonderheiten des Anwendungsszenarios optimiert werden.
Das obige ist der detaillierte Inhalt vonACL-Konfiguration basierend auf der Benutzerauthentifizierung im Nginx-Reverse-Proxy. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!