server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /var/www/html; index index.html index.htm; # Performance sendfile on; tcp_nopush on; tcp_nodelay on; include /etc/nginx/mime.types; default_type application/octet-stream; # Global CORS add_header Access-Control-Allow-Origin "*" always; add_header Access-Control-Allow-Methods "GET, HEAD, OPTIONS" always; add_header Access-Control-Allow-Headers "*" always; add_header Access-Control-Expose-Headers "Content-Length,Content-Range" always; # OPTIONS requests location / { if ($request_method = OPTIONS) { return 204; } autoindex on; try_files $uri $uri/ =404; } # ========================= # HLS # ========================= location /hls/ { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } add_header Cache-Control "no-cache"; add_header Accept-Ranges bytes; add_header Content-Disposition inline; gzip off; try_files $uri =404; } # ========================= # DASH # ========================= location /dash/ { types { application/dash+xml mpd; video/mp4 mp4 m4s; } add_header Cache-Control "no-cache"; add_header Accept-Ranges bytes; add_header Content-Disposition inline; gzip off; try_files $uri =404; } # gzip only manifests location ~* \.(m3u8|mpd)$ { gzip on; gzip_types application/vnd.apple.mpegurl application/dash+xml; } # Security location ~ /\. { deny all; access_log off; log_not_found off; } access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; }