Я знаю, что моя установка немного сумасшедшая, но неважно ...
Я настроил Nginx на Openshift для кэширования фрагментов карты (для вьюера карт, вы можете догадаться о цели :-)), которые обслуживаются из моей домашней сети, которая имеет ограниченную пропускную способность (глупые беспроводные соединения!). Openshift дает мне неограниченную пропускную способность и 1 ГБ на диске, чего должно быть достаточно для кеширования популярных частей карты.
Однако вьюер карт любит делать такие запросы:
http://localhost/tiles/world/t/-1_0/-27_23.png?1381358434308
Это заставляет nginx думать, что файл не кэшируется! Я немного погуглил, но поскольку я ужасно умею читать и писать регулярные выражения, я хотел бы запросить (у вас) способ заставить nginx игнорировать строку запроса для файлов .png и просто обслуживать версию из кеша без Строка запроса.
Вот соответствующие части конфигурации сервера:
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;
}
}
}
}
Ты можешь использовать proxy_cache_key
. Он определяет ключ для поиска в кеше. Идея в том, что в ключе не должно быть строки запроса.
По умолчанию, значение директивы близко к строке
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
Итак, вы хотите установить
proxy_cache_key $scheme$proxy_host$uri;
для принудительного кеширования.
Источник: список рассылки nginx