2016-08-10 1 views
1

J'essaie d'intégrer un plugin WordPress (module Related Posts de Jetpack) qui ajoute des chaînes de requête à la fin des URL de message. Je voudrais mettre en cache les URL avec FastCGI tout en ignorant complètement les chaînes de requête/$args.

Ma config actuelle est: fastcgi_cache_key "$scheme$request_method$host$request_uri";

Je suis au courant de l'utilisation the solution mentioned here pour tourner $skip_cache variables hors des URL contenant un certain $arg, qui fonctionne. Cependant, je veux mettre en cache le même résultat indépendamment de la valeur du $args plutôt que d'utiliser une clé de cache unique pour chaque ensemble de $args.

Je suis également au courant de some suggestions pour simplement utiliser $uri dans le fastcgi_cache_key plutôt que $request_uri; Cependant, étant donné que $uri n'est pas seulement l'URI demandé original moins le $args, quelque chose dans l'architecture WordPress (probablement de jolis liens) oblige tous les URI demandés à retourner le même résultat de cache (plutôt qu'un résultat différent pour chaque page).

Existe-t-il un moyen d'utiliser réellement l'URI initialement demandé sans inclure le $args dans la clé de cache?

Répondre

1

Juste maintenant, j'ai eu le même problème. Alors, ma solution:

Dans la configuration nginx ajouter à la

http { 
    ... 
    map $request_uri $request_path { 
     ~(?<captured_path>[^?]*) $captured_path; 
    } 
    ... 
} 

Ensuite, vous aurez une variable request_path de $, qui contient request_uri de $ sans query_string.

Il faut donc utiliser request_path de $ pour le cache clé

fastcgi_cache_key "$scheme$request_method$host$request_path" 

Important. La directive "map" peut être ajoutée uniquement à "http {}". Cette directive sera exécutée pour toutes les demandes pour tous les hôtes.