Nginx est largement utilisé dans le proxy inverse, l'équilibrage de charge et d'autres scénarios. Ces scénarios d'application nécessitent souvent un contrôle d'accès. Nginx fournit une méthode de configuration basée sur une liste de contrôle d'accès (ACL), qui peut implémenter un contrôle d'accès pour différents utilisateurs, différentes adresses IP, différents chemins de requête, etc. Cet article se concentre sur la méthode de configuration ACL basée sur l'authentification des utilisateurs pour réaliser l'authentification de l'identité et le contrôle des autorisations.
Nginx fournit deux modules d'authentification utilisateur : ngx_http_auth_basic_module et ngx_http_auth_request_module. Le premier est basé sur HTTP Basic Auth et l'utilisateur doit fournir le nom d'utilisateur et le mot de passe dans l'en-tête de la demande, tandis que le second authentifie la demande via le serveur principal. Les deux modules d'authentification ont leurs propres avantages et inconvénients. Choisissez le module d'authentification qui vous convient en fonction de vos besoins réels.
Le processus d'authentification de l'utilisateur basé sur le module ngx_http_auth_request_module est le suivant :
1) Le client envoie une requête à Nginx ;
2) Nginx intercepte la requête et envoie une requête d'authentification au serveur backend ;
3) Le serveur backend Authentifie l'utilisateur et renvoie le résultat de l'authentification ;
4) Nginx répond au client en fonction du résultat de l'authentification ;
Supposons que notre application fournisse les interfaces suivantes :
1)/admin : seuls les administrateurs peuvent accéder ;
2)/user : n'importe quel utilisateur peut accéder
3)/login : Interface pour l'authentification des utilisateurs ; .
Maintenant, nous espérons utiliser Nginx pour effectuer un proxy inverse afin d'obtenir un contrôle d'accès sur l'interface. En parallèle, nous espérons que seuls les utilisateurs authentifiés pourront accéder à l’interface. Nous pouvons vérifier l'état de connexion via la configuration suivante.
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; }
Dans cette configuration, nous avons défini trois emplacements. Parmi eux, /admin et /user représentent respectivement les interfaces qui nécessitent un contrôle d'accès, et /auth est l'interface utilisée pour l'authentification des utilisateurs. Lorsque le client demande /admin, Nginx transmet la demande d'authentification à /auth via la directive auth_request. Si un code d'erreur 401 est renvoyé, il passe à /login. Le traitement de /user est similaire, sauf que le traitement du code d'erreur n'est pas ajouté. Le traitement de /auth est l'endroit où l'authentification de l'utilisateur est véritablement implémentée. Il se connecte au serveur principal pour l'authentification et renvoie le résultat de l'authentification.
Dans cet exemple, /auth est l'interface backend pour l'authentification des utilisateurs. Nous pouvons prendre en charge diverses méthodes d'authentification (telles que LDAP, base de données, etc.) en écrivant le code backend correspondant.
En général, la fonction ACL de Nginx est basée sur un puissant moteur d'expression régulière et certaines variables convenues. Il s'agit d'une méthode de mise en œuvre de contrôle d'autorisation très efficace pour les développeurs de solutions d'authentification des utilisateurs. Bien entendu, lors de la mise en œuvre, une configuration ciblée doit être réalisée en fonction des besoins spécifiques et optimisée en fonction des caractéristiques du scénario d'application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!