Здравствуйте! На видеостриминговой системе используем два уровня проксей (эджи и ориджины). Эджи проксируют клиентов на ориджины, ориджины проксируют эджи на сервера-источники видео. Видео отдается в формате HLS: это плейлисты (текстовые файлы) и чанки видео (видео-файлы в формате ts).
В локейшенах, проксирующих чанки, на ориджинах и эджах регулярно, хоть и относительно не часто (пара десятков за сутки), проскакивают ошибки "zero size buf in output". Мне кажется причиной является одна из директив: proxy_cache_use_stale updating; proxy_cache_lock on; так как до их появления таких ошибок не было. nginx в основном 1.8.1, но проявиляется так же и на 1.9.11, логи ниже делал на последней. Используем пакеты для debian8 из репозитория на nginx.org. Если смотреть access.log, то чанк в помент проявления этой ошибки отдается частично, но с кодом 200 (размер в логе меньше реального размера), при следующем запросе отдается нормально, и ошибка не проявляется. Лог кратко (debug.log внизу, здесь и далее в логах вырезана приватная информация, так как ошибка вопроизводится только в продакшене): 2016/02/14 11:09:20 [alert] 30161#30161: *1388932 zero size buf in output t:0 r:0 f:0 0000000002387520 0000000002387520-0000000002389356 0000000000000000 0-0 while sending to client, client: HIDDENIPV4, server: e6.mysite.com, request: "GET /place1/stream/cam13_low-5743015560.ts HTTP/1.1", upstream: "https://[HIDDENIPV6]:443/place1/video/cam13_low-5743015560.ts", host: "e6.mysite.com", referrer: "https://mysite.com/" 2016/02/14 11:09:23 [alert] 30160#30160: *1389653 zero size buf in output t:0 r:0 f:0 00000000022BBC50 00000000022BBC50-00000000022BF185 0000000000000000 0-0 while sending to client, client: HIDDENIPV4, server: e6.mysite.com, request: "GET /place1/stream/cam13_hi-5297110020.ts HTTP/1.1", upstream: "https://HIDDENIPV4:443/place1/video/cam13_hi-5297110020.ts", host: "e6.mysite.com", referrer: "https://mysite.com/" Конфиги: nginx.conf: user www-data; worker_processes 8; worker_rlimit_nofile 65536; pid /run/nginx.pid; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; log_format csv_times $remote_addr|$remote_user|$time_local|$request|$status|$body_bytes_sent|$http_referer|$http_user_agent|$request_time; gzip on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } ---- conf.d/upstream.conf: upstream o-mysite-place2 { server HIDDENIPV4:443 fail_timeout=60 max_fails=3 weight=3; server [HIDDENIPV6]:443 fail_timeout=60 max_fails=3 weight=3; server HIDDENIPV4:443 fail_timeout=60 max_fails=3 weight=1; server [HIDDENIPV6]:443 fail_timeout=60 max_fails=3 weight=1; server HIDDENIPV4:443 fail_timeout=60 max_fails=3 backup; server [HIDDENIPV6]:443 fail_timeout=60 max_fails=3 backup; keepalive 500; } upstream o-mysite-place1 { server HIDDENIPV4:443 fail_timeout=60 max_fails=3 weight=3; server [HIDDENIPV6]:443 fail_timeout=60 max_fails=3 weight=3; server HIDDENIPV4:443 fail_timeout=60 max_fails=3 weight=1; server [HIDDENIPV6]:443 fail_timeout=60 max_fails=3 weight=1; server HIDDENIPV4:443 fail_timeout=60 max_fails=3 backup; server [HIDDENIPV6]:443 fail_timeout=60 max_fails=3 backup; keepalive 500; } ---- sites-enabled/e6.mysite.com.conf: proxy_cache_path /var/cache/nginx/mysite_edge_video keys_zone=m_e_v:3m inactive=3m max_size=1g; proxy_cache_path /var/cache/nginx/mysite_www_static keys_zone=m_w_s:3m max_size=1g; fastcgi_cache_path /var/cache/nginx/mysite_fastcgi keys_zone=m_s:3m max_size=100m; log_format req_times $time_local|$request|$request_time; limit_req_zone $limit_head zone=limit_head:1m rate=1r/s; limit_conn_zone $binary_remote_addr zone=dynamic:10m; #https server { listen HIDDENIPV4:443 ssl; listen [HIDDENIPV6]:443 ssl; server_name e6.mysite.com mysite.com; access_log /var/log/nginx/mysite.edge.access.log csv_times; error_log /var/log/nginx/mysite.edge.error.log; ssl_certificate /etc/ssl/mysite.com.pem; ssl_certificate_key /etc/ssl/private/mysite.com.key; include ssl_params.conf; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/ssl/startssl.class2.pem; resolver HIDDENIPV4; add_header X-Content-Options nosniff; add_header X-Frame-Options SAMEORIGIN; add_header Strict-Transport-Security "max-age=31536000;"; proxy_next_upstream error timeout invalid_header http_500 http_502 http_504; proxy_http_version 1.1; proxy_ssl_server_name on; proxy_ssl_verify on; proxy_ssl_trusted_certificate /etc/ssl/startssl.class2.pem; proxy_ssl_verify_depth 2; location /place1/stream { #чанки proxy_ssl_name origin.mysite.com; include proxy_headers.inc; proxy_set_header host origin.mysite.com; proxy_buffer_size 16k; proxy_buffers 32 16k; proxy_cache m_e_v; proxy_cache_valid any 1m; proxy_cache_use_stale updating; proxy_cache_key "$uri$is_args$args"; proxy_cache_lock on; proxy_pass https://o-mysite-place1/place1/video; access_log /var/log/nginx/mysite.edge.access.log csv_times; access_log /var/log/nginx/mysite.edge.chunk-times.log req_times; # error_log /var/log/nginx/debug.log debug; error_log /var/log/nginx/mysite.edge.error.log; } location /place2/stream { #чанки proxy_ssl_name origin.mysite.com; include proxy_headers.inc; proxy_set_header host origin.mysite.com; proxy_buffer_size 16k; proxy_buffers 32 16k; proxy_cache m_e_v; proxy_cache_valid any 1m; proxy_cache_use_stale updating; proxy_cache_key "$uri$is_args$args"; proxy_cache_lock on; proxy_pass https://o-mysite-place2/place2/video; access_log /var/log/nginx/mysite.edge.access.log csv_times; access_log /var/log/nginx/mysite.edge.chunk-times.log req_times; # error_log /var/log/nginx/debug.log debug; error_log /var/log/nginx/mysite.edge.error.log; } } ---- proxy_headers.conf: proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Connection ""; ---- Сразу выкладываю debug.log (18 мегабайт в распакованном виде): https://kinetiksoft.com/thecloud/index.php/s/5ldvsZFiC2NjpXJ Я обрезал только 10 секунд, за которые произошли две ошибки из краткого лога в начале сообщения. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,264561,264561#msg-264561 _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru