Pour autant que je sache, les variables ne sont toujours pas autorisées en error_log
même si vous pouvez les utiliser dans access_log
(comme le montre votre capture d'écran qui fonctionne correctement dans votre scénario).
En outre, vous devriez presque toujours utiliser $host
car c'est la seule variable garantie de dire quelque chose de sensé quel que soit le comportement de l'agent utilisateur.
Vous pouvez vérifier la différence entre $host et $server_name en cliquant sur documentation nginx :
-
$host
Le nom de l'hôte doit être indiqué dans l'ordre suivant : nom de l'hôte dans la ligne de requête, ou nom de l'hôte dans le champ d'en-tête "Host" de la requête, ou nom du serveur correspondant à une requête.
-
$server_name
nom du serveur qui a accepté une demande. Elle contient le server_name
de l'hôte virtuel qui a traité la requête, tel qu'il a été défini dans la configuration de nginx. Si un serveur contient plusieurs noms de serveur, seul le premier sera présent dans cette variable.
Comme vous devez tenir compte de toutes les choses possibles qu'un agent utilisateur peut faire lorsqu'il formule une requête HTTP (les anciennes requêtes HTTP/1.0 et les logiciels modernes mal écrits peuvent se produire en permanence), vous devriez envisager de n'utiliser que l'attribut $host
pour l'usage que vous souhaitez en faire.
Il convient de mentionner que access_log
est traité por ngx_http_log_module
, while error_log est traité un peu différemment en tant que ngx_core_module
.