Счастливого воскресенья,
Я бьюсь и тяну волосы в течение 3 дней (опасаясь, что к концу месяца буду почти смелым) об управлении кэшем на упакованном лампой экземпляре Bitnami, запущенном в Azure в Ubuntu 16.x.
Я занимаюсь миграцией большой системы с PHP5 на PHP7 уже несколько недель, и вот-вот выполню задачу.
Мой тестовый сайт, использующий систему, доступен здесь: https://stephanedeluca.com для вас, чтобы посмотреть на кеш.
К сожалению, я вижу, что мои PHP-скрипты не сразу отражают изменения, которые я делаю после развертывания (простая загрузка) на сервер.И как следствие, UX иногда разрушается из-за того, что пользователю часто нужно дважды обновлять, а в худшем случае приходится перезагружать все через браузер.
В предыдущей системе все было хорошо,но на этой новой коробке у меня есть проблема.В окне используется php-fpm.
Что я достиг на данный момент в отношении разрешения управления кешем:
из php.ini, я отключил OPCache;- из .htaccess
я использовал mod_expires (я также установил mod_headers и mod_expires) следующим образом:
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 0 seconds"
</ifModule>
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
<ifModule mod_expires.c>
ExpiresDefault "access plus 1 years"
</ifModule>
<ifModule mod_headers.c>
#Header append Cache-Control "public"
</ifModule>
</FilesMatch>
<FilesMatch "\.(gif|jpg|jpeg|png)$">
<ifModule mod_expires.c>
ExpiresDefault "access plus 1 weeks"
</ifModule>
<ifModule mod_headers.c>
#Header append Cache-Control "public"
</ifModule>
</FilesMatch>
<FilesMatch "\.(xml|json|txt|html|js|css)$">
<ifModule mod_expires.c>
ExpiresDefault "access plus 2 hours"
</ifModule>
<ifModule mod_headers.c>
#Header append Cache-Control "proxy-revalidate"
</ifModule>
</FilesMatch>
<filesMatch "\.(php)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
#Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
#Header set Expires "Tue, 15 Mar 1966 10:00:00 GMT+1"
</ifModule>
</filesMatch>
все мои PHP-скрипты (через prepend) генерируют следующие заголовки (сразу после вызова session_start ()):
// === No caching ===
session_cache_limiter('private');
session_cache_expire(0);
// === Start session (must be after session_cache_X())
session_start();
header('Cache-Control: private, max-age=0, s-max-age=0, no-cache, no-store, must-revalidate', true);
header("Last-Modified: $headerNow", true);
Глядя на запрос и ответ браузера, я вижу, что все выглядит хорошо imho:
Request (asсообщает Chrome)
Request URL: https://stephanedeluca.com/
Request Method: GET
Status Code: 200 OK (from ServiceWorker)
Referrer Policy: no-referrer-when-downgrade
Ответ:
Cache-Control: private, max-age=0, s-max-age=0, no-cache, no-store, must-revalidate
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Date: Sun, 28 Apr 2019 12:36:57 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive: timeout=5, max=100
Last-Modified: Sun, 28 Apr 2019 12:36:57 GMT
Pragma: no-cache
Server: Apache
Transfer-Encoding: chunked
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN
X-Generated-On: Sun, 28 Apr 2019 12:36:57 GMT
X-Powered-By: ZID/Webengine v24.0b27 -- Copyright (c) 1995-2019 MagicApps (http://MgcApps.com) -- All Rights Reserved
Provisional headers are shown
Referer: https://stephanedeluca.com/map.php
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
Я также проверил кэш с помощью https://www.giftofspeed.com/cache-checker/, и отчет соответствует ожиданиям.
У меня заканчиваются идеи.