NGINX缓存静态文件

Szo*_*zop 24 static nginx

我在定义缓存静态文件的规则时遇到了一些麻烦.我找到了这个解决方案:

location ~* \.(ico|js|css|png|gif|jpe?g)$ {
  expires 7d;
}
Run Code Online (Sandbox Code Playgroud)

这实际上看起来像我需要的.问题是,如果我将此代码包含到我的NGINX.conf中,则不再提供静态文件,并且我的站点为空.可能导致此结果的任何想法/提示?也许我必须补充一点,静态文件分布在不同的目录中:/.我的NGINX配置文件如下所示:

server {
  server_name               bla.domain.com;

  listen                    80;
  root                      /var/repo/;

  location / {
    default_type            text/html;
    index                   index.html;

    if ($request_method !~ ^(GET)$ ) {
      return 444;
    }

    if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
      return 403;
    }

    if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) ) {
      return 403;
    }
  }

  location /bf/football/ {
    alias   /var/repos/f20;
  }

  location /bf/f20/ {
    alias   /var/repo/f20;
  }

  location /bf/zoo/ {
    alias   /var/repo/zoo/;
  }

  location /kbloader/ {
    alias   /var/repo/kbloader/;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮我解决这个问题或者指出我正确的方向,那会很好.

干杯,Szop

Joo*_*aan 51

把它放在你的其他位置块之前:

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Vary Accept-Encoding;
    access_log off;
}
Run Code Online (Sandbox Code Playgroud)

这应该工作.

你也可以用这个:

## All static files will be served directly.
location ~* ^.+\.(?:css|cur|js|jpe?g|gif|htc|ico|png|html|xml|otf|ttf|eot|woff|woff2|svg)$ {
    access_log off;
    expires 30d;
    add_header Cache-Control public;

    ## No need to bleed constant updates. Send the all shebang in one
    ## fell swoop.
    tcp_nodelay off;

    ## Set the OS file cache.
    open_file_cache max=3000 inactive=120s;
    open_file_cache_valid 45s;
    open_file_cache_min_uses 2;
    open_file_cache_errors off;
}
Run Code Online (Sandbox Code Playgroud)

  • 另一个技巧:在您的 HTML(模板)中,您可以使用查询字符串使浏览器缓存无效。app/styles/style.css 会变成 app/styles/style.css?v=1 然后每当你用新的样式更新你的 CSS 时,你可以通过将它更改为 app/styles/style.css?v=2 来使其失效 (3认同)
  • 在这种情况下如何清除缓存?会像重启 nginx 一样简单吗? (2认同)
  • 此示例不是服务器端缓存,它管理浏览器缓存.您可以通过使用shift + F5/ctrl + F5重新加载来清除浏览器缓存 (2认同)
  • 两种方法都会使该文件类型为 404 (2认同)

rac*_*iri 19

将其放在 nginx 配置文件中的服务器部分之前,如下所示:

. . .
# Expires map
map $sent_http_content_type $expires {
    default                    off;
    text/html                  epoch;
    text/css                   max;
    application/javascript     max;
    ~image/                    max;
}

server {
   listen 80 default_server;
   listen [::]:80 default_server;

   expires $expires;
. . .
Run Code Online (Sandbox Code Playgroud)

~image 将处理所有类型的图像(而不是对它们进行硬编码)

有关如何处理 nginx 缓存的更多信息,请参阅链接

  • 这个答案应该被选为最佳答案。谢谢你,@rachid (2认同)