Установка истекает для заголовков статического содержимого, поданных из nginx

Я использую nginx для сервера моего статического контента, есть ли способ, чтобы я мог установить заголовки истечения для каждого файла, который соответствует определенному правилу? Например, можно ли задать заголовок expires для всех файлов с расширением «.css»?

83 голоса | спросил Unkwntech 10 J0000006Europe/Moscow 2009, 11:19:43

7 ответов


109

Я предпочитаю делать более полный заголовок кеша, а также некоторые дополнительные расширения файлов. «?» префикс - это «не захватывающий» знак, nginx не создаст $ 1. Это помогает уменьшить ненужную нагрузку.

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}
ответил TechZilla 26 62011vEurope/Moscow11bEurope/MoscowSat, 26 Nov 2011 01:07:20 +0400 2011, 01:07:20
21
server {
    ...

    location ~* \.css$ {
       expires 30d;
    }
    ...
}

location директива

expires директива

ответил Dave Cheney 10 J0000006Europe/Moscow 2009, 11:23:53
10

У меня недостаточно репутации, чтобы прокомментировать, почему принятый ответ заставит файлы больше не появляться, но я понял это и хотел бы помочь!

Краткая версия:

Убедитесь, что у вас есть корневой каталог, указанный для вашего блока местоположений на изображениях, если у вас нет глобального набора!

Длинная версия ниже:


Во-первых, мой метод реализации этого решения был действительно похож на на этот ответ , где вы пишете правило ( как в принятом ответе):

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

в файл img-cache.conf

, а затем включите этот файл в директиву server {...}.

Мой пример somesite.com в папке, доступной для моих сайтов:

 #Image Caching
 include /etc/nginx/conf/img-cache.conf;

Таким образом вы можете добавить блок местоположения кэширования изображений на несколько сайтов, которые вы могли бы запустить.


Во-вторых, у меня есть ситуация, когда my /var /www /содержит две папки, которые я разрешаю как public_html, - безопасность и обучение, поэтому мне нужно сделать определенные блоки местоположения в директиве сервера на моем сайте, выделив эти папки.

Как таковой, У меня нет глобального набора корневых каталогов .

Поэтому, когда вы создаете блоки изображения, , вы не можете предоставить им корневой каталог , из которого можно искать изображения!

Мое решение было тогда:

location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
        root /var/www/;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        try_files $uri 404;
}

location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
        root /var/www/secure;
        expires 7d;
        add_header Pragma public;
        add_header Cache-Control "public";
        try_files $uri 404;
}
ответил amurrell 1 FebruaryEurope/MoscowbSat, 01 Feb 2014 01:43:39 +0400000000amSat, 01 Feb 2014 01:43:39 +040014 2014, 01:43:39
9

Вы также можете установить максимальный срок действия. Вот директива, которую я использую для css и js.

# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
    access_log off;
    expires max;
}
ответил Jauder Ho 10 J0000006Europe/Moscow 2009, 12:41:46
2

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

...

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

...

server {
   listen ...;

   expires $expires;
   location /assets/ {
      # It is now possible to serve some resources from different path
      alias /var/www/my_other_path/
   }

   # and have them all have same expirations
   location / {
       try_files $uri $uri/ /index.html;
   }
...
}

Off отключает кеширование, epoch (для эпохи unix) приводит к тому, что всегда загружается ресурс, max задает дату для максимального значения браузера.

Изображение /соответствует любым типам изображений.

Подробнее о картах nginx на http://nginx.org/en/docs/HTTP /ngx_http_map_module.html .

ответил Pantura 4 Jpm1000000pmThu, 04 Jan 2018 22:58:33 +030018 2018, 22:58:33
0

Если у вас есть одно место, где хранятся все ваши статические файлы, что-то вроде этого будет ...

 location /static {
            your/location/to/static/files/static;
            expires 30d;
            add_header Cache-Control "public";
    }

Принятый ответ заставил nginx не находить никаких моих статических файлов. Не совсем уверен, почему, но это простая альтернатива.

ответил user161646 25 FebruaryEurope/MoscowbMon, 25 Feb 2013 07:12:31 +0400000000amMon, 25 Feb 2013 07:12:31 +040013 2013, 07:12:31
-1

Так как это очень старый поток, и я нашел обновленное замечательное учебное пособие.

Возможно, вы хотите проверить его

Как реализовать кеширование браузера с помощью модуля заголовка Nginx на Ubuntu 16.04

ответил Mohammad Kawsara 4 Mayam17 2017, 07:18:15

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132