ตั้ง Nginx RTMP Streaming Server บน VPS

ถ้าต้องการไลฟ์สตรีมวิดีโอเองโดยไม่พึ่งพลัตฟอร์มเช่น YouTube หรือ Twitch คำตอบคือ Nginx RTMP (Real-Time Messaging Protocol Module) สามารถสตรีมมิ่งไลฟ์ที่มีเวลาหน่วงน้อยเพียง 1-3 วินาที ผ่านเซิร์ฟเวอร์ VPS ของคุณเอง ไม่ว่าจะเป็นการถ่ายทำสด พูดประชุม หรือเกมเมอร์เล่น Twitch โดยรักษาข้อมูลและบันทึกวิดีโอให้อยู่ที่เซิร์ฟเวอร์ของคุณตลอดเวลา บทความนี้จะสอนการติดตั้ง Nginx RTMP ตั้งแต่เริ่มต้นจนสามารถสตรีมมิ่งได้ด้วยเครื่องมือยอดนิยมเช่น OBS Studio

🎯 RTMP คืออะไร? และทำไมถึงใช้บน Nginx?

RTMP (Real-Time Messaging Protocol) คือโปรโตคอลที่ออกแบบมาเพื่อการสตรีมมิ่งวิดีโอและเสียงแบบเรียลไทม์ โดยมีข้อดีดังนี้:

Nginx เป็นเวบเซิร์ฟเวอร์ที่เบา (lightweight) และเร็วมาก ค่อนข้างเหมาะกับการเพิ่มโมดูล RTMP เพื่อสตรีมมิ่ง ไม่ต้องติดตั้งซอฟต์แวร์แยกเช่น Wowza หรือ Red5 ที่กินทรัพยากรมาก

🛠️ สิ่งที่ต้องเตรียมก่อนเริ่มต้น

📦 ขั้นที่ 1 — อัพเดท System และติดตั้ง Nginx Dependencies

เริ่มต้นด้วยการอัพเดท package manager และติดตั้งเครื่องมือที่ต้องการสำหรับการคอมไพล์ Nginx:

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev \
  libgd-dev libgeoip-dev git curl

คำสั่งนี้ติดตั้ง gcc, make, และไลบรารี่ที่ Nginx ต้องการสำหรับการคอมไพล์

⬇️ ขั้นที่ 2 — ดาวน์โหลด Nginx และ RTMP Module

ดาวน์โหลด Nginx source code และโมดูล RTMP จาก GitHub:

cd /tmp
wget http://nginx.org/download/nginx-1.24.0.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git
tar -zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0

ตรวจสอบว่าเวอร์ชัน Nginx ที่ดาวน์โหลดเป็นเวอร์ชันใหม่ล่าสุด (หรือตรวจสอบบน nginx.org)

🔨 ขั้นที่ 3 — คอมไพล์ Nginx พร้อมโมดูล RTMP

ตั้งค่า Nginx ด้วยโมดูล RTMP และอื่น ๆ ที่ต้องการ:

./configure \
  --prefix=/etc/nginx \
  --sbin-path=/usr/sbin/nginx \
  --modules-path=/usr/lib64/nginx/modules \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx.pid \
  --lock-path=/var/run/nginx.lock \
  --with-http_gzip_static_module \
  --with-http_ssl_module \
  --with-http_v2_module \
  --with-http_realip_module \
  --with-http_geoip_module \
  --add-module=../nginx-rtmp-module

จากนั้นคอมไพล์และติดตั้ง:

make && sudo make install

ขั้นตอนนี้อาจใช้เวลา 5-15 นาที ขึ้นอยู่กับความเร็ว CPU ของ VPS

⚙️ ขั้นที่ 4 — ตั้งค่า Nginx RTMP Configuration

แก้ไขไฟล์ config หลักของ Nginx เพื่อเพิ่มการตั้งค่า RTMP:

sudo nano /etc/nginx/nginx.conf

ที่ส่วนท้ายของไฟล์ (ก่อน closing bracket `}`)) เพิ่มบล็อก RTMP นี้:

rtmp {
    server {
        listen 1935;

        application live {
            live on;
            record off;

            # Allow push from any IP (แก้ตามที่ต้องการสำหรับความปลอดภัย)
            allow publish all;
            allow play all;
        }

        application vod {
            play /mnt/vod/videos;
        }
    }
}

บันทึกการเปลี่ยนแปลง (Ctrl+X → Y → Enter)

🚀 ขั้นที่ 5 — เตรียม Directory สำหรับ VOD (บันทึก)

สร้างโฟลเดอร์สำหรับบันทึกวิดีโอ:

sudo mkdir -p /mnt/vod/videos
sudo chown -R www-data:www-data /mnt/vod
sudo chmod 755 /mnt/vod/videos

โฟลเดอร์นี้จะเก็บไฟล์ FLV/MP4 ที่บันทึกจากการสตรีม

▶️ ขั้นที่ 6 — เริ่มต้น Nginx และตรวจสอบ

เริ่มต้น Nginx ด้วยคำสั่ง:

sudo nginx -t    # ตรวจสอบ syntax ว่าถูกต้อง
sudo systemctl start nginx
sudo systemctl enable nginx

ตรวจสอบว่า Nginx ทำงาน:

sudo netstat -tlnp | grep 1935
# หรือ
ss -tlnp | grep 1935

ถ้าผลลัพธ์แสดง LISTEN บนพอร์ต 1935 แสดงว่า RTMP server เปิดอยู่แล้ว

⚠️ Firewall: ต้องเปิดพอร์ต 1935 ใน firewall ของ VPS ถ้ามี ufw หรือ cloud firewall ดำเนินการ: sudo ufw allow 1935/tcp

🎬 ขั้นที่ 7 — เชื่อมต่อ OBS Studio และเริ่มสตรีม

ใน OBS Studio ไปที่ Settings → Stream ตั้งค่าดังนี้:

จากนั้นคลิก "Start Streaming" และวิดีโอของคุณจะประมวลผลไปยัง VPS แล้ว URL ในการดูคือ rtmp://your-vps-ip:1935/live/mystream123

🔍 การตรวจสอบและแก้ไขปัญหา

เมื่อเริ่มตั้ง Nginx RTMP อาจพบปัญหาต่างๆ ต่อไปนี้คือวิธีแก้ไขปัญหาทั่วไป การตรวจสอบ log file คือขั้นตอนแรกในการหาสาเหตุ:

sudo tail -f /var/log/nginx/error.log

ถ้ากำลัง broadcasting และมีปัญหา หรือ viewers ต่อไม่ได้ ให้ตรวจสอบ Nginx error log ก่อน เพราะจะแสดงข้อมูลว่าโปรแกรมประชุมกับเซิร์ฟเวอร์ตรงไหน

📊 ประสิทธิภาพและการปรับแต่ง

สำหรับสตรีมที่ขึ้นไปถึง 1000+ concurrent viewers เพิ่มการตั้งค่า:

worker_processes auto;
worker_connections 10000;
events {
    use epoll;
}
http {
    client_max_body_size 100m;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 30;
}

และในบล็อก RTMP เพิ่ม:

chunk_size 4096;
idle_streams off;

🔒 ความปลอดภัย — จำกัดการสตรีม

ถ้าต้องการป้องกัน unauthorized broadcast ให้ใช้ on_publish webhook:

application live {
    live on;
    on_publish http://localhost:8080/auth;
}

แล้วสร้าง PHP script ที่ localhost:8080 เพื่อตรวจสอบ stream key

ต้องการ VPS ที่มั่นคงสำหรับ Streaming?

AsiaGB VPS ไทยและสิงคโปร์ มี SSD, 99% uptime, DirectAdmin, ไม่จำกัดแบนด์วิดท์เหมาะสำหรับ Nginx RTMP streaming เริ่มต้น 500 บาท/เดือน

สมัครใช้งาน AsiaGB

ดูแพ็กเกจ VPS ไทย ราคาถูกทั้งหมด →