Nginx Reverse Proxy สำหรับ MistServer

คู่มือการติดตั้งและคอนฟิกส่งต่อสตรีมทั้งรูปแบบ MPEG-TS (.ts) และ HLS (.m3u8) ผ่านพอร์ต 80

1 ติดตั้งแพ็กเกจ Nginx

อัปเดตระบบและติดตั้ง Nginx เว็บเซิร์ฟเวอร์:

sudo apt update
sudo apt install -y nginx

2 สร้างไฟล์คอนฟิก Reverse Proxy

สร้างไฟล์คอนฟิกสำหรับส่งต่อทราฟฟิกไปยัง MistServer (พอร์ต 8080) โดยปิดบัฟเฟอร์เพื่อป้องกันอาการภาพดีเลย์และเปิดท่อยาวสำหรับ .ts:

sudo bash -c 'cat << "EOF" > /etc/nginx/sites-available/mist-proxy
server {
    listen 80;
    server_name 172.30.100.9;

    # ปรับ Timeout รองรับการรับชมไฟล์ .ts แบบสตรีมมิ่งต่อเนื่อง
    proxy_connect_timeout       10s;
    proxy_send_timeout          86400s;
    proxy_read_timeout          86400s;
    send_timeout                86400s;

    # 1. จัดการการเรียกดูแบบ MPEG-TS ตรง (เช่น /pptv.ts หรือ /onehd.ts)
    location ~* ^/([a-zA-Z0-9_-]+)\.ts$ {
        proxy_pass http://127.0.0.1:8080/$1.ts;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # ปิด Buffering เพื่อให้สตรีมไหลต่อเนื่องทันที
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        # รองรับ CORS สำหรับเว็บเพลเยอร์
        add_header Access-Control-Allow-Origin * always;
    }

    # 2. จัดการการเรียกดูแบบ HLS (เช่น /hls/pptv/index.m3u8)
    location /hls/ {
        proxy_pass http://127.0.0.1:8080/hls/;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_buffering off;
        add_header Access-Control-Allow-Origin * always;
    }
}
EOF'

3 เปิดใช้งานไซต์และ Reload Nginx

สร้าง Symbolic link เพื่อเปิดใช้งานคอนฟิก และตรวจสอบความถูกต้องของไวยากรณ์:

sudo ln -sf /etc/nginx/sites-available/mist-proxy /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
⚠️ หมายเหตุ: หากมีไฟล์ /etc/nginx/sites-enabled/default ใช้งานพอร์ต 80 ชนกันอยู่ ให้ลบออกด้วยคำสั่ง sudo rm /etc/nginx/sites-enabled/default แล้ว reload nginx อีกครั้ง

4 โครงสร้าง URL สำหรับนำไปใช้งาน

รูปแบบโปรโตคอล URL ปลายทางผ่าน Nginx (Client เรียกดู) ปลายทาง MistServer ภายใน
MPEG-TS (.ts) http://172.30.100.9/pptv.ts http://127.0.0.1:8080/pptv.ts
HLS (.m3u8) http://172.30.100.9/hls/pptv/index.m3u8 http://127.0.0.1:8080/hls/pptv/index.m3u8

5 คำสั่งทดสอบการรับส่งสัญญาณ

ทดสอบเรียกไฟล์ TS จาก Nginx:

curl -I http://172.30.100.9/pptv.ts

ทดสอบดึง Playlist HLS:

curl -s http://172.30.100.9/hls/pptv/index.m3u8 | head -n 10