Recientemente me he encontrado con un problema después de cambiar a Cloudflare, y la solución es básicamente evitar que Cloudflare almacene en caché las respuestas 404.
En nuestra configuración de varios servidores con equilibrio de carga, suceden ocasionalmente 404, pero rsync los soluciona rápidamente (a través de lsyncd). Antes de Cloudflare, una nueva solicitud al archivo 404ed se convertiría rápidamente en 200 a medida que rsync hace su trabajo.
Sin embargo, dado que Cloudflare almacena en caché todos los datos basados en el encabezado de almacenamiento en caché, y ni apache ni nginx envían un encabezado sin caché para 404s, Cloudflare termina almacenando en caché la respuesta 404 por un tiempo.
He estado buscando una solución para agregar globalmente ese encabezado para 404s tanto en apache como en nginx (globalmente, para todos los dominios alojados), pero hasta ahora he quedado en blanco.
¿Alguien puede ayudar?
Gracias.
fuente
Respuestas:
¿No puede usar una directiva error_page y luego manejar la ubicación por separado con el encabezado agregado?
Por ejemplo, en Nginx:
fuente
listen
puesto yalocation
que no se admitehttp
directamente dentro . 2. Más importante aún, su fragmento en realidad no funciona porque add_header solo se aplica a 20X y 30X ( nginx.org/en/docs/http/ngx_http_headers_module.html ). Sin embargo, estamos de enhorabuena, ya que a partir del 1.7.5 lanzado recientemente, ahora puede agregar unalways
modificador que lo aplicará a todos los códigos de respuesta. Tuve que actualizar nginx pero fue una buena patada en el trasero. Funciona.root
funciona también. Si eso se elimina, es más o menos lo que terminé haciendo para nginx.server
, puede recibir una votación positiva.También puedes hacerlo de esta manera:
fuente
404 "no-cache"
pero la estúpida restricción de edición mínima de 6 caracteres de stackexchange me impide arreglarlo. Claramente no es una buena restricción para un sitio que se trata de codificación y configuraciones ...En apache 2.4, puedes probar algo como:
El
always
es importante porque este es un:Dijiste todos los 404, pero para una referencia completa, por supuesto, podría tener sentido envolver eso en
<FilesMatch>
o<LocationMatch>
limitar el alcance.Creo que esta es una nueva capacidad en Apache 2.4, ya que el uso de
expr
condicionales no está en la versión 2.2 de la documentación de mod_headers.curl -I [foo]
prueba sin esta configuración:curl -I [foo]
prueba con esta configuración:Fuentes:
http://httpd.apache.org/docs/current/mod/mod_headers.html
fuente
mis cinco centavos sobre el tema
en nuestro proyecto PHP tenemos pocas páginas 404, así que decido hacerlo a nivel PHP usando las funciones de encabezado () de PHP
fuente