Emby Load Balancing using Nginx

Emby is a nice and excellent low resource hungry media server. However if you have substantially high amount of traffic, you need a load-balancer. 

A sample Nginx based load balancing configuration as below might help.

upstream emby  {

  server SERVER1IP:PORT max_fails=2  fail_timeout=5s;
  server SERVER2IP:PORT weight=2;
  server SERVER3IP:PORT weight=4;

   keepalive 300; <---- allows 300 keepalive connections then drops older inactive ones to add new ones
}

server {
listen 443 ssl;
server_name yourdomain;

#Very Simple SSL Setup to support all clients
       ssl_session_timeout  10m;
        ssl_certificate /pathtoyour.crt;
        ssl_certificate_key /pathtoyourkey.key;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

location / {
        proxy_pass http://emby;
        proxy_read_timeout 20;
        proxy_next_upstream error timeout; <----- goes to next upstream block on an error or timeout
        proxy_redirect off;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";      
        proxy_set_header Host $host;$port;
        include /etc/nginx/conf.d/cfip; <-------- cloudflare real IP and X-Forwarded to double check
        proxy_set_header X-Forwarded-For $http_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https; <-------- sometimes wasn't writing protocol as https so removing variable forces it to write https
        proxy_set_header X-Forwarded-Protocol https;
        add_header Cache-Control "private"; <------ no caching headers - add different blocks for different file types with different expires
        expires off; <------ no caching headers - add different blocks for different file types with different expires
        sendfile on;
        tcp_nodelay on;
        tcp_nopush on;
}

}

Tips:

You may need to build a shared database on NFS- as emby is by default setup with sqlite db. 

Emby Data Path-

/var/lib/emby

On below source link, there’s another haproxy based configuration too. Suit yourself!

Src: https://emby.media/community/index.php?/topic/29554-my-load-balancing-ssl-emby-setup/

Share

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.