Re: Проксирование с кэшем из CDN
Спасибо, нагуглил, прочитал. Работает, но не сохраняет файлы. Я так понимаю, это нужно как-то дополнительно прикручивать? Не подскажете, в какую сторону копать? Posted at Nginx Forum: https://forum.nginx.org/read.php?21,288966,288971#msg-288971 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Проксирование с кэшем из CDN
https://nginx.org/ru/docs/http/ngx_http_core_module.html#try_files 05.08.2020 11:04, Raice пишет: > Интересная идея, спасибо! Выкачивать можно многопоточной арией, если что. > Не могли бы Вы пояснить пример конфига? Я еще не очень в nginx, не понял его > > Posted at Nginx Forum: > https://forum.nginx.org/read.php?21,288966,288968#msg-288968 > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru > ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Проксирование с кэшем из CDN
Попробовал Ваш конфиг, да, он выкачивает с сервера, но в папке /var/www/cache не сохраняет Posted at Nginx Forum: https://forum.nginx.org/read.php?21,288966,288969#msg-288969 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Проксирование с кэшем из CDN
Интересная идея, спасибо! Выкачивать можно многопоточной арией, если что. Не могли бы Вы пояснить пример конфига? Я еще не очень в nginx, не понял его Posted at Nginx Forum: https://forum.nginx.org/read.php?21,288966,288968#msg-288968 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Проксирование с кэшем из CDN
А если сделать так: парсить логи доступа (/var/www/proxy-access.log) на предмет скачивания файлов. Внешним скриптом/программой да хоть wget с ключом -c выкачивать файлы и складывать в папку /var/www/cache Конфиг: location / { root /var/www/cache; try_files $uri @proxy; } location @proxy { proxy_pass http://cdnhost.tld$request_uri; access_log /var/www/proxy-access.log; } Nginx будет сначала пытаться брать из локального "кеша", если не получилось - выкачает с сервера. Недостатки: "кеш" не протухает (может быть достоинством) и может устареть. 05.08.2020 00:44, Raice пишет: > Добрый день! Подскажите, пожалуйста, как правильно настроить проксирование с > кэшем из 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; > > sendfileon; > 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_headerHost 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 mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru > ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Проксирование с кэшем из CDN
Добрый день! Подскажите, пожалуйста, как правильно настроить проксирование с кэшем из 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; sendfileon; 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_headerHost 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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: аккуратное выведение бекенда на стримах
вт, 4 авг. 2020 г. в 19:24, Gena Makhomed : > On 04.08.2020 17:04, Илья Шипицин wrote: > > >> А что мешает просто убрать сервер из конфига и сделать reload? > >> Ранее усановленные соединения доработают, новые будут > >> устанавливаться только к бэкендам из новой конфигурации. > > > пожалуй, что можно и так. > > мы так раньше делали, и поскольку мы не контролировали сколько у нас > > worker-ов (а на каждый релоад запускается новый набор), то время от > времени > > ловили out of memory. > > если добавить в конфиг директиву worker_shutdown_timeout 60s; > - разве это не поможет избавиться от ошибок out of memory ? > и/или делать релоад nginx не чаще чем раз в минуту. > позволит. только установленные подключения порвутся > > -- > Best regards, > Gena > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: аккуратное выведение бекенда на стримах
On 04.08.2020 17:04, Илья Шипицин wrote: А что мешает просто убрать сервер из конфига и сделать reload? Ранее усановленные соединения доработают, новые будут устанавливаться только к бэкендам из новой конфигурации. пожалуй, что можно и так. мы так раньше делали, и поскольку мы не контролировали сколько у нас worker-ов (а на каждый релоад запускается новый набор), то время от времени ловили out of memory. если добавить в конфиг директиву worker_shutdown_timeout 60s; - разве это не поможет избавиться от ошибок out of memory ? и/или делать релоад nginx не чаще чем раз в минуту. -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: аккуратное выведение бекенда на стримах
вт, 4 авг. 2020 г. в 17:30, Maxim Dounin : > Hello! > > On Tue, Aug 04, 2020 at 05:14:45PM +0500, Илья Шипицин wrote: > > > вижу такую штуку. есть проксирование на стримах на 5 серверов. я хочу > > вывести из эксплуатации 1-й. чтобы запросы доработали. > > > > я каким-то образом делаю шаманство и говорю "если это SYN, то его надо > на 4 > > сервера, а если это установленное с 1-м, ок, кидаем пакетики на 1-й". > потом > > когда горшочек перестает варить, я физически выключаю 1-й. > > > > можно что-то такое на SYN-ах намутить ? на уровне идеи вроде норм. по > > реализации ? > > А что мешает просто убрать сервер из конфига и сделать reload? > Ранее усановленные соединения доработают, новые будут > устанавливаться только к бэкендам из новой конфигурации. > пожалуй, что можно и так. мы так раньше делали, и поскольку мы не контролировали сколько у нас worker-ов (а на каждый релоад запускается новый набор), то время от времени ловили out of memory. > > -- > Maxim Dounin > http://mdounin.ru/ > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: аккуратное выведение бекенда на стримах
Hello! On Tue, Aug 04, 2020 at 05:14:45PM +0500, Илья Шипицин wrote: > вижу такую штуку. есть проксирование на стримах на 5 серверов. я хочу > вывести из эксплуатации 1-й. чтобы запросы доработали. > > я каким-то образом делаю шаманство и говорю "если это SYN, то его надо на 4 > сервера, а если это установленное с 1-м, ок, кидаем пакетики на 1-й". потом > когда горшочек перестает варить, я физически выключаю 1-й. > > можно что-то такое на SYN-ах намутить ? на уровне идеи вроде норм. по > реализации ? А что мешает просто убрать сервер из конфига и сделать reload? Ранее усановленные соединения доработают, новые будут устанавливаться только к бэкендам из новой конфигурации. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
аккуратное выведение бекенда на стримах
привет! вижу такую штуку. есть проксирование на стримах на 5 серверов. я хочу вывести из эксплуатации 1-й. чтобы запросы доработали. я каким-то образом делаю шаманство и говорю "если это SYN, то его надо на 4 сервера, а если это установленное с 1-м, ок, кидаем пакетики на 1-й". потом когда горшочек перестает варить, я физически выключаю 1-й. можно что-то такое на SYN-ах намутить ? на уровне идеи вроде норм. по реализации ? Илья Шипицин ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru