
저는 라이브 스트리밍(HLS)을 위해 .ts 파일을 제공하기 위해 Nginx를 사용하고 있습니다. 모든 것이 잘 작동하지만 파일의 응답 시간에 문제가 있습니다. 때때로 서버에서 수신된 일부 .ts 파일의 응답 시간이 예기치 않게 높으며 이는 우리 사용 사례에서 문제가 됩니다.
문제가 무엇인지 찾기 위해 Python 스크립트를 사용했습니다.
이 스크린샷에서 전체 응답 시간은 요청이 전송된 후 전체 응답이 수신되기까지의 시간입니다. 표시된 두 번째 매개변수는 요청이 전송되고 응답이 수신되는 사이의 시간입니다. (저는 Python의 요청 패키지에서 response.elapsed.total_seconds()를 사용했습니다). 느린 요청에서는 전체 응답 시간이 더 길지만 response.elapsed.total_seconds()는 괜찮습니다. (더 높다는 것은 평균 응답 시간의 3~4배를 의미합니다.)
이 문제 외에도 응답 시간(response.elapsed.total_seconds())과 전체 응답 시간이 모두 높다는 또 다른 문제가 있습니다. 이 경우는 덜 자주 발생하며(요청 200개 중 한 번 정도) 응답 시간은 첫 번째 경우보다 훨씬 높습니다.
이 머신 앞에 파일을 프록시하고 캐시하기 위한 다른 머신이 있다는 점을 언급해야겠습니다. 하지만 내가 캐시 머신을 요청하든 메인 머신을 요청하든 상관없습니다. 결과는 동일합니다.
내 Nginx 구성은 다음과 같습니다.
user root;
worker_processes 16;
worker_rlimit_nofile 1000000;
master_process on;
pid /run/nginx.pid;
events {
worker_connections 500000;
accept_mutex off;
multi_accept off;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
server_tokens off;
keepalive_timeout 150;
# keepalive_requests 5;
aio on;
gzip on;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
client_body_buffer_size 1k;
client_max_body_size 1k;
client_body_timeout 12;
client_header_timeout 12;
send_timeout 10;
tcp_nodelay on;
sendfile_max_chunk 1m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2;
proxy_intercept_errors on;
proxy_http_version 1.1;
vhost_traffic_status_zone shared:vhost_traffic_status:10m;
underscores_in_headers on;
recursive_error_pages on;
server {
listen 80 backlog=10000000;
location /tmp {
access_log /cache/nginx.log main;
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /cache/hls;
add_header Cache-Control no-cache;
}
}
Nginx 액세스 및 오류 로그에는 비정상적인 내용이 표시되지 않습니다. 좋은 반응도 느린 반응도 아닙니다.
지금까지 이 문제에 대해 아무것도 찾을 수 없었습니다. 여기서 답을 찾을 수 있기를 바랍니다.