# Load RTMP modules load_module "modules/ngx_stream_module.so"; load_module "modules/ngx_rtmp_module.so"; # General configuration daemon off; user nginx; worker_processes auto; error_log /dev/stdout; pid /var/run/nginx.pid; worker_rlimit_nofile 20960; events { worker_connections 1024; multi_accept on; accept_mutex on; accept_mutex_delay 500ms; use epoll; epoll_events 512; } # RTMP configuration rtmp { server { listen {RTMP_PORT}; listen [::]:{RTMP_PORT} ipv6only=on; chunk_size 4000; application live { live on; # Only allow ingest with valid stream key notify_method get; on_publish http://localhost:{HTTP_PORT}/auth; # Don't record anything record off; # Push stream to HLS endpoint push rtmp://127.0.0.1:{RTMP_PORT}/hls/live live=1; # disable consuming the stream from nginx as rtmp deny play all; } application hls { live on; # Only allow publishing from local host allow publish 127.0.0.1; deny publish all; # disable consuming the stream from nginx as rtmp deny play all; # Don't record anything record off; # Turn on HLS hls on; hls_path /tmp/hls; hls_fragment_naming system; hls_fragment {HLS_FRAGMENT_LENGTH}; hls_playlist_length {HLS_PLAYLIST_LENGTH}; } } } # HTTP configuration http { sendfile off; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; directio 512; access_log /dev/stdout; server_tokens off; include /etc/nginx/mime.types; default_type application/octet-stream; server { listen {HTTP_PORT}; listen [::]:{HTTP_PORT}; # Check for valid stream key location /auth { if ($arg_name = '{STREAM_KEY}') { return 200; } return 404; } # Serve HLS files from tempfs location /hls { root /tmp; # Don't let browsers cache HLS files add_header Cache-Control no-cache; } # Serve frontend location / { root /var/www/html; index index.html index.htm; try_files $uri $uri/ =404; } } }