Skip to content

Instantly share code, notes, and snippets.

@CSRaghunandan
Last active June 26, 2024 04:43
Show Gist options
  • Save CSRaghunandan/ce2394cd5a9c8a412f8ff5ee1478560a to your computer and use it in GitHub Desktop.
Save CSRaghunandan/ce2394cd5a9c8a412f8ff5ee1478560a to your computer and use it in GitHub Desktop.
Nginx configuration for serving mp4 videos
#user nobody;
worker_processes 4;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
access_log off;
sendfile_max_chunk 512k;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
server {
# add proxy caches
proxy_cache_path /tmp/mycache keys_zone=mycache:70m;
listen *:9000 ;
#listen [::]:80 ipv6only=on;
root /usr/local/nginx/html;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name _;
location /rtc {
#try_files $uri $uri/ /index.html;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:8088/janus;
}
location /rtcapp {
# enable thread pools for livestream
aio threads=default;
proxy_pass http://localhost:8188;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
location ~ \.flv$ {
# enable thread pool
aio threads=default;
flv;
}
location ~/.mp4 {
root /media;
mp4;
mp4_buffer_size 1M;
mp4_max_buffer_size 3M;
# enable thread bool
aio threads=default;
# enable caching for mp4 videos
proxy_cache mycache;
proxy_cache_valid 200 300s;
proxy_cache_lock on;
# enable nginx slicing
slice 1m;
proxy_cache_key $host$uri$is_args$args$slice_range;
proxy_set_header Range $slice_range;
proxy_http_version 1.1;
# Immediately forward requests to the origin if we are filling the cache
proxy_cache_lock_timeout 0s;
# Set the 'age' to a value larger than the expected fill time
proxy_cache_lock_age 200s;
proxy_cache_use_stale updating;
}
}
}
@romitkarmakar
Copy link

For Ubuntu Users please first install nginx mp4 module using this command

sudo apt-get install nginx-extras

@russeldsouzaFRM
Copy link

Hi, can someone help me with videos not working for IOS and mac. this is nginx server configuration on ubuntu v22.04 VPS. I tried to configure but it does not work

`map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

server {
listen 80;
server_name ip_address;

location / {
    proxy_pass http://127.0.0.1:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;

    # Headers for video playback
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'Range';
    add_header 'Accept-Ranges' 'bytes';
}

}

server {
listen 443 ssl;
server_name ip_address;

ssl_certificate /etc/letsencrypt/live/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

location / {
    # Backend nodejs server
    proxy_pass http://127.0.0.1:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;

    # Headers for video playback
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'Range';
    add_header 'Accept-Ranges' 'bytes';
}

# MIME types for video files
types {
    video/mp4 mp4;
    video/webm webm;
    video/ogg ogg;
}

}
`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment