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清理
}
}
}