Benvenuti nella guida completa sull’Installazione di Nginx-RTMP su Ubuntu 22.04. Questo articolo è pensato per fornire agli sviluppatori web, agli amministratori di sistema e agli appassionati di tecnologia una panoramica dettagliata e passaggi pratici per configurare con successo Nginx-RTMP sul popolare sistema operativo Ubuntu 22.04. Che tu sia un principiante o un esperto, troverai informazioni preziose per ottimizzare il tuo ambiente di server e sfruttare al massimo le potenzialità di questa potente combinazione di software.
Sommario
- Passo Iniziale nell’Installazione di Nginx-RTMP su Ubuntu 22.04
- Configurazione di Base di Nginx-RTMP su Ubuntu
- Per trasmettere il live in HTTP
- Installare Let’s Encrypt
- PHP per eventuali script di controllo
- Per configurare RTMPS
- FFMPEG PER MANIPOLARE IL FLUSSO DELLA WEBCAM
Passo Iniziale nell’Installazione di Nginx-RTMP su Ubuntu 22.04
Aggiorna la lista dei pacchetti disponibili e i loro ultimi aggiornamenti, e poi eseguire l’aggiornamento dei pacchetti attualmente installati sul sistema alla versione più recente:
sudo apt update && sudo apt upgrade
per aggiungere il repository “universe” alle sorgenti del software del sistema (se non incluso):
sudo add-apt-repository universe
Installa Nginx:
sudo apt install nginx
Una volta installato Nginx, puoi controllare lo stato del server per assicurarti che sia attivo e funzionante:
sudo systemctl status nginx
Configurazione di Base di Nginx-RTMP su Ubuntu
Installare il modulo RTMP Nginx:
sudo apt install libnginx-mod-rtmp
Apri il file di configurazione di Nginx:
sudo nano /etc/nginx/nginx.conf
rtmp {
server {
listen 1935;
chunk_size 4096;
application live1 {
live on;
record off;
hls on;
hls_path
/var/www/webcam.example.com/html/live1;
hls_sync 100ms;
hls_fragment 3;
hls_playlist_length 60;
allow play all;
}
application live2 {
live on;
record off;
hls on;
hls_path
/var/www/webcam.example.com/html/live2;
hls_sync 100ms;
hls_fragment 3;
hls_playlist_length 60;
allow play all;
}
}
}
Riavvia web server:
sudo systemctl restart nginx
aprire la porta predefinita nel firewall:
sudo ufw allow 1935/tcp
riavviare il firewall:
sudo ufw reload
verifica lo stato delle regole del firewall:
sudo ufw status
Per trasmettere il live in HTTP
Apre le porte 80 e 443:
sudo ufw allow 'Nginx Full'
Puoi verificare:
sudo ufw status
Verifica nginx:
systemctl status nginx
Crea la directory per tuo dominio come segue, utilizzando il -p
flag per creare eventuali directory principali necessarie:
sudo mkdir -p /var/www/webcam.example.com/html
assegna la proprietà della directory con la $USER
variabile di ambiente:
sudo chown -R $USER:$USER /var/www/webcam.example.com/html
scrivere ed eseguire i file concedendo solo autorizzazioni di lettura ed esecuzione a gruppi e altri, puoi inserire il seguente comando:
sudo chmod -R 755 /var/www/webcam.example.it
Successivamente, crea una index.html pagina di esempio utilizzando nanoil tuo editor preferito:
nano /var/www/webcam.example.com/html/index.html
All’interno, aggiungi il player VideoJS:
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://vjs.zencdn.net/8.6.1/video-js.css" rel="stylesheet" />
</head>
<body>
<video id="my-video" class="video-js vjs-default-skin" controls preload="auto" poster="logo.png" data-setup="{}">
<source src="https://webcam.example.com/live1/webcam.m3u8" type='application/x-mpegURL' />
<p class="vjs-no-js">
Per vedere questo video per favore abilita JavaScript, e considera di aggiornare a un web browser che
<a href="https://videojs.com/html5-video-support/" target="_blank">supporti i video HTML5</a>
</p>
</video>
<script src="https://vjs.zencdn.net/8.6.1/video.min.js"></script>
</body>
</html>
Affinché Nginx possa servire questo contenuto, è necessario creare un blocco server con le direttive corrette. Invece di modificare direttamente il file di configurazione predefinito, creiamone uno nuovo in: /etc/nginx/sites-available/webcam.example.com
:
sudo nano /etc/nginx/sites-available/webcam.example.com
Incolla il seguente blocco di configurazione, che è simile a quello predefinito, ma aggiornato per la nostra nuova directory e nome di dominio:
server {
listen 80;
listen [::]:80;
root /var/www/webcam.example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name webcam.example.com;
location / {
try_files $uri $uri/ =404;
}
}
abilitiamo il file creando un collegamento da esso alla sites-enableddirectory, da cui Nginx legge durante l’avvio:
sudo ln -s /etc/nginx/sites-available/webcam.example.com /etc/nginx/sites-enabled/
Ottimizzare le Prestazioni di Nginx-RTMP in Ubuntu 22.04
Per evitare un possibile problema di memoria dell’hash bucket che può derivare dall’aggiunta di ulteriori nomi di server, è necessario modificare un singolo valore nel /etc/nginx/nginx.conf file. Apri il file:
sudo nano /etc/nginx/nginx.conf
Trova la direttiva server_names_hash_bucket_size
e rimuovi il simbolo #
per rimuovere il commento dalla riga:
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
verifica per assicurarti che non siano presenti errori di sintassi in nessuno dei tuoi file Nginx:
sudo nginx -t
Se non ci sono problemi, riavvia Nginx per abilitare le modifiche:
sudo systemctl restart nginx
Installare Let’s Encrypt
In questa sezione della guida, ci concentreremo sull’installazione e configurazione di Let’s Encrypt, uno strumento essenziale per implementare un certificato SSL/TLS nel tuo server Nginx. Un certificato SSL assicura che i dati trasmessi tra il server e i client siano criptati e sicuri, un aspetto fondamentale per la sicurezza di qualsiasi sito web. Seguiremo passo dopo passo il processo di installazione di Let’s Encrypt, la generazione di un certificato SSL per il tuo dominio, e la configurazione automatica con Nginx. Questo ti permetterà di garantire una connessione sicura per il tuo sito web:
sudo snap install core; sudo snap refresh core
sudo apt remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo nano /etc/nginx/sites-available/webcam.example.com
sudo nginx -t
sudo systemctl reload nginx
sudo ufw status
sudo certbot --nginx -d webcam.example.com
oppure senza fornire email:
sudo certbot --nginx --register-unsafely-without-email -d webcam.example.com
sudo systemctl status snap.certbot.renew.service
sudo certbot renew --dry-run
PHP per eventuali script di controllo
La prossima fase della nostra guida si concentra sull’integrazione di PHP nel tuo server Nginx. PHP è un linguaggio di scripting lato server ampiamente utilizzato, essenziale per eseguire script dinamici sul tuo sito. In questa sezione, vedremo come installare e configurare PHP-FPM (FastCGI Process Manager), che è un’implementazione alternativa di PHP ideale per siti ad alto traffico. Seguiremo i passaggi per installare PHP, configurare Nginx per processare i file PHP e assicurarci che tutto funzioni correttamente sia in un ambiente di hosting condiviso sia in localhost:
sudo apt update
sudo apt install php-fpm
sudo systemctl start php-fpm
sudo systemctl status php8.1-fpm
sudo nano /etc/nginx/sites-available/webcam.example.com
server {
# ... altre configurazioni ...
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# Assicurati che il percorso del socket sia corretto per PHP 8.1
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
# ... altre configurazioni opzionali ...
}
# ... altre configurazioni ...
}
sudo systemctl restart nginx
Per PHP in localhost
sudo nano /etc/nginx/sites-available/default
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# Assicurati che il percorso del socket sia corretto per la tua versione di PHP
fastcgi_pass unix:/var/run/php/php-fpm.sock;
}
Per configurare RTMPS
In questa parte della guida, affronteremo il passaggio fondamentale per l’abilitazione di RTMPS (Real Time Messaging Protocol Secure) sul tuo server. RTMPS è una versione sicura di RTMP che utilizza SSL/TLS per criptare il flusso, garantendo una trasmissione sicura dei dati. Per attivarlo, utilizzeremo ‘stunnel’, uno strumento che permette di aggiungere un layer di sicurezza ai protocolli esistenti. Seguiremo la procedura di installazione di stunnel, la configurazione del tunnel per RTMPS, e l’adeguamento delle impostazioni di Nginx per accettare connessioni RTMPS. Questi passaggi sono cruciali per chi vuole offrire trasmissioni live sicure e protette:
sudo apt-get update
sudo apt-get install stunnel4
sudo systemctl enable stunnel4
sudo systemctl start stunnel4
sudo systemctl status stunnel4
sudo nano /etc/stunnel/stunnel.conf
[rtmps]
accept = 1935
connect = 127.0.0.1:1936
cert = /etc/letsencrypt/live/webcam.example.com/fullchain.pem
key = /etc/letsencrypt/live/webcam.example.com/privkey.pem
sudo systemctl status stunnel4
sudo nano /etc/nginx/nginx.conf
Modificare questo:
rtmp {
server {
listen 127.0.0.1:1936; # <- MODIFICARE QUESTO
chunk_size 4096;
application live1 {
...
sudo systemctl restart nginx
FFMPEG PER MANIPOLARE IL FLUSSO DELLA WEBCAM
In questa parte della guida, ci immergeremo nell’uso di FFMPEG, uno strumento potente e versatile per la manipolazione di flussi video e audio. FFMPEG ci permette di modificare e ottimizzare i flussi della webcam per soddisfare specifiche esigenze, come l’aggiunta di una traccia audio muta, una pratica comune per garantire la compatibilità con dispositivi come quelli Apple. Spiegheremo come installare FFMPEG su Ubuntu e forniremo un esempio di script per dimostrare come manipolare un flusso esistente per aggiungere audio. Questo passaggio è particolarmente utile per chi necessita di personalizzare i propri flussi per specifiche piattaforme o dispositivi:
sudo apt install ffmpeg
esempio di script per manipolazione del flusso per aggiungere una traccia audio muta per dispositivi Apple:
#!/bin/bash
# L'URL del flusso che potrebbe essere già in esecuzione
STREAM_URL_IN="rtmp://webcam.example.com/key/webcam"
# L'URL del flusso in uscita
STREAM_URL_OUT="rtmp://localhost/live1/webcam"
# Trova e termina qualsiasi istanza esistente di FFmpeg che trasmette lo stesso flusso
pgrep -f "$STREAM_URL_IN" | while read -r pid; do
if [ "$pid" != "$$" ]; then
kill "$pid"
fi
done
# Esegue il comando FFmpeg per il nuovo flusso
ffmpeg -i "$STREAM_URL_IN" -f lavfi -i anullsrc=channel_layout=mono:sample_rate=24000 -c:v copy -c:a aac -shortest -f flv "$STREAM_URL_OUT"
Fine.