Кэширование статики nginx

X-whisper
На сайте с 01.05.2006
Offline
148
5286

Началось с того, что сайт показал плачевные результаты в PageSpeed Insights, потребовалось сжатие, установил nginx, сжатие работает, но настройки кэширования из .htaccess сводит на нет.

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

location ~* \.(jpg|jpeg|gif|png)$ {
expires 720h;
add_header Cache-Control "public, max-age=2592000";
}

По идее в Header у картинок должна появиться запись Cache-Control, но её нет

Вот всё что выдаёт:

HTTP/1.1 304 Not Modified
Server: nginx
Date: Mon, 12 Jan 2015 20:39:24 GMT
Last-Modified: Tue, 28 Oct 2014 15:18:53 GMT
Connection: keep-alive
ETag: "544fb3dd-5015"

Перепробовал разные конфиги, за основу оставил из этого видео

Весь файл nginx.conf выкладывать сюда не буду, выложу по ссылке.

Если, кто найдет решение, неделю покручу рекламу на сайте в качестве благодарности.

Мне не хватает внимания со стороны поисковиков, обнимите меня кто-нибудь. Аватары (http://avatarko.ru/)
Andron_buton
На сайте с 19.07.2007
Offline
270
#1

X-whisper, оставьте только expires 720h; он как раз и делает этот хедер. Уберите add_header Cache-Control "public, max-age=2592000";

к примеру у меня есть в конфиге expires 7d;

а хедеры выглядят так:

Server: nginx/1.4.2

Date: Mon, 12 Jan 2015 21:39:34 GMT

Content-Type: image/jpeg

Content-Length: 46641

Last-Modified: Tue, 08 Jul 2014 12:22:34 GMT

Connection: keep-alive

Etag: "53bbe28a-b631"

Expires: Mon, 19 Jan 2015 21:39:34 GMT

Cache-Control: max-age=604800

Accept-Ranges: bytes


200 OK
lealhost
На сайте с 07.06.2014
Offline
136
#2

Так nginx и не будет отдавать Cache-Control по вашему конфигу, потому что он их просто не обрабатывает.

А если быть точнее, в Вашем конфиге он забирает статику у Apache.

В локации должно быть указан proxy_pass до сервера с картинками (до корня сайта) или директивой root, если файлы лежат локально.

Тогда nginx будет знать где лежат статические файлы, чтобы самому их забрать.

То есть так:


location ~* \.(jpg|jpeg|gif|png)$ {
proxy_pass http://92.63.97.253:9090/;
expires 720h;
}

или так:


location ~* \.(jpg|jpeg|gif|png)$ {
root /var/www/site.com;
expires 720h;
}
Andron_buton
На сайте с 19.07.2007
Offline
270
#3

lealhost, вообще-то директивы наследуются с верхнего уровня, если свои отсутствуют.

lealhost
На сайте с 07.06.2014
Offline
136
#4
Andron_buton:
lealhost, вообще-то директивы наследуются с верхнего уровня, если свои отсутствуют.

Думаю наследуются только если локейшн вложенный.

VK
На сайте с 29.12.2011
Offline
42
#5

У Вас вообще нет директивы root. Это точно весь конфиг?

X-whisper
На сайте с 01.05.2006
Offline
148
#6


location ~* \.(jpg|jpeg|gif|png)$ {
proxy_pass http://92.63.97.253:9090/;
expires 720h;
}

Ошибку выдаёт

2015/01/13 02:17:05 [emerg] 20913#0: "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in /etc/nginx/nginx.conf:88


location ~* \.(jpg|jpeg|gif|png)$ {
root /var/www/site.com;
expires 720h;
}

root /var/www/SITE.COM;

или

root /var/www/USER/data/www/SITE.COM; ? (у меня в этой директории сайт)

и так и так не работает.

Видимо что-то ещё тут мешает.

Andron_buton
На сайте с 19.07.2007
Offline
270
#7

lealhost, у нгинкса все наследуется по иерархии контекста

Как видно по ссылкам ниже, для директивы root максимальный контекст - http, для директивы roxy_pass - location

http://nginx.org/ru/docs/http/ngx_http_core_module.html#root

http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_pass

---------- Добавлено 13.01.2015 в 00:37 ----------

X-whisper,Вы пробовали просто убрать add_header?

---------- Добавлено 13.01.2015 в 00:40 ----------

V2NEK, даже если и нет и оно как-то работало, то не в этом причина.

По дефолту root кажись /var/www/html

---------- Добавлено 13.01.2015 в 00:42 ----------

X-whisper:
root /var/www/SITE.COM;
или
root /var/www/USER/data/www/SITE.COM; ? (у меня в этой директории сайт)
и так и так не работает.

Какую ошибку выдает? Или в чем заключается "не работает"?

X-whisper
На сайте с 01.05.2006
Offline
148
#8
Andron_buton:
lealhost
X-whisper,Вы пробовали просто убрать add_header?

Да, пробовал.

Какую ошибку выдает? Или в чем заключается "не работает"?

Ошибку в обоих случаях не выдаёт,

"не работает" значит в header картинок нет записей, которые бы кэш браузера их добавляли.

lealhost
На сайте с 07.06.2014
Offline
136
#9

Смотрите в /var/log/nginx/error.log, что пишет.

X-whisper
На сайте с 01.05.2006
Offline
148
#10

Я нашёл решение!

Вот такая запись есть в конфиге

include /etc/nginx/vhosts/*/*.conf;

лезу в папку

vhosts/USERNAME/

нахожу нужный сайт и удаляю всё оттуда

У картинок появляется запись в header

Cache-Control:max-age=2592000, private

PROFIT

Сработало для главного домена, но

удалил все строки из /etc/nginx/vhosts/*/DOMAN2.conf , но на домене DOMAN2.COM по прежнему нет кэширования, значит где-то в nginx.conf что-то не учтено

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий