Nginx ignora a sequência de consulta para armazenar em cache determinados arquivos

4

Eu sei que minha configuração é um pouco louca, mas seja o que for ....

Eu configurei o Nginx no Openshift para armazenar blocos de mapas (para um visualizador de mapa, você pode adivinhar o propósito, :-)) que são servidos na minha rede doméstica, que tem largura de banda limitada (conexões sem fio estúpidas!). O Openshift me dá largura de banda ilimitada e 1 GB de disco, o que deve ser suficiente para armazenar em cache partes populares do mapa.

No entanto, o visualizador de mapa gosta de fazer solicitações como esta:

http://localhost/tiles/world/t/-1_0/-27_23.png?1381358434308

O que faz o nginx achar que o arquivo não pode ser armazenado em cache! Eu fiz um pouco de googling, mas desde que eu sou horrível em ler e escrever regexes, gostaria de solicitar (de você) uma maneira de fazer nginx ignorar a string de consulta para arquivos .png e apenas servir a versão do cache sem o string de consulta.

Aqui estão as partes relevantes da configuração do servidor:

http {

  proxy_cache_path  ${OPENSHIFT_RUNTIME_DIR}/cachefile levels=1:2 keys_zone=my-cache:599m max_size=700m inactive=250m;
  proxy_temp_path ${OPENSHIFT_RUNTIME_DIR}/cachefile/tmp; 
    include mime.types;
    default_type application/octet-stream;

    # Format for our log files
    log_format   main '$remote_addr - $remote_user [$time_local]  $status '
      '"$request" $body_bytes_sent "$http_referer" '
      '"$http_user_agent" "$http_x_forwarded_for"';

    sendfile on;
    keepalive_timeout 5;
    access_log ${OPENSHIFT_LOG_DIR}/access.log;

    port_in_redirect off;
    server_tokens off;

    tcp_nopush on; # off may be better for Comet/long-poll stuff
    tcp_nodelay off; # on may be better for Comet/long-poll stuff

    # Enable Gzip
    gzip  on;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_min_length 1100;
    gzip_buffers     4 8k;
    gzip_proxied any;
    gzip_types
      # text/html is always compressed by HttpGzipModule
      text/css
      text/javascript
      text/xml
      text/plain
      text/x-component
      application/javascript
      application/json
      application/xml
      application/rss+xml
      font/truetype
      font/opentype
      application/vnd.ms-fontobject
      image/svg+xml;

    gzip_static on;

    gzip_proxied        expired no-cache no-store private auth;
    gzip_disable        "MSIE [1-6]\.";
    gzip_vary           on;
  server {
      listen ${OPENSHIFT_DIY_IP}:${OPENSHIFT_DIY_PORT};
      #server_name *;
    location / {
      proxy_pass http://[CENSORED];
      proxy_cache my-cache;
      proxy_cache_valid  200 302  60m;
      if ($scheme = https) {
        rewrite ^(.*)? http://$http_host$1 permanent;
        }
    }

  }
}
    
por Andrew Sun 10.10.2013 / 02:58

1 resposta

5

Você pode usar proxy_cache_key . Definindo uma chave para procurar o cache. A ideia é que a chave não deve ter a string de consulta.

Por padrão , o valor da diretiva está próximo da string

proxy_cache_key $scheme$proxy_host$uri$is_args$args;

Então você quer definir

proxy_cache_key $scheme$proxy_host$uri;

para forçar o armazenamento em cache.

Fonte: lista de discussão nginx

    
por 05.11.2014 / 05:55