Comment Nginx implémente la configuration du contrôle d'accès basé sur les cookies, des exemples de code spécifiques sont requis
Dans les applications Web, le contrôle d'accès est une fonction clé. Grâce à la configuration du contrôle d'accès basé sur les cookies, les utilisateurs peuvent être empêchés d'accéder à des pages ou des ressources spécifiques. Cet article expliquera comment utiliser Nginx pour implémenter un tel contrôle d'accès et donnera des exemples de code spécifiques.
cd /path/to/nginx/source/ ./configure --with-http_auth_request_module make sudo make install
location /protected { auth_request /auth; error_page 401 = @error401; } location = /auth { internal; proxy_pass http://backend/auth; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; }
Dans la configuration ci-dessus, location /protected
définit une page protégée, et la commande auth_request /auth
enverra une requête à /auth</code > code> emplacement pour l'authentification. Si l'authentification réussit, l'accès à la page est autorisé ; sinon, une erreur 401 sera renvoyée. <code>location /protected
定义了一个受保护的页面,auth_request /auth
指令将会发送一个请求到/auth
位置进行认证。如果认证成功,则允许访问该页面;否则,将会返回401错误。
location = /auth
定义了一个内部请求,它将会被传递给后端服务器进行认证。在这个例子中,我们假设后端服务器的地址是http://backend
,认证接口为/auth
。通过proxy_pass
指令实现请求的转发,并通过proxy_pass_request_body off
和proxy_set_header Content-Length ""
禁用请求体的传递。另外,还通过proxy_set_header X-Original-URI $request_uri
传递原始的URI信息给后端服务器。
http://backend
,认证接口为/auth
。现在,我们来编写该接口的实际实现。实现一个简单的认证接口可以使用任何Web编程语言(如Python、PHP或Java)来完成。在这里,我们以Python为例,使用Flask框架实现一个简单的接口。
from flask import Flask, request app = Flask(__name__) @app.route('/auth', methods=['POST']) def auth(): cookie = request.headers.get('Cookie') if cookie == 'your_cookie_value': return 'OK' else: return 'Unauthorized', 401 if __name__ == '__main__': app.run()
在上述代码中,我们定义了一个/auth
的路由,它接受POST请求。通过request.headers.get('Cookie')
location = /auth
définit une requête interne, qui sera transmise au serveur backend pour authentification. Dans cet exemple, nous supposons que l'adresse du serveur backend est http://backend
et que l'interface d'authentification est /auth
. Implémentez le transfert de requête via la directive proxy_pass
et désactivez la livraison du corps de la requête via proxy_pass_request_body off
et proxy_set_header Content-Length ""
. De plus, les informations URI d'origine sont transmises au serveur principal via proxy_set_header X-Original-URI $request_uri
. http://backend
et l'interface d'authentification est /auth. Maintenant, écrivons l'implémentation réelle de cette interface. La mise en œuvre d'une interface d'authentification simple peut être effectuée à l'aide de n'importe quel langage de programmation Web (tel que Python, PHP ou Java). Ici, nous prenons Python comme exemple et utilisons le framework Flask pour implémenter une interface simple.
rrreeeDans le code ci-dessus, nous définissons une route de /auth
, qui accepte les requêtes POST. Obtenez les informations sur le cookie dans la demande via request.headers.get('Cookie')
et comparez-les avec le cookie par défaut. S'ils correspondent, « OK » est renvoyé pour indiquer une authentification réussie ; sinon, une erreur 401 est renvoyée pour indiquer un échec de l'authentification ;
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!