diff --git a/HowtoNginx.md b/HowtoNginx.md index aafae19b..5635c1f6 100644 --- a/HowtoNginx.md +++ b/HowtoNginx.md @@ -636,6 +636,29 @@ location /YYYYYY/ { error_page 403 /YYYYYY/; ~~~ +### Appliquer des conditions sur des en-têtes + +Il est possible de configurer des comportements conditionnés par le contexte d'une requête. +Voici quelques exemples : + +~~~ +# rejetter toutes les méthodes autres que POST +if ($request_method != "POST" ) { + return 405; +} +# rejetter les requêtes qui n'ont pas une valeur spécifique pour un en-tête personnalisé +# NB : les variables "$http_x_" sont automatiquement remplies avec les en-têtes personnalisés. +if ($http_x_requested_with != "XMLHttpRequest" ) { + return 403; +} +# rejeter les requêtes qui ne sont pas du JSON +if ($content_type != "application/json") { + return 403; +} +~~~ + +Attention toutefois à l'utilisation de `if` dans un bloc `location` : [IfIsEvil](https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/). Cela peut avir des comportements inattendus. + ### Comment prononcer Nginx ? C'est la première question de la [FAQ officielle](https://www.nginx.com/resources/wiki/community/faq/#how-do-you-pronounce-nginx) du projet. Pour les francophones, voilà notre astuce : @@ -656,4 +679,4 @@ Nginx ne gère pas les fichiers `.htaccess`. Si vous devez utiliser des fichiers Il est posisble de créer des "hash map" (cf. [ngx_http_map_module](http://nginx.org/en/docs/http/ngx_http_map_module.html)) pour facilement cérer des variables utilisables dans des blocks, des logs… -Sauf que ces maps ne sont pas restreintes à un bloc serveur (VHost), mais appliquées à tout le bloc http. Il ne faut donc pas donner le même nom à 2 maps, au risque d'avoir des conflits difficiles à débugger. \ No newline at end of file +Sauf que ces maps ne sont pas restreintes à un bloc serveur (VHost), mais appliquées à tout le bloc http. Il ne faut donc pas donner le même nom à 2 maps, au risque d'avoir des conflits difficiles à débugger.