Welcome! Log In Create A New Profile

Advanced

zero size buf in output при proxy_cache

February 16, 2016 02:00PM
Здравствуйте!

На видеостриминговой системе используем два уровня проксей (эджи и ориджины). Эджи проксируют клиентов на ориджины, ориджины проксируют эджи на сервера-источники видео. Видео отдается в формате 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 секунд, за которые произошли две ошибки из краткого лога в начале сообщения.
Subject Author Posted

zero size buf in output при proxy_cache

iprok February 16, 2016 02:00PM

Re: zero size buf in output при proxy cache

Maxim Dounin February 16, 2016 03:06PM

Re: zero size buf in output при proxy cache

iprok February 16, 2016 03:19PM

Re: zero size buf in output при proxy cache

Иван February 25, 2016 10:20AM

Re: zero size buf in output при proxy cache

Maxim Dounin February 25, 2016 12:26PM

Re: zero size buf in output при proxy cache

Maxim Dounin March 04, 2016 10:58AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 302
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready