Configuración de encabezados http para caché con servidor brillante & nginx
He implementado una aplicación brillante, corriendo con un servidor brillante en AWS. Un servidor nginx envía solicitudes al puerto del servidor brillante 3838.
Al revisar Google Page Speed Insights (https://developers.google.com/speed/pagespeed/insights/), veo que algunas imágenes (formato de goteo) en mi página no están caché, y que esto ralentiza la carga de mi página.
Traté de establecer caché en nginx, como se describe Aquí., añadiendo las siguientes líneas a mi configuración del servidor nginx:
location ~* \.(js|webp|png|jpg|jpeg|gif)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
}
Sin embargo, esto tenía la consecuencia de que mis imágenes ya no se encuentran al acceder al sitio web.
- ¿Es correcto que tengo que habilitar el caché en nginx y no en algún lugar en un servidor brillante?
- Si es así, ¿qué pasa con la solución anterior?
Aquí está el archivo conf de nginx sin ninguna adición:
server {
listen 80;
listen [::]:80;
# redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# Reverse proxy
location / {
proxy_pass http://localhost:3838/climate-justice/;
proxy_redirect http://localhost:3838/climate-justice/ $scheme://$host/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 20d;
proxy_buffering off;
}
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
}
Pregunta hecha hace 3 años, 4 meses, 25 días - Por codechampionx
3 Respuestas:
-
Lo resolvió con la ayuda de las siguientes instrucciones: https://www.digitalocean.com/community/tutorials/how-to-implement-browser-caching-with-nginx-s-header-module-on-ubuntu-16-04
# Expires map map $sent_http_content_type $expires { default off; text/html epoch; text/css max; application/javascript max; ~image/ max; } server { listen 80 default_server; listen [::]:80 default_server; expires $expires; . . .
Respondida el Dec 20, 2020 a las 17:53 - por debugduke
Votos positivos: 0 | Votos negativos: 0 -
Para corregir el error y configurar correctamente el encabezado de caché en NGINX, puedes hacer lo siguiente:
- Habilitar la caché en nginx: Sí, es correcto habilitar la caché en NGINX en lugar de en el servidor Shiny, ya que NGINX actúa como un servidor proxy delante del servidor Shiny y puede manejar la caché de manera más eficiente.
- Ajustar la configuración de caché en NGINX: Las líneas que has agregado en la configuración de NGINX se aplicarán a los archivos con las extensiones js, webp, png, jpg, jpeg y gif, y les dará una vigencia de 365 días en caché con la directiva `expires`. La directiva `add_header Cache-Control "public, no-transform";` establece el encabezado `Cache-Control` para esos archivos. Es posible que el problema surja de esta configuración si no todos los archivos cumplen con estas extensiones.
Para corregir esto, puedes ajustar la configuración para incluir más extensiones de archivo o simplemente eliminar la directiva
location
y usar una configuración más genérica que se aplique a todos los archivos:nginx location / { expires 1y; add_header Cache-Control "public"; }
Esto establecerá que todos los archivos dentro del sitio web se almacenen en caché durante 1 año.
- Rearmar la configuración de los servidores: Asegúrate de que la configuración de tus servidores en NGINX se realiza de la siguiente manera:
nginx server { listen 80; listen [::]:80;
redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2;Reverse proxy
location / { proxy_pass http://localhost:3838/climate-justice/; proxy_redirect http://localhost:3838/climate-justice/ $scheme://$host/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 20d; proxy_buffering off; expires 1y; add_header Cache-Control "public"; }OCSP stapling
ssl_stapling on; ssl_stapling_verify on;Configuración adicional si es necesaria
}Con estos ajustes, el servidor NGINX debería establecer correctamente la caché para todos los archivos y mejorar el rendimiento de carga de la página. Recuerda reiniciar NGINX después de realizar los cambios.
Respondida el Dec 21, 2020 a las 17:55 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
1. ¿Es correcto habilitar el almacenamiento en caché en nginx?
Sí, es correcto habilitar el almacenamiento en caché en nginx para archivos estáticos como imágenes. Esto mejora el rendimiento al reducir el número de solicitudes que llegan al servidor brillante.
2. ¿Qué sucede con la solución anterior?
La configuración del servidor nginx que proporcionaste parece correcta. Sin embargo, debes asegurarte de que el servidor brillante esté configurado para permitir el almacenamiento en caché. Esto se puede hacer estableciendo el encabezado
Cache-Control
en las respuestas del servidor brillante.3. Configuración del servidor brillante
Agrega el siguiente código a tu aplicación brillante para establecer el encabezado
Cache-Control
:python from flask import Flask, send_file, make_response app = Flask(__name__) @app.route('/image.png') def send_image(): response = make_response(send_file('image.png')) response.headers['Cache-Control'] = 'public, max-age=31536000' return response
Esto configurará el servidor brillante para enviar un encabezado
Cache-Control
con las respuestas de imagen que indica que las imágenes se pueden almacenar en caché durante un año (max-age=31536000
).4. Verificación
Después de realizar estos cambios, vuelve a ejecutar Page Speed Insights para verificar si las imágenes ahora están en caché. Si todo está configurado correctamente, deberías ver una mejora en la puntuación de rendimiento.
5. Configuración de Nginx (opcional)
Una vez que el servidor brillante esté configurado para el almacenamiento en caché, puedes optimizar aún más nginx agregando reglas de almacenamiento en caché adicionales. Por ejemplo:
nginx location ~* \.(png|jpg|jpeg|gif)$ { expires 30d; add_header Cache-Control "public, no-transform"; }
Esto establecerá un tiempo de vencimiento explícito de 30 días para los archivos de imagen y agregará el encabezado
Cache-Control
para indicar que no deben transformarse.Espero que esto resuelva tu problema. Déjame saber si tienes alguna otra pregunta.
Respondida el Dec 21, 2020 a las 18:05 - por Gemini
Votos positivos: 0 | Votos negativos: 0