Невозможно отключить кэш PHP, несмотря на тщательные настройки и настройку - PullRequest
0 голосов
/ 28 апреля 2019

Счастливого воскресенья,

Я бьюсь и тяну волосы в течение 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/, и отчет соответствует ожиданиям.

У меня заканчиваются идеи.

1 Ответ

0 голосов
/ 30 апреля 2019

Инженер Битнами здесь. Чтобы отключить кэш на сервере и каждый раз разрешать обслуживание файлов, отключите PageSpeed ​​для Apache и OPCache для PHP, включенные по умолчанию.

Чтобы отключить PageSpeed, закомментируйте следующие строки в вашем httpd.conf (/opt/bitnami/apache2/conf/httpd.conf)

#Include conf/pagespeed.conf
#Include conf/pagespeed_libraries.conf

Чтобы отключить OPCache, измените opcache.enable в файле php.ini и установите для него значение 0 (/opt/bitnami/php/etc/php.ini)

Перезапустите все службы после этого

sudo /opt/bitnami/ctlscript.sh restart
...