Проксирование с кэшем из CDN
Raice
nginx-forum на forum.nginx.org
Вт Авг 4 17:44:41 UTC 2020
Добрый день! Подскажите, пожалуйста, как правильно настроить проксирование с
кэшем из CDN. Задача такая: есть CDN, с него нужно скачивать достаточной
большой объем информации, но это достаточно дорого обходится, поэтому
появилась такая мысль - поднять прокси на nginx, который будет проксировать
запросы на CDN и кэшировать их. Файлы там статика, меняются крайне редко и
размер файла может быть 200Гб и выше. Хотелось бы чтобы с CDN закачка через
прокси шла только один раз, т.е. чтобы скачивал сам nginx и потом раздавал.
Я тут промучился, сначала с rh-nginx114 - с ним толком не работало. Файлы в
несколько ГБ вроде работали, 50ГБ - постоянные обрывы и т.д. Поставил 1.18
из оригинального репозитория - вроде дело пошло лучше, но хотелось бы
убедиться, что все сделал правильно. Обычное кэширование мне не подходило,
т.к. хосты начинают качать одновременно и получалось, что т.к. файлы большие
все равно почти все уходило на CDN. Решил сделать через слайсы. Кэш вроде
наполняется.
http {
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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
....
proxy_cache_path /data/nginx/cache keys_zone=mycache:100m levels=1:2
max_size=1500g inactive=7d use_temp_path=off;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 256 4k;
....
log_format cache_status '[$time_local] $remote_addr "$request"
$upstream_cache_status';
access_log /var/log/nginx/cache_access.log cache_status;
....
gzip on;
gzip_disable "msie6";
....
gzip_proxied any;
....
include /etc/nginx/mime.types;
default_type application/octet-stream;
....
include /etc/nginx/conf.d/*.conf;
}
server {
listen 81;
resolver 172.17.19.10;
location / {
limit_rate 30m;
proxy_read_timeout 3600;
proxy_cache mycache;
proxy_pass http://cdnhost.tld$request_uri;
slice 30m;
proxy_cache_key $host$uri$is_args$args$slice_range;
proxy_set_header Range $slice_range;
proxy_http_version 1.1;
proxy_hide_header ETag;
proxy_cache_valid 200 206 301 302 7d;
proxy_cache_valid 404 1m;
proxy_set_header Host cdnhost.tld
proxy_ignore_headers "Set-Cookie";
proxy_ignore_headers Cache-Control;
proxy_temp_path /data/nginx/temp;
}
}
Подскажите, все ли правильно сделал? Будет ли работать так, как нужно?
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,288966,288966#msg-288966
Подробная информация о списке рассылки nginx-ru