Dans ce tutoriel je vous propose de découvrir comment utiliser nginx et son système de sous-requête pour gérer l'accès à des ressources.
La problématique
Dans le cadre de notre application on souhaite distribuer des fichiers volumineux mais on ne souhaite pas gérer cette distribution depuis notre code (car on ne souhaite pas bloquer un thread PHP pendant une longue durée par exemple). On souhaite donc utiliser nginx qui est pensé pour ce genre de chose tout en gardant la possibilité de limiter l'accès au contenu aux utilisateurs qui sont authentifié (ou en fonction d'une logique particulière).
La solution
Nginx dispose d'un système capable d'effectuer une sous-requête afin de déterminer si l'utilisateur a le droit ou non d'accéder à la ressource.
location /stream/ {
auth_request /index.php;
alias /var/www/videos/;
}
Toutes les informations liées à la requête initiale (en tête et URL) seront transmises à cette sous-requête. Le statut retourné par cette sous-requête permettra de déterminer si l'utilisateur à accès à la ressource :
- 401 ou 403 bloquera l'accès à la ressource
- 2xx permettra d'autoriser l'accès.