2015-08-27 3 views
1

Я пытаюсь получить nginx до не Поместите некоторые заголовки в ответ для определенного набора файлов. В общем, мы хотим установить заголовок, чтобы избежать кэширования, но в IE есть ошибка с потрясающим шрифтом, где он ломается, если он не кэшируется. Мы старались избегать кэширования файлов шрифтов.местоположение nginx без пропущенного кода

Вот код:

location /app-name { 
    alias /usr/local/nginx-sites/<app-folder>/current; 

    location ~ /app-name/(.*\.(woff|ttf))$ { 
    add_header X-FONT "$1"; # if I comment this out, then I get the headers below 
    } 

    add_header Cache-Control "no-cache, no-store, must-revalidate"; 
    add_header Pragma "no-cache"; 
    add_header Expires "0"; 

    index index.html index.htm; 
} 

Как код, он работает. Однако, если я прокомментирую add_header X-FONT "$1";, он возвращается к обслуживанию файла с нежелательными заголовками. Я бы предпочел не проходить случайный заголовок, чтобы nginx выполнял то, что я ожидал. Кажется немного бессмысленным.

С заголовком X-FONT:

> GET /<app-name>/fonts/fontawesome-webfont.woff?v=4.2.0 HTTP/1.1 
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
> Host: localhost 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Server: nginx/1.1.19 
< Date: Thu, 27 Aug 2015 07:50:17 GMT 
< Content-Type: application/octet-stream 
< Content-Length: 65452 
< Last-Modified: Thu, 27 Aug 2015 01:56:10 GMT 
< Connection: keep-alive 
< X-FONT: fonts/fontawesome-webfont.92e68ff4.woff 
< Accept-Ranges: bytes 

Без заголовка X-FONT:

> GET /<app-name>/fonts/fontawesome-webfont.woff?v=4.2.0 HTTP/1.1 
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
> Host: localhost 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Server: nginx/1.1.19 
< Date: Thu, 27 Aug 2015 07:53:15 GMT 
< Content-Type: application/octet-stream 
< Content-Length: 65452 
< Last-Modified: Thu, 27 Aug 2015 01:56:10 GMT 
< Connection: keep-alive 
< Cache-Control: no-cache, no-store, must-revalidate 
< Pragma: no-cache 
< Expires: 0 
< Accept-Ranges: bytes 

Мы бежим: nginx/1.1.19. Я также пробовал: nginx/1.6.2 (Ubuntu) в VM с теми же результатами.

Есть ли лучший способ сделать это?

+1

Просто не использовать вложенные места –

+2

или попробовать ' add_header x-font ""; ' –

+0

Добавление этого пустого заголовка. Мне не нравится, что у меня есть этот заголовок (который я технически не использую) в конфиге, но он отсылает его клиентам. Благодаря! – robertrv

ответ

0

Согласно this answer to a similar question, вы должны быть в состоянии использовать отрицательный взгляд за синтаксисом, чтобы исключить Woff и файлы TTF расширений из заголовков кэшей направляются:

location ~ .+(?<!\.woff)$ { 
    location ~ .+(?<!\.ttf)$ { 
     add_header Cache-Control "no-cache, no-store, must-revalidate"; 
     add_header Pragma "no-cache"; 
     add_header Expires "0"; 
    } 
} 
+0

Мне нравится ваш ответ. Но когда я попробовал это, я получил 'pcre_compile() не удалось: lookbehind утверждение не фиксированной длины в.. + (? robertrv

+0

Спасибо за ваш ответ. Я изменил свой пост, чтобы использовать вложенные условия. В моей среде nginx configuretest успешно работает с новой вложенной конфигурацией. – Raphael