Maison  >  Article  >  Opération et maintenance  >  Configuration ACL basée sur le comportement de l'utilisateur dans le proxy inverse Nginx

Configuration ACL basée sur le comportement de l'utilisateur dans le proxy inverse Nginx

王林
王林original
2023-06-10 09:07:391186parcourir

Nginx est un logiciel de serveur Web et de serveur proxy inverse hautes performances. Il s'agit d'un logiciel open source qui peut fonctionner sur divers systèmes d'exploitation, tels que Linux, Windows, FreeBSD, etc. Nginx est couramment utilisé dans le proxy inverse, l'équilibrage de charge, la mise en cache HTTP, l'authentification de sécurité et d'autres scénarios. Dans un scénario de proxy inverse, Nginx peut transmettre les demandes des utilisateurs à plusieurs serveurs principaux pour améliorer les performances et la fiabilité du système. Cet article explique comment configurer l'ACL en fonction du comportement de l'utilisateur dans le proxy inverse Nginx.

ACL est l'abréviation de Access Control List, qui est une technologie utilisée pour le contrôle d'accès. Dans le réseau, la technologie ACL est largement utilisée dans les pare-feu, les routeurs, les serveurs proxy et autres équipements. ACL peut restreindre ou autoriser l'accès des utilisateurs en fonction de différentes conditions, telles que l'adresse IP, le numéro de port, le type de protocole, etc. Dans le proxy inverse Nginx, ACL peut limiter ou autoriser le transfert de requêtes en fonction des caractéristiques de la requête de l'utilisateur.

La syntaxe de configuration de l'ACL de Nginx est la suivante :

location / {
    # allow或deny用于定义访问控制规则,如:
    allow ip; # 允许IP地址访问
    deny ip; # 禁止IP地址访问
    allow all; # 允许所有访问
    deny all; # 禁止所有访问
}

où ip peut être une adresse IP unique, un segment d'adresse IP ou une adresse IP au format CIDR, telle que :

allow 192.168.1.1; # 允许单个IP地址访问
allow 192.168.0.0/16; # 允许IP地址段访问
allow 192.168.1.0/24; # 允许CIDR格式的IP地址访问

En plus des adresses IP, ACL prend également en charge d'autres conditions, telles que l'en-tête des requêtes HTTP, la méthode de requête, le chemin de la requête, etc. Dans le proxy inverse Nginx, l'en-tête de requête HTTP est particulièrement important car il peut représenter les caractéristiques comportementales de l'utilisateur.

Dans les applications Web modernes, les caractéristiques du comportement des utilisateurs deviennent de plus en plus complexes, nécessitant une configuration ACL plus flexible et plus intelligente pour le contrôle d'accès. Par exemple, nous devrons peut-être limiter ou autoriser le transfert de demandes en fonction de facteurs tels que le statut de connexion de l'utilisateur, la fréquence des demandes, la source de la demande, etc. Dans Nginx, nous pouvons implémenter la configuration ACL basée sur le comportement de l'utilisateur des manières suivantes.

  1. Basé sur les en-têtes de requête

Dans Nginx, nous pouvons utiliser les instructions if pour vérifier les en-têtes de requête HTTP et exécuter les instructions d'autorisation ou de refus selon les besoins. Par exemple, nous pouvons restreindre l'accès à des navigateurs ou à des systèmes d'exploitation spécifiques en cochant le champ User-Agent dans l'en-tête de la demande. L'exemple de configuration est le suivant :

location / {
    if ($http_user_agent ~* MSIE) {
        deny all;
    }
    allow all;
}

La configuration ci-dessus signifie que tous les utilisateurs dont l'agent utilisateur contient "MSIE" n'ont pas le droit d'accéder et que les autres utilisateurs sont autorisés à accéder.

  1. Basé sur des cookies

Dans les applications Web modernes, les utilisateurs doivent généralement se connecter pour accéder à certaines ressources. Afin de restreindre l'accès aux utilisateurs non connectés, nous devons vérifier le champ Cookie dans la demande et exécuter la directive autoriser ou refuser si nécessaire. Par exemple, nous pouvons restreindre l'accès aux utilisateurs non connectés en cochant le champ Cookie dans l'en-tête de la demande. L'exemple de configuration est le suivant :

location /protected {
    if ($http_cookie !~* "access_token=.*") {
        return 401; # 请求未携带access_token
    }
    allow all;
}

La configuration ci-dessus signifie que si la requête ne comporte pas le champ "access_token", une erreur 401 sera renvoyée, sinon tous les utilisateurs seront autorisés à accéder ;

  1. Basé sur la fréquence d'accès

Dans certains scénarios, nous devons limiter ou autoriser l'accès des utilisateurs en fonction de la fréquence d'accès de l'utilisateur. Par exemple, dans le scénario de l'interface API, nous pouvons éviter les attaques DDoS en vérifiant la fréquence des requêtes. Dans Nginx, nous pouvons utiliser la directive limit_req pour implémenter la configuration ACL basée sur la fréquence d'accès. L'exemple de configuration est le suivant :

http {
    # 定义限制访问频率的配置
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
    # 定义反向代理配置
    server {
        location /api/ {
            limit_req zone=api burst=20 nodelay;
            proxy_pass http://api.example.com/;
        }
    }
}

La configuration ci-dessus indique que chaque adresse IP peut accéder au chemin /api/ jusqu'à 10 fois par seconde, et 20 accès en rafale sont autorisés. Si la fréquence d'accès de l'utilisateur dépasse la limite, une erreur 503 sera renvoyée.

  1. Basé sur la source de la demande

Dans certains scénarios, nous devons restreindre ou autoriser l'accès des utilisateurs en fonction de l'adresse IP source ou du nom de domaine de la demande. Par exemple, dans certains scénarios d'authentification de sécurité, nous pouvons mettre en œuvre un contrôle d'accès en vérifiant l'adresse IP ou le nom de domaine de la source de la demande. Dans Nginx, nous pouvons utiliser la directive geo pour implémenter la configuration ACL basée sur la source de la requête. L'exemple de configuration est le suivant :

http {
    # 定义IP地址库文件
    geoip_country /usr/share/GeoIP/GeoIP.dat;
    # 定义反向代理配置
    server {
        location / {
            # 根据请求IP的国家代码进行访问控制
            if ($geoip_country_code != CN) {
                deny all;
            }
            proxy_pass http://proxy.example.com/;
        }
    }
}

La configuration ci-dessus signifie que si le pays où se trouve l'IP demandée n'est pas la Chine, l'accès est interdit. Si vous devez contrôler l'accès en fonction du nom de domaine, vous pouvez utiliser la directive geoip_host.

En bref, la configuration ACL de Nginx est très flexible et puissante, et peut implémenter un contrôle d'accès basé sur le comportement de l'utilisateur en fonction des différents besoins. Lorsque vous utilisez ACL, vous devez faire attention à ne pas abuser des instructions if, car les instructions if affecteront les performances et la stabilité de Nginx. Il est recommandé d'utiliser autant que possible les instructions et variables intégrées de Nginx pour implémenter la configuration ACL. Dans le même temps, les tests et l'optimisation des performances doivent également être effectués en fonction des conditions réelles pour garantir que la configuration de l'ACL a le moins d'impact possible sur les performances du système.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn