用于缓存静态文件的 Nginx 配置

用于缓存静态文件的 Nginx 配置

我在配置 Nginx 以正确服务 AngularJS 应用程序时遇到了一些问题。服务器配置如下:

www.example.com we have the landing page of the application
www.example.com/app we have the application itself

应用程序的路径如下:

/usr/share/nginx/html/example.com/app/

静态文件如下:

/usr/share/nginx/html/example.com/app/public/app/assets

现在我想将登陆页面和应用程序中的所有 html 文件的缓存设置为“无缓存”,但将所有 js、css 和图像文件的缓存设置为 60 天。

这是我当前的 nginx 服务器配置:

server {
listen 80;

index index.html;

server_name example.com www.example.com;

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 60d;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}

location ^~ /app {
    alias /usr/share/nginx/html/example.com/app/public/;
    expires -1;
    add_header Pragma "no-cache";
}

location / {
    root /usr/share/nginx/html/example.com;
    expires -1;
    add_header Pragma "no-cache";
    add_header Cache-Control "no-store, no-cache, must-revalidate,  post-check=0, pre-check=0";
  }
}

现在的问题是位置指令:

location ~* \.(?:ico|css|js|gif|jpe?g|png)$

从未执行,因此缓存被设置为无缓存,如 /app 指令中所定义。

任何想法?

谢谢

答案1

引用自 nginx 文档:

如果最长匹配的前缀位置有“^~”修饰符,则不检查正则表达式。

所以,这里的问题在于你的location ^~ /app定义。^修饰符使 nginx 忽略图像的正则表达式。

您应该使用location /app。此处不需要正则表达式匹配,简单的前缀匹配就足够了。

答案2

我猜问题出在“~*”上,试试用“~”。例如:

location ~ \.(?:ico|css|js|gif|jpe?g|png)$

相关内容