0

D

我想为我网站上的 CSS 文件使用缓存,我有这样的配置:

server {

   root /webapps/sitoweb;
   listen 443;
   ssl on;
   ssl_certificate /etc/nginx/ssl/bundle.crt;
   ssl_certificate_key /etc/nginx/ssl/privateKey.key;
   ssl_ciphers  HIGH:!aNULL:!MD5:!DSS:!RC4;
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:10m;
   ssl_session_timeout 10m;
   ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
   server_name mysite.com;
   access_log of;

   location /django/ {
      proxy_pass http://127.0.0.1:8001;
      proxy_set_header X-Forwarded-Host $server_name;
      proxy_set_header X-Real-IP $remote_addr;
      add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
      add_header 'Access-Control-Allow-Origin' '*';
      add_header 'Access-Control-Allow-Headers' 'Content-Type,Accept';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
   }

}

现在的情况是(不使用缓存):

在 www.mysite.com/homeCSS.css 中找到文件

在 www.mysite.com/django/djangoCSS.css 中找到文件

我已经修改了 Nging 并添加了这个:

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

现在的情况是(使用缓存):

在 www.mysite.com/homeCSS.css 中找到文件

未找到www.mysite.com/django/djangoCSS.css 中的文件

为什么声明位置(在本例中为位置“django”)中的 CSS 不存在?

4

1 回答 1

0

找不到该位置,因为正则表达式优于标准匹配。这意味着您将 .css 转换为本地请求而不是代理请求,因此它将在配置的根目录中查找该 CSS 文件。解决方案是在 Django 位置下方重复该块,而是使用 proxy_set_header 和等效项来过期。但最好让后端发送正确的标头。

于 2014-09-08T06:58:16.053 回答