With this practical guide, you will create a server that forward the received stream to services like YouTube ad Facebook, as a self-hosted alternatives to services like Restream.
If you want to dive deeper on a multistream setup, look at the article on my blog.

Initial server setup

Install required packages

  • Install nginx:
    $ apt-get install nginx
  • Install the RTMP module:
    $ apt-get install libnginx-mod-rtmp
  • Update the firewall and check if the setup is OK:
    $ ufw allow 1935
    $ ufw status verbose
  • Reboot


  • Edit NGINX config:
    $ nano /etc/nginx/nginx.conf
  • At the end of the file add the following:
rtmp {
	server {
		listen 1935;
		chunk_size 4096;

		application live {
			live on;
			record off;
			push rtmp://a.rtmp.youtube.com/live2/<your-youtube-key>;
			push rtmp://<your-fb-persisten-key>;
  • Restart NGINX
    $ systemctl restart nginx

(Only if you use Facebook) Setup Stunnel

  • Install Stunnell:
    $ apt-get install stunnel4
  • Enable Stunell auto boot:
    $ nano /etc/default/stunnel4
  • Change ENABLE to 1:
  • Edit Stunnel configuration:
    $ nano /etc/stunnel/stunnel.conf
  • Enter the following config:
pid = /var/run/stunnel4/stunnel.pid
output = /var/log/stunnel4/stunnel.log

setuid = stunnel4
setgid = stunnel4

# https://www.stunnel.org/faq.html
#socket = r:TCP_NODELAY=1
#socket = l:TCP_NODELAY=1

debug = 4

client = yes
accept =
connect = live-api-s.facebook.com:443
verifyChain = no
  • Enable Stunell on boot:
    $ systemctl enable stunnel4.service
  • Restart Stunnell
    $ systemctl restart stunnel4.service

Ready to test!

Test setup with OBS.

OBS Stream configuration

Go to SettingsยปStream

Service: Custom Server: rtmp://<ngnix server IP address>/live Stream Key: test

Setup scripts

I have created some scripts to execute the setup automatically. You can find them here with all the instructions. I suggest you to execute the setup manually the first time, to understand better what is going on.