Bonjour,

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

Ce que je fais

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 mais qui est généré en PHP.

Ce que je veux

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

Ce que j'ai essayé

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.

Aucune réponse