Включить кэширование на сайте php+apache+nginx

nikonlay
На сайте с 11.12.2006
Offline
148
5356

Здравствуйте! У такая ситуация - проверил очередной сайт через PageSpeed Insights - пишет - обязательно используйте кэш браузера. Я думаю - всего делов, добавил в самом начале index.php строки:


Header("Expires: Thu, 29 Sep 2016 17:40:44 GMT");
Header("Cache-Control: max-age=360000");
Header("Last-Modified: Sun, 18 Sep 2016 17:40:44 GMT");

И думаю все, но проверяю еще раз - снова пишет используйте кэш, те же файлы рекомендует кэшировать - в общем без изменений.

Почитал в интернете инфу, смотрю - пишут надо включать кэширование через htaccess. Ок, добавил в него строки:

<IfModule mod_expires.c>

ExpiresActive On

ExpiresDefault "access 7 days"

ExpiresByType application/javascript "access plus 1 year"

ExpiresByType text/javascript "access plus 1 year"

ExpiresByType text/css "access plus 1 year"

ExpiresByType text/html "access plus 7 day"

и так далее для всех типов файлов. Проверяю еще раз через Insights а там снова без изменений!

Ладно, еще более основательно поискал инфу, почитал, пишут, что если на хостинге 2 веб-сервера, как у меня - apache+nginx, то фротенд идет уже через nginx. И нужно именно там все прописывать. Ок, перевел сайт в ручной режим, и прописал уже в файле конфига nginx строки:

server {

location / {

expires 7d;

add_header Cache-Control: max-age=604800;

add_header Cache-Control private; }}

Проверяю еще раз Insights - а там блин снова без изменений, как будто вообще ничего не делал!

Помогите, пожалуйста, кто сталкивался с такой ситуацией - почему так, где еще можно копать? А то уже несколько дней бьюсь, а толком не сдвинулся даже..

会員限定プレゼントにご参加いただきありがとうございます!
S1
На сайте с 15.09.2016
Offline
9
#1

Nginx перезагружали после изменения конфига?

nginx -s reload

SEO анализ сайта (https://seo11.ru/)
nikonlay
На сайте с 11.12.2006
Offline
148
#2

seo11, да, вот только что попробовал перезагрузить - и снова без изменений..

что же за фигня такая?

а не может что-то конфликтовать, из-за того, что я везде прописал это кэширование - и в php, и в htaccess и в конфиге?

eiweb
На сайте с 08.11.2014
Offline
82
#3
nikonlay:
Ладно, еще более основательно поискал инфу, почитал, пишут, что если на хостинге 2 веб-сервера, как у меня - apache+nginx, то фротенд идет уже через nginx. И нужно именно там все прописывать. Ок, перевел сайт в ручной режим, и прописал уже в файле конфига nginx строки:

server {
location / {
expires 7d;
add_header Cache-Control: max-age=604800;
add_header Cache-Control private; }}

Проверяю еще раз Insights - а там блин снова без изменений, как будто вообще ничего не делал!


Помогите, пожалуйста, кто сталкивался с такой ситуацией - почему так, где еще можно копать? А то уже несколько дней бьюсь, а толком не сдвинулся даже..

Покажите файл nginx.conf полностью. А то похоже Вы не в тот прописали.

nikonlay:
а не может что-то конфликтовать, из-за того, что я везде прописал это кэширование - и в php, и в htaccess и в конфиге?

Это вряд ли.

VPS сервер (https://hosteiweb.com) в Европе и США - от €3.43 /мес. (базовое администрирование)
BLIKSSS
На сайте с 11.04.2013
Offline
84
#4
nikonlay:
Здравствуйте!

Почитал в интернете инфу, смотрю - пишут надо включать кэширование через htaccess. Ок, добавил в него строки:

В htaccess строки добавил, а сами модули в апаче включил?

a2enmod headers

a2enmod expires

Если не включены, то по очереди включаем и перезагружаем апач

Попробуй.

nikonlay
На сайте с 11.12.2006
Offline
148
#5

p.s. - сейчас проверил на http://www.bertal.ru/, какие заголовки отдает сервер, и вот что получил:

HTTP/1.1 200 OK

Server: nginx/1.2.1

Date: Mon, 19 Sep 2016 19:54:08 GMT

Connection: keep-alive

Cache-Control: max-age=360000

Expires: Thu, 29 Sep 2016 19:54:08 GMT

X-Powered-By: PHP/5.3.13

Set-Cookie: site_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bi%3A0%3B%7D; expires=Tue, 19-Sep-2017 19:54:08 GMT; path=/; domain=.site.ru

Set-Cookie: site_sid=a1fc424a76dbdeb7cfa15bbfc92e4f7c; path=/; domain=.site.ru

Last-Modified: Sun, 18 Sep 2016 19:54:08 GMT

Насколько я понимаю, в ответах сервера все ок - он передает, что надо кэшировать (вроде). Так что же PageSpeed тогда выеживается?

---------- Добавлено 20.09.2016 в 00:11 ----------

eiweb, да, модули включил сразу, когда прописывал, но не работало

но при этом - уф, сейчас копался в настройках хостинга, ради интереса снова перевел сервер в автоматический режим из ручного. и заметил, что в автоматическом режиме можно в "гуйном" виде, в виде галочек включить сжатие и кэширование, включил его - и вуаля - PageSpeed наконец-то поверил, что кэширование включено! ура!

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

Aisamiery
На сайте с 12.04.2015
Offline
206
#6

nikonlay, Вы изначально сервисами не то проверяли и делали из того, что просил гугл. Кэшировать надо не страницы, заголовки кэша нужно отдавать на статику, то есть картинки/скрипты/стили

За статику не отвечает php, а в вашей связке и апач, так как всю статику отдает nginx и для этого вам в блок server вашего сайта нужно было прописать, что то проде этого


# Expire rules for static content

# cache.appcache, your document html and data
location ~* \.(?:manifest|appcache|html?|xml|json)$ {
expires -1;
# access_log logs/static.log; # I don't usually include a static log
}

# Feed
location ~* \.(?:rss|atom)$ {
expires 1h;
add_header Cache-Control "public";
}

# Media: images, icons, video, audio, HTC
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M;
access_log off;
add_header Cache-Control "public";
}

# CSS and Javascript
location ~* \.(?:css|js)$ {
expires 1y;
access_log off;
add_header Cache-Control "public";
}
Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
nikonlay
На сайте с 11.12.2006
Offline
148
#7

Aisamiery, спасибо за ответ! Сейчас на этом сайте уже ничего трогать не буду - заработало - уже хорошо. Но ваш ответ сохраню и в будущем буду применять, тк за эти дни самому стало очень интересно, почему же ничего не работает из того, что пишут вроде бы знающие люди в своих статьях в Интернет.

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