Com alguma direção do Tero Kilkanen , consegui definir cache-control
e expires
cabeçalho do bucket do S3 em que a mídia está sendo hospedada e não do meu servidor nginx.
Obrigado!
Eu pesquisei em todos os lugares por uma resposta funcional para esse problema, mas nenhuma das respostas parece funcionar. Eu também sinto muito pelo post super longo, mas eu só preciso pedir ajuda sobre isso. Eu tentei ser o mais detalhado possível.
Eu tenho um servidor web nginx com o ngx_pagespeed instalado no CentOS 7 que eu criei a partir da fonte e, para a vida de mim, não consigo que cache-control
ou expire
cabeçalhos funcionem. Eu pesquisei e tentei todas as "soluções" sugeridas aqui, o StackOverflow, o wiki nginx, e vi provavelmente 50 páginas diferentes de maneiras diferentes que as pessoas conseguiram "trabalhar".
Agora eu sei que ngx_pagespeed tem seu próprio cache, mas meu site não parece estar se beneficiando disso. Então, estou tentando definir meus próprios cabeçalhos cache-control
e expire
para mídia (jpg, gif, etc). Mas, nos últimos dois dias, tudo o que consegui foi:
Saída do curl -I
HTTP/2 200
server: nginx
content-type: text/html; charset=UTF-8
vary: Accept-Encoding
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
strict-transport-security: max-age=31536000
x-content-type-options: nosniff
date: Tue, 26 Jun 2018 02:02:46 GMT
x-page-speed: Powered By ngx_pagespeed
cache-control: max-age=0, no-cache
Estou tão frustrado com isso. Não importa o que eu tente, não consigo nada além de
cache-control: max-age=0, no-cache
da ondulação.
Abaixo estão meus arquivos de configuração. A configuração do meu site está em /etc/nginx/sites-available/conf
e o arquivo de configuração do nginx está em /etc/nginx/nginx.conf
.
nginx.conf:
user centos;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
include /etc/nginx/sites-enabled/*;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local]
"$request" '
#'$status $body_bytes_sent "$http_referer" '
#'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
}
Eu não acho que o restante de nginx.conf
seja relevante. Está tudo comentado de qualquer forma por padrão. Este arquivo pode estar todo errado. Eu tentei adicionar coisas aqui que achei que "consertaram" isso para outras pessoas.
site.conf
# don't send the nginx version number in error pages and Server header
server_tokens off;
server {
listen 80;
server_name my_site;
return 301 https://www.my_site.org;
root /home/centos/site_folder/public;
location / {
add_header Cache-Control "public";
expires 1d;
proxy_pass http://site_ip:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
#proxy_buffering on;
#proxy_ignore_headers "Set-Cookie";
#proxy_hide_header "Set-Cookie";
proxy_buffering on;
#proxy_ignore_headers Expires;
#proxy_ignore_headers X-Accel-Expires;
#proxy_ignore_headers Cache-Control;
#proxy_ignore_headers Set-Cookie;
#proxy_hide_header X-Accel-Expires;
#proxy_hide_header Expires;
#proxy_hide_header Cache-Control;
#proxy_hide_header Pragma;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 15d;
}
location ~* \.(jpg|jpeg|gif|png)$ {
expires 365d;
}
location ~* \.(pdf|css|html|js|swf)$ {
expires 30d;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /my/certs/are/here.crt;
ssl_certificate_key /my/certs/are/here.key;
# intermediate configuration
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
# enable session resumption to improve https performance
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate
/my/certs/are/here.crt;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_proxied any;
gzip_types text/plain text/css application/json
application/javascript application/x-javascript text/xml
application/xml application/xml+rss text/javascript image/x-
icon image/bmp image/svg+xml;
gzip_vary on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_buffers 16 8k;
include /etc/nginx/snippets/security-headers.conf;
server_name my_site.org;
access_log /var/log/nginx/nginx.vhost.access.log;
error_log /var/log/nginx/nginx.vhost.error.log;
location / {
#root /home/centos/my_site.org/public;
try_files $uri $uri/ /index.html?$args;
index index.html;
}
location ~*\.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
location /page1 {
default_type "text/html";
alias /home/centos/my_site.org/public/page1.html;
}
location /page2 {
default_type "text/html";
alias /home/centos/my_site.org/public/page2.html;
}
location ~* \.
(jpeg|jpg|JPG|gif|png|ico|cur|gz|svg|svgz|webp)$ {
#root /home/centos/my_site.org/public;
#include /etc/nginx/snippets/security-headers.conf;
try_files $uri $uri/ /$1/$2 =404;
#access_log off;
#log_not_found off;
}
#location ~* \.(mp3|mpeg|mpg|mp4|ogg|ogv|webm|webp|htc)$ {
#root /home/centos/my_site.org/public;
#include /etc/nginx/snippets/security-headers.conf;
#try_files $uri $uri/ /$1/$2 =404;
#proxy_cache_valid any 30d;
#access_log off;
#add_header Cache-Control "public";
#}
#location ~* \.(|css|js)$ {
#expires 7d;
#root /home/centos/my_site.org/public;
#include /etc/nginx/snippets/security-headers.conf;
#try_files $uri $uri/ /$1/$2 =404;
#access_log off;
#add_header Cache-Control "public";
#}
##
# Pagespeed main settings
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
pagespeed FileCacheSizeKb 102400;
pagespeed FileCacheCleanIntervalMs 3600000;
pagespeed FileCacheInodeLimit 500000;
pagespeed Domain https://www.my_site.org;
pagespeed XHeaderValue "Powered By ngx_pagespeed";
pagespeed HonorCsp on;
pagespeed LowercaseHtmlNames on;
#pagespeed EnableFilters extend_cache;
#pagespeed ModifyCachingHeaders off;
# Image related
pagespeed EnableFilters rewrite_images;
pagespeed EnableFilters convert_gif_to_png;
pagespeed EnableFilters convert_jpeg_to_progressive;
pagespeed EnableFilters strip_image_color_profile;
pagespeed EnableFilters strip_image_meta_data;
pagespeed EnableFilters jpeg_subsampling;
pagespeed EnableFilters lazyload_images;
pagespeed EnableFilters responsive_images,resize_images;
pagespeed EnableFilters resize_mobile_images;
pagespeed EnableFilters recompress_images;
# code related
pagespeed EnableFilters collapse_whitespace;
# JS related
pagespeed EnableFilters rewrite_javascript;
pagespeed EnableFilters combine_javascript;
# CSS related
pagespeed EnableFilters rewrite_css;
pagespeed EnableFilters prioritize_critical_css;
pagespeed EnableFilters combine_css;
pagespeed EnableFilters outline_css;
pagespeed EnableFilters flatten_css_imports;
# Ensure requests for pagespeed optimized resources go to the
pagespeed
# handler and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+"
{ add_header "" ""; }
#location ~* \.(jpg|jpeg|gif|png|js|css)$ {
#add_header Cache-Control "public, max-age=600";
#}
location ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }
}
Essas configurações funcionam e passam nginx -t
, mas o armazenamento em cache simplesmente não funciona. Deixei todo o meu código comentado para que você possa ver o que eu fiz / tentei. Qualquer ajuda aqui seria muito apreciada. Se eu perdi algum detalhe necessário, me avise. Obrigada!
Com alguma direção do Tero Kilkanen , consegui definir cache-control
e expires
cabeçalho do bucket do S3 em que a mídia está sendo hospedada e não do meu servidor nginx.
Obrigado!