1

The problem is nginx does not display images and shows 404 not found on some folders. When i remove caching from config everything works fine. Trying to configure nginx to cache static files with this config

location ~* \.(?:css|cur|js|jpg|jpeg|webp|gif|htc|ico|png|html|xml|otf|ttf|eot|woff|woff2|svg)$ {

                expires 1y;
                access_log off;
                add_header Cache-Control "public";
                tcp_nodelay off;
                open_file_cache max=3000 inactive=120s;
                open_file_cache_valid 45s;
                open_file_cache_min_uses 2;
                open_file_cache_errors off;
}
        # pass PHP scripts to FastCGI server
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
                include fastcgi_params;
                fastcgi_intercept_errors on;
        }
  location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

here is error log

    2021/08/17 11:08:10 [error] 278986#278986: *3642 open() "/var/www/website/public/cache/medium/product/347/rC0dMIdOJIJNSmpKgm9pVqKVE59HKAl8SKujwxHF.jpg" failed (2: No such file or directory), client: 95.85.108.178, server: ozan.com.tm, request: "GET /cache/medium/produ
ct/347/rC0dMIdOJIJNSmpKgm9pVqKVE59HKAl8SKujwxHF.jpg HTTP/2.0", host: "www.website.tm", referrer: "https://www.website.tm/"

nginx displays images from source: https://website.tm/storage/velocity/category_icon_path/77/5wiasmLf6hQGAsjsTV4jXsjnG0ELm5ak0rgpV7c2.png

nginx does not display from: https://website.tm/cache/medium/product/353/jtTzvdT8ZmB6Lu7wFKj969Uzj0qqu1qRUt2CxEbz.jpg

merdan
  • 113
  • 5
  • 3
    What is the purpose of caching images? As you said, they are static content. I may be wrong here and If I am I hope somebody comes in to correct me but I believe you only need to cache "dynamic" content. Say your webpages are coming from a database, you would cache pages that change infrequently to prevent regenerating the page every load in doing so speeding up the loading. The images to my mind are the same the origin or the cache, unless you are generating smaller images on the fly. Then yes cache those. – CodingInTheUK Aug 17 '21 at 07:19
  • You may find this useful: https://serverfault.com/questions/861565/nginx-cache-images-generated-by-backend – CodingInTheUK Aug 17 '21 at 07:22
  • Indeed, there is very little point to caching static assets again as they are already cached for you in memory by the operating system, and nginx is just writing a second copy on disk which it then has to spend extra time looking for. – Michael Hampton Aug 17 '21 at 23:01

1 Answers1

1

Your image location block is missing try_files directive, which tells what nginx should serve for requests hitting that location.

Add

try_files $uri $uri/ =404;

to the location block.

Tero Kilkanen
  • 36,796
  • 3
  • 41
  • 63