Я пытался заставить свой Apache Server (v2.4.7) отвечать на заголовок If-Modified-Since, отправленный браузерами и пауками, такими как Google. Я нашел это по рекомендации Google Webmaster. Я не знал об этом до вчерашнего дня и не знал, что Apache не отвечает на этот заголовок и, следовательно, не отправляет обратно заголовок Last-Modified браузеру или пауку.
Я также заметил, что каждый запрос с моего сервера отправлял обратно прагму: nocache
После долгого чтения и возни я действительно заработал на моем основном сайте.
Это произошло только после того, как я обнаружил, что параметр в php.ini для php-fpm называется session.cache_limiter, для которого установлено значение nocache, поэтому я установил его на session.cache_limiter = public
Перезагрузил сервер и вуаля, этот сайт давал правильные заголовки и передавал различные тестеры заголовков If-Modified-Since.
Теперь проблема .... на всех остальных 15 моих сайтах wordpress они по-прежнему отправляют заголовок pragma: nocache и ни один из других заголовков кеша, которые отображаются на основном сайте.
Все сайты имеют одинаковую конфигурацию в своих файлах apache .conf. Все сайты имеют одинаковую конфигурацию в их .htaccess. Все сайты работают под управлением Wordpress.
Я пытался на других сайтах устанавливать и отключать заголовки в файлах apache .conf, но они просто игнорируются.
На всю жизнь мне что-то не хватает, и я не знаю, где и что, целыми днями просматривал файлы .conf, .htaccess и php.ini.
Что-то мешает заголовкам и я не знаю что.
Это мои загруженные модули Apache, если это поможет
Loaded Modules:
core_module (static)
so_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
actions_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
evasive20_module (shared)
expires_module (shared)
fastcgi_module (shared)
filter_module (shared)
headers_module (shared)
mime_module (shared)
mpm_event_module (shared)
negotiation_module (shared)
pagespeed_module (shared)
rewrite_module (shared)
setenvif_module (shared)
socache_shmcb_module (shared)
spamhaus_module (shared)
ssl_module (shared)
status_module (shared)
и это результат -V
Server version: Apache/2.4.7 (Ubuntu)
Server built: Jan 14 2016 17:45:23
Server's Module Magic Number: 20120211:27
Server loaded: APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture: 64-bit
Server MPM: event
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
Я действительно в тупике прямо сейчас, но я еще не перестал искать, надеясь, что кто-то сможет пролить свет на то, что может мешать / отменять отправляемые заголовки.
Чтобы добавить в мою путаницу сейчас ... сайт, на котором он отправляет заголовок Last-Modified, неверен на каждой странице
Последнее изменение: Вт, 2 декабря 2014 г., 11:21:14 GMT
Если я посмотрю на отдельные ресурсы на странице, у них будет правильный Last-Modified
как мой style.css показывает Последнее изменение: чт, 2 июня 2016 г., 09:41:24 GMT
Таким образом, он дает ответы Last-Modified, но на верхнем уровне, т.е. сама страница имеет дату в далеком прошлом.
На веб-сайте, где он не отправляет заголовок Last-Modified, это действительно так, но он отправляет их только для ресурсов на странице, таких как css, jpg и т.д. и т.д., но НЕ для самой страницы.
Итак .... 1 проблема превращается в 2.
Где, черт возьми, это происходит и откуда это свидание?
Это ошибка Apache? Ошибка Wordpress?
Я даже отключил плагины на сайтах wordpress, не отправляя заголовок Last-Modified для страницы, но это не повлияло.
Я все еще думаю, что это происходит где-то внутри Apache или PHP.
Я надеюсь, что это поможет любому другому человеку, запускающему сайты Wordpress на Apache, я обнаружил проблему, и это вообще не имеет отношения к Apache.
Проблема в том, что Wordpress удаляет заголовки Etag, Last-Modified, Expires и Cache-Control со всех страниц и сообщений.
Но для тех, кто хочет фактического контроля над тем, что можно кэшировать, а не кэшировать, этот контроль просто удаляется.
Выражаем благодарность человеку, который написал такой плагин для Wordpress, и он просто работает из коробки. Его также можно дополнительно настроить, добавив функции, фильтры и перехватчики в файл functions.php вашей темы.
Плагин можно получить из: https://wordpress.org/plugins/add-headers/
Подробная информация и полная документация по плагину:
http://www.codetrax.org/projects/wp-add-headers/wiki/Configuration и http://www.codetrax.org/projects/wp-add-headers/wiki/Filter_and_Action_Hooks
Так что, надеюсь, это спасет кого-то еще от потери рассудка, как я чуть было не думал, что что-то происходит с Apache, в то время как не такой уж невинный Wordpress делал это.
Я знаю, что наконец-то снова имею полный контроль над своими заголовками, и с помощью хуков и фильтров этого плагина я могу настраивать время кеширования, даже на отдельных страницах, и особенно на таких вещах, как система корзины покупок, которую я могу установить на нулевое кеширование. Так просто :)