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 mais qui 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.