Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/04/2018, à 20:25

boxfly

Nginx PHP Fast CGI cache avec error_page 404

Bonjour,

Je voudrais faire du cache (fast_cgi) sur des réponses 404.

error_page 404 = /url_rewriting.php;

Dans mon url_rewriting.php j'analyse l'URL et si c'est bon je require le fichier php qui va générer l'image:

if(strpos($_SERVER['REQUEST_URI'], 'render/framed/file') !== FALSE) {
    $urlBlocks = ['VR', 'sizePixels', 'image', 'ver', 'frame', 'borderSize', 'mat', 'matSize', 'maxSize', 'frameGlass', 'minSize'];
    foreach($urlBlocks as $oneBlock) {
        if($pos = array_search($oneBlock, $urlParts)) {
            if(isset($urlParts[($pos+1)]) && $urlParts[($pos+1)] != '') {
                $_GET[$oneBlock] = urldecode($urlParts[($pos+1)]);
            }
        }    
    }

    chdir('include/php/render/framed');
    header('Status: 200 OK', false, 200);
    require ('include/php/render/framed/render_img.php');
}

De cette façon, je peux avoir une image source URL dans le HTML comme ceci :

https://mywebsite.com/include/php/render/framed/file/VR/1/size/300/image/U3dpwK/the-cat.jpg 

alors que le fichier the-cat.jpg n'existe pas, il est généré en PHP.

Mais je n'ai pas trouvé de moyen avec Nginx pour faire du cache cgi avec ces images générées en PHP.

set $no_cache 0;

location ~ /render/ {
        include snippets/fastcgi-php.conf;
        #fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_pass 127.0.0.1:9000;

        fastcgi_buffers 8 16k; # increase the buffer size for PHP-FTP
        fastcgi_buffer_size 32k; # increase the buffer size for PHP-FTP
        fastcgi_cache_key $scheme$host$request_uri$request_method;
        fastcgi_cache PROD;
        fastcgi_cache_valid any 20d;
        fastcgi_cache_valid 404 20d;
        fastcgi_cache_use_stale updating error timeout invalid_header http_500 http_503;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
        fastcgi_hide_header "Set-Cookie";
        fastcgi_cache_bypass $no_cache;
        fastcgi_no_cache $no_cache;
        expires 10M;
        access_log off;
        add_header Cache-Control "public";
        add_header X-Cache-Status $upstream_cache_status;
}

Le cache cgi fonctionne pour une image avec cette URL

https://mywebsite.com/include/php/render/framed/img.php?VR=1&size=300&image=U3pmwKi 

mais pas avec l'URL comme ceci:

https://mywebsite.com/include/php/render/framed/file/VR/1/size/300/image/U3dpwK/the-cat.jpg

Pourtant, j'ai mis fastcgi_cache_valid 404 20d;

Alors, comment faire du cache CGI fonctionnant avec l'exécution de error_page 404 = /url_rewriting.php;?

Merci,
Vincent.

Hors ligne