NGINX,在特定文件夹中禁用特定文件类型的缓存

时间:2018-05-15 07:38:02

标签: nginx caching

我有 - 不幸的是Windows-Nginx服务器用于静态内容(如产品照片等)。目前我有一个缓存的全局设置,但现在我需要改变它。

我有一个文件夹,其路径如下所示:

E:\xampp\srv\project-files\projectX\files\users\user-hash\visualisator\views

正如您在路径中看到的那样, user-hash 变量会发生变化。在这个文件夹中,我有* .jpg文件,需要禁用缓存。

我已经尝试过这样的事情(位于其他(全局)位置设置之上):

location ~ /users/ {
   alias "E:/xampp/srv/project-files/projectX/files/users";
   expires -1;
   add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
 }

我一直希望它至少会禁用此文件夹中所有文件的缓存。但我得到的唯一结果是http 403

我可以使用文件夹users中的已禁用缓存,如果它可以正常工作,但最好的解决方案是禁用整个路径的缓存(使用 user-hash 变量包括)和仅适用于特定文件类型(* .jpg)。

任何想法或建议如何实现这一目标? PS:NGinx对我来说是新的,我用这种技术花了8个小时的时间,所以很抱歉,如果这是一个愚蠢的问题,但我无法弄明白或在任何地方找到它。

提前谢谢!

2 个答案:

答案 0 :(得分:3)

location ~ .*files/projectX/files/users/.*jpg$ {
          expires -1;
          add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
        }

这就是诀窍。

答案 1 :(得分:0)

这对我有用,我需要排除的文件是 PHP 文件。也许您可以为您的 location ~ .*files/projectX/files/users/.*jpg$ 使用相同的代码,它也可以工作。我尝试了上面和其他页面中的所有示例。唯一对我有用的就是这个。我的文件是一个 PHP 文件,我必须创建配置文件最后一部分的完整副本。也许更换您的位置对您有用。

location ~ player\.php {
        set $no_cache 1;
            fastcgi_index  index.php;
            include        fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;   
            if (-f $request_filename) {
                # Only throw it at PHP-FPM if the file exists (prevents some PHP exploits)
                fastcgi_pass   unix:/tmp/run/php7-fpm.sock;
                #fastcgi_read_timeout 3600;
            }         
}