ffmpeg通过nginx负载均衡后端和静态文件

1、有外网权限的主机或者对外的nginx主机的nginx.conf配置

#user  root root;
worker_processes  4;#物理核数
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
events {
    worker_connections  8000;
}
http {
    include      mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush    on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
   #后端程序需要进行负载均衡服务器主机和端口
    upstream webservers{
     #避免一些麻烦简单设置为ip_hash负载机制
      ip_hash;
     #需要进行负载的主机
      server  120.152.36.12:8003; 
      server  120.152.36.16:8003;
    }
    #ffmpeg如果安装多台的可以
    #upstream ffmpeg_server {
    #ffmpeg需要进行负载的主机,如果nginx 和外网的云主机在一台上,那不需要配置外网的那台 地址   
   #确保其他需要负载的云主机防火墙8099端口是开放的
    #  server 120.152.36.16:8099;
    #}
    client_max_body_size 100m;
   #
    server {
        #开放公网的主机前端访问所需的端口
        listen      8099;
       #外网IP
        server_name  220.180.145.118;
        root /usr/local/nginx/html;
        include /etc/nginx/default.d/*.conf;
        #charset koi8-r;
        # For Proxy Cache.     
        #前端地址,前端需要负载可以通过proxy_pass配置
        location /digital-village/ {
                        alias /home/village/web/dist/;
                        index  index.html index.htm;
                        add_header Access-Control-Allow-Origin *;
                        add_header Access-Control-Allow-Credentials true;
                        add_header Access-Control-Allow-Headers Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Requested-With;
                        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
                }
            #后端权限接口负载
            location /api/sys {
                proxy_pass  http://webservers/;
            }

            #文件相关的接口定位到本机,不然容易找不到,换了个IP地址的话上传的文件就可能找不到了。
            location  /api/common {
                proxy_pass http://120.152.36.12:8003/common;
                proxy_set_header Host $host:$server_port;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            }
            #后端接口负载,前端访问后端BAE_URL都全部加了个/api
            location /api {
                proxy_pass  http://webservers/;
            }
            #文件预览接口,文件只存在本EIP服务器
            location ^~ /preview/ {
              proxy_pass http://120.152.36.12:8003;
            }

                # ffmpeg视频流媒体相关设置
        #      location /live {
        #    flv_live on;
        #    chunked_transfer_encoding  on; #open 'Transfer-Encoding: chunked' response
        #    add_header 'Access-Control-Allow-Credentials' 'true'; #add additional HTTP header
        #    add_header 'Access-Control-Allow-Origin' '*'; #add additional HTTP header
        #    add_header Access-Control-Allow-Headers X-Requested-With;
        #    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        #    add_header 'Cache-Control' 'no-cache';
        #}

        # This URL provides RTMP statistics in XML
                location /stat {
                                rtmp_stat all;
                                # Use this stylesheet to view XML as web page
                                # in browser
                                rtmp_stat_stylesheet stat.xsl;
                }

                location /stat.xsl {
                                # XML stylesheet to view RTMP stats.
                                # Copy stat.xsl wherever you want
                                # and put the full directory path here
                                root /path/to/stat.xsl/;
                }
              # location /hls {
                                # Serve HLS fragments
              #                  types {
              #                                  application/vnd.apple.mpegurl m3u8;
              #                                  video/mp2t ts;
              #                  }
              #                  root html;
              #                  expires 30s;
              #                  add_header Cache-Control max-age=30s;
             # 有跨域问题可加上
              #                  add_header Access-Control-Allow-Origin *;
              #                  add_header Access-Control-Allow-Headers "Origin, X-Requested-With,      Content-Type, Accept";
              #                  add_header Access-Control-Methods "GET, POST, OPTIONS";

              # }
             #直播的地址  http://220.180.145.118:8099/hls/userId/pkId/pkId.m3u8
                location /hls {
                                # Serve HLS fragments
                                types {
                                                application/vnd.apple.mpegurl m3u8;
                                                video/mp2t ts;
                                }
                    #root html;
                    alias /usr/local/nginx/html/hls;
                    #摄像机直播的都会进入该路由,寻找相关的直播m3u8文件,没有找到就去寻找new_server远程主机上的文件
                    try_files $uri @new_server;
                }
                #本地找不到的时候去找另外一台服务器或其他服务器
                location @new_server {
                    proxy_redirect off;
                   #只部署了两台,主nginx安装在开放外网的云主机,找不到文件的时候直接去寻找另外一台,如果是多台可以配置为ffmpeg_server
                    proxy_pass  http://100.152.36.16:8099;
                   # proxy_pass  http://ffmpeg_server;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                }

                location /dash {
                                # Serve DASH fragments
                                root /tmp;
                                add_header Cache-Control no-cache;
                }

        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
            root  html;
        }

                error_page  404 403              /404.html;
                location = /404.html {
                        root /usr/local/nginx/html;
                }

                # redirect server error pages to the static page /50x.html
                #
                error_page  500 502 503 504  /500.html;
                location = /500.html {
                        root  /usr/local/nginx/html;
                }

    }

}
#rtmp设置
rtmp {
    out_queue              4096;
    out_cork                8;
    max_streams            128;
    timeout                15s;
    drop_idle_publisher    15s;
    log_interval 5s;
    log_size    1m;
    server {
        listen 1935;      #监听的端口号
        #server_name 127.0.0.1;
        application live {      #自定义的名字
            live on;
            record off;
            allow play all;
      }
        application hls {
            live on;
            hls on;
            hls_path /usr/local/nginx/html/hls;
            hls_fragment 3s; #设置HLS片段长度。 默认为5秒。
            hls_playlist_length 15s; #设置HLS播放列表长度。 默认为30秒。
            hls_continuous on; #连续模式。
            hls_nested on;    #嵌套模式
            hls_cleanup off; # 切换HLS清理。 默认情况下,该功能处于打开状态。 在这种模式下,nginx缓存管理器进程从HLS目录中删除旧的HLS片段和播放列表
            record off;
      }
    }
}

2、其他需要负载均衡的云主机上安装的nginx的nginx.conf配置

#user  nobody;
worker_processes  4;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush    on;
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen      8099;
        server_name  localhost;
        #charset koi8-r;
        location /hls {
          alias /usr/local/nginx/html/hls;
          types {
                                                application/vnd.apple.mpegurl m3u8;
                                                video/mp2t ts;
                                }
        }
        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
            root  html;
        }
              error_page  404 403              /404.html;
                location = /404.html {
                        root /usr/local/nginx/html;
                }

                # redirect server error pages to the static page /50x.html
                #
                error_page  500 502 503 504  /500.html;
                location = /500.html {
                        root  /usr/local/nginx/html;
                }
    }


}


#rtmp设置
rtmp {
    out_queue              4096;
    out_cork                8;
    max_streams            128;
    timeout                15s;
    drop_idle_publisher    15s;
    log_interval 5s;
    log_size    1m;
    server {
        listen 1935;      #监听的端口号
        #server_name localhost; #与上面监听的8099端口的server名字一致
        application live {      #自定义的名字
            live on;
      }
      #直播hls配置
        application hls {
            live on;
            hls on;
            hls_path /usr/local/nginx/html/hls; #直播缓存路径window环境的配置为绝对地址,参考上传的
              hls_fragment 2s; #设置HLS片段长度。 默认为5秒。
            hls_playlist_length 5s; #设置HLS播放列表长度。 默认为30秒。
            hls_continuous on; #连续模式。
            hls_nested on;    #嵌套模式就是允许如localhost:8099/hts/目录1/目录2/文件名.m3u8;
            hls_cleanup off; # 切换HLS清理
      }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值