Відповіді:
Я вважаю за краще робити більш повний заголовок кешу, крім деяких додаткових розширень файлів. "?" префікс - позначка "незахоплення", nginx не створить $ 1. Це допомагає зменшити зайве навантаження.
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
набором, у цьому випадку слід додати директиви до цього блоку. (Я знаю, це запізнення на 2 роки, але для майбутніх громадян)
У мене недостатньо репутації, щоб коментувати, чому прийнята відповідь призведе до того, що файли більше не з’являться, але я зрозумів це і хотів би допомогти!
Коротка версія:
Переконайтеся, що у вас є кореневий каталог, вказаний для вашого блоку місцезнаходження на зображеннях, якщо у вас немає глобального набору!
Довга версія нижче:
Перш за все, мій метод реалізації цього рішення був дійсно схожий на цю відповідь , де ви пишете правило (як у прийнятій відповіді):
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;
Таким чином ви можете додати блок розташування кешування зображень на кілька веб-сайтів, на яких ви можете працювати.
По-друге, у мене ситуація, коли мій / 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;
}
.conf
. Відповідна папка в, nginx/1.14.0 (Ubuntu)
здається, є /etc/nginx/snippets/
.
Ви також можете встановити термін дії максимуму. Ось директива, яку я використовую для css та js.
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
Усі вищезазначені рішення заперечують можливість мати різні псевдоніми для різних шляхів. Також для того, щоб усі ваші різні терміни кешу в одному місці, ви повинні використовувати nginx map таким чином.
...
# 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 epoch) призводить до того, що ресурс завжди переробляється, max
встановлює дату для максимального значення браузера.
~ Зображення / відповідає будь-яким типам зображень.
Більше про nginx карти можна знайти на веб-сайті http://nginx.org/en/docs/http/ngx_http_map_module.html .
$sent_http_content_type
є "text/css;charset=UTF-8"
наведене вище вираз зазнає невдачі.
Якщо у вас є одне місце, де розташовані всі ваші статичні файли, щось подібне зробить ...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
Прийнята відповідь заставила nginx не знайти жодного з моїх статичних файлів. Не дуже впевнений, чому, але це проста альтернатива.
/static
папку (усе, що ви встановили в місці) в кінці псевдоніма (відразу після .../files
в прикладі).
Оскільки це дуже стара тема, і я знайшов сучасний дивовижний підручник.
Можливо, ви хочете це перевірити
Як реалізувати кешування браузера з заголовком модуля Nginx на Ubuntu 16.04