2017-05-02 4 views
0

J'utilise fastcgi_cache dans nginx afin d'accélérer le php, qui connecte la base de données et sélectionne les articles.utilise beaucoup de ssi avec fastcgi_cache dans nginx

Voici mon flux:

d'abord, ajouter un ssi-inclure dans mon index:

<\!--# include file="/templates/1-5-list.html" --> 

, j'ajouter une route emplacement pour gérer html -> php dans nginx-conf

location ~(\d*?)-(\d*?)-list.html 
{ 
    try_files $uri /articles/list.php?p1=$1&p2=$2; 
} 

après, je demande fastcgi_cache pour list.php

# outside the server{} 
    fastcgi_cache_path /home/cache/articles levels=1 keys_zone=articles_cache:10m max_size=1024m inactive=1h; 
    fastcgi_cache_key $scheme$host$request_uri$request_method; 
# outside the server{} 

location ~/list.php$ { 
    fastcgi_cache articles_cache; 
    fastcgi_cache_valid 200 2h; 
    ... 
} 

Tout va bien maintenant, et la fonction de mise en cache fonctionne bien.

Cependant, si j'ai deux ou plusieurs ssi dans mon index:

<\!--# include file="/templates/1-5-list.html" --> 
<\!--# include file="/templates/2-5-list.html" --> 

Le second ssi reviennent exactement le même résultat que le premier, FAIL!

je recherche dans le répertoire de cache, et je trouve que, le KEY en utilisant la mise en cache est httplocalhost/articlesGET, ce qui signifie que ces deux ssi partagent le même KEY. Et je pense que c'est la cause.

Ma question est comment puis-je modifier le fastcgi_cache_key de telle sorte qu'ils peuvent avoir différents KEY? J'ai essayé d'ajouter fastcgi_cache_key à l'intérieur location{} mais échoue.

Répondre

0

$request_uri dans nginx La sous-requête SSI fait référence à l'URI de la requête parente. Utilisez $uri dans la clé de cache de fragment incluse à la place: fastcgi_cache_key $scheme$host$uri$request_method;