Cache inconsistente e expira cabeçalhos (pragma: nocache)

1

Eu estava tentando fazer com que meu Apache Server (v2.4.7) respondesse a um cabeçalho If-Modified-Since enviado por navegadores e spiders como o Google. Eu encontrei isso em uma recomendação no Google Webmaster. Eu nunca soube disso até ontem, nem sabia que o Apache não estava respondendo a esse cabeçalho e, portanto, não enviando de volta um cabeçalho Last-Modified para o navegador ou spider.

Eu também notei que cada solicitação do meu servidor estava enviando de volta o pragma: nocache

Depois de ler e mexer muito, eu consegui trabalhar no meu site principal.

Isso foi somente depois de descobrir que uma configuração em php.ini para php-fpm chamava session.cache_limiter que era configurada para nocache, então eu a configurei para session.cache_limiter = public

Reinicializou o servidor e voila, esse site estava fornecendo os cabeçalhos corretos e passou em vários testadores de cabeçalho If-Modified-Since.

Agora, o problema .... em todos os meus outros 15 sites wordpress, eles ainda estão enviando o cabeçalho pragma: nocache e nenhum dos outros cabeçalhos de cache que estão sendo exibidos no site principal.

Todos os sites têm exatamente a mesma configuração em seus arquivos apache .conf Todos os sites têm exatamente a mesma configuração em seus .htaccess Todos os sites estão executando o Wordpress

Eu tentei nos outros sites definir e desmarcar cabeçalhos nos arquivos .conf do apache, mas eles estão simplesmente sendo ignorados.

Para a vida de mim estou faltando alguma coisa e eu não sei onde ou o quê, estão passando por arquivos .conf e .htaccess e php.ini durante todo o dia.

Algo está interferindo nos cabeçalhos e eu não sei o quê.

Estes são os meus módulos do Apache carregados, se isso ajudar

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)

e esta é a saída de -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"

Estou realmente perplexo agora, mas ainda não desisti de esperar, esperando que alguém possa esclarecer o que pode estar interferindo / anulando os cabeçalhos enviados.

Para aumentar a minha confusão agora ... o site onde está enviando o cabeçalho Last-Modified está errado em todas as páginas

Última modificação: terça, 02 dez 2014 11:21:14 GMT

Se eu examinar recursos individuais dentro da página, eles terão a Última modificação correta

como meu style.css mostra Last-Modified: qui, 02 jun 2016 09:41:24 GMT

Por isso, está dando respostas Last-Modified, mas no nível superior, ou seja. a página em si tem uma data distante no passado.

No site onde ele não está enviando o cabeçalho Last-Modified, ele está, na verdade, enviando apenas recursos na página como css, jpg, etc, mas NÃO para a própria página.

Então .... 1 problema se transforma em 2.

Onde diabos isso está acontecendo e de onde está tirando essa data?

Este é um bug do Apache? Um bug do Wordpress?

Eu já passei por desabilitar plugins nos sites wordpress que não enviam o cabeçalho Last-Modified para a página, mas isso não tem efeito.

Eu ainda acho que isso está acontecendo dentro do Apache ou PHP em algum lugar.

    
por MitchellK 02.06.2016 / 18:42

1 resposta

1

Espero que isso ajude qualquer outra pessoa a executar sites Wordpress no Apache, encontrei o problema e não tem nada a ver com o Apache.

O problema é que o Wordpress retira os cabeçalhos Etag, Last-Modified, Expires e Cache-Control de todas as páginas e posts.

Mas para aqueles que querem controle real sobre o que pode ser armazenado em cache e não armazenado em cache, o controle é removido.

Os agradecimentos vão para um indivíduo que escreveu um plugin desse tipo para o Wordpress e ele simplesmente sai da caixa. Ele também pode ser personalizado adicionando funções, filtros e ganchos ao arquivo functions.php do seu tema.

O plugin pode ser obtido de: link

Detalhes e Documentação Completa para o plugin estão em:

link e link

Portanto, espero que isso evite que outra pessoa perca a cabeça, como eu quase achei que havia algo acontecendo com o Apache, enquanto o não tão inocente Wordpress estava fazendo isso.

Eu sei que finalmente tenho controle total sobre meus cabeçalhos novamente e através dos ganchos e filtros deste plugin eu posso personalizar os tempos de cache, mesmo em páginas individuais e especialmente em coisas como um sistema de carrinho de compras que posso definir como zero segundos de cache. Tão simples:)

    
por 03.06.2016 / 09:07