各位老铁们好,相信很多人对nginx视频服务器都不是特别的了解,因此呢,今天就来为大家分享下关于nginx视频服务器以及如何在nginx服务器上实现多媒体流的录制和转码的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
一、nginx服务器有什么作用以及什么是反向代理
一:Nginx作为正向代理服务器:
1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代理不支持从外网向内网访问资源,一般很少用,经本人测试,效果也不好,有很多页面打不开,在百度搜索的页面也无法返回。
server{
server_name localhost;
resolver 202.106.0.20 8.8.8.8;#只能有一个resolve,但是可以用空格隔开,继续写下一个
resolver_timeout 5s;
listen 8080;
location/{
proxy_pass$scheme://$_host/$request_uri; proxy_set_header Host$_host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
}
2.错误码502:Nginx作为代理服务器向后端转发请求过程中超时。
二:Nginx作为反向代理服务器:
反向代理:反向代理也叫reverse proxy,指的是代理外网用户的请求到内部的指定web服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。
反向代理的常用指令:
1.proxy_pass:用来设置将请求转发给的后端服务器的主机,可以是主机名、IP:端口的方式,也可以代理到通过upstream设置的主机组,如下:
upstream webserver{
#ip_hash;
server 192.168.0.201 weight=1 max_fails=2 fail_timeout=2;
server 192.168.0.202 weight=1 max_fails=2 fail_timeout=2;
server 127.0.0.1:9008 backup;
}
server{
server_name hfnginx.chinacloud.;
#aess_log logs/host.aess.log main;
location/{#静态网页在本机
root html;
index index.html;
}
location~* ^/form{#指定目录在后端服务器
proxy_pass 此处后面不能加/,如果加了会提示语法错误
proxy_set_header X-Real-IP$remote_addr;
}
}
2:proxy_hide_header:用于nginx服务器作为反向代理的时候,在返回给客户端响应的时候,隐藏后端服务版本(如php版本)的信息,可以设置在/server或location块,如下:
Nginx会将上游服务器的响应转发给客户端,但默认不会转发以下HTTP头部字段:Date、Server、X-Pad和X-Ael-*。使用proxy_hide_header后可以任意地指定哪些HTTP头部字段不能被转发。例如:
proxy_hide_header Cache-Control;
proxy_hide_header MicrosoftOfficeWebServer;
注:如果是nginx作为web服务器,要隐藏版本信息的话,使用fastcgi_hide_header:
3:proxy_pass_header:与proxy_hide_header功能相反,proxy_pass_header会将原来禁止转发的header设置为允许转发,可以设置在/server或location块例如:
proxy_pass_headerX-Ael-Redirect;
4:proxy_pass_request_body:是否向后端服务器发送HTTP包体部分,可以设置在/server或location块,如下:
proxy_pass_request_body on|off;#默认为on
5:proxy_pass_request_headers:是否将客户端的请求头部转发给后端服务器,可以设置在/server或location块,如下:
proxy_pass_request_headers on| off;#默认为on
6:proxy_set_header:可以更改或添加客户端的请求头部信息内容,并转发之后端服务器,比如在后端服务器想要获取客户端的真实IP的时候,就要更改每一个报文的头部,如下:
proxy_set_header HOST$remote_addr;#添加HOST到报文头部,其值为客户端的公网IP
7:proxy_set_body:更改nginx服务器接收到的客户端请求的请求内容,然后将修改后的请求转发给后端的服务器,用法如下:
proxy_set_body value;#其中value为要修改的目标内容,可以是变量、文本或者变量的组合。
8:proxy_ip:Nginx 0.8.22版本及以上支持此功能,用于Nginx配置了多个基于域名或IP的主机的情况下,可以指定代理连接到特定的主机处理,就是强制将客户端请求绑定到指定的IP:
proxy_bind x.x.x.x;
9:proxy_connect_timeout:配置nginx服务器与后端服务器尝试建立连接的超时时间,默认为60秒,用法如下:
proxy_connect_timeout 10s;#10s为自定义nginx与后端服务器建立连接的超时时间
10:proxy_read_time:配置nginx服务器向后端服务器或服务器组发起read请求后,等待的超时时间:
proxy_read_time 10s;#默认为60秒
11:proxy_send_time;配置nginx项后端服务器或服务器组发起write请求后,等待的超时时间:
proxy_send_time 10s;#默认为60s
12:proxy__version:用于设置nginx提供代理服务的HTTP协议的版本:
proxy__version 1.0|1.1;
13:proxy_method:设置nginx服务器请求后端服务器时使用的方法,一般为POST或者GET,客户端的请求方法将被忽略:
proxy_method GET|PUT;
14:proxy_ignore_client_abort:设置在客户端网络中断请求时,nginx服务器是否中断对被代理服务器的请求:
proxy_ignore_client_abort off|on;#默认为off,当客户端网络中断请求时,nginx服务器中断其对后端服务器的请求。
15:proxy_ignore_headers:设置nginx不处理后端服务器返回的数据中包含某些指定字段的报文,可以指定的有:”X-Ael-Redirect”,“X-Ael-Expires”,“Expires”或”Cache-Control”:
proxy_ignore_headers Expires;
16:proxy_redirect:修改后端服务器返回的响应头部中的location货refresh,与proxy_pass配合使用:
17:proxy_intercept_errors:设置nginx服务器返回客户端的错误状态,当后端服务器返回大于等于的错误码的是,如果本功能是打开的,则nginx服务器返回自定义的错误页面(使用error page定义的),如果没有开启就将后端服务器返回的HTTP状态返回给客户端,默认为关闭:
proxy_intercept_errors on| off;
18:proxy_headers_hash_max_size:设置nginx保存HTTP报文头的hash表的上限,默认为512字节:
proxy_headers_hash_bucket_size 512;#申请nginx保存HTTP报文头的hash表的空间大小,默认为64个字节
proxy_headers_hash_max_size 512;#上限
server_names_hash_max_szie 512;#设置服务器名称的上限
server_namse_hash_bucket_size 512;#申请空间大小
19:proxy_headers_hash_bucket_size:#申请nginx保存HTTP报文头的hash表的空间大小,默认为64个字节
proxy_headers_hash_bucket_size 512;#默认为64字节
20:proxy__upstream:当使用了upstream的时候,可以定义在发生了特定的情况下将请求依次交给下一个组内的服务器处理,状态包括:
proxy_next_upstream _404 _502;//让404报错进入max_fails计数 upstream online{
sticky;
server 172.28.70.161:8080 max_fails=0 fail_timeout=3s;
server 172.28.70.163:8080 max_fails=0 fail_timeout=3s;
check interval=3000 rise=2 fall=1 timeout=1000 type=;
check__send"GET/ HTTP/1.0\r\n\r\n";
check__expect_alive _2xx _3xx;
}
upstream backup{
server 172.28.22.29:7777 max_fails=0 fail_timeout=3s;
}
21:proxy_ssl_session_reuse:配置是否基于SSL协议与后端服务器建立连接,如下:
proxy_ssl_session_reuse on| off;
二、如何解决Nginx无法连接到服务器
解决方案如下:
1、打开你的浏览器,以360浏览器为例。
2、最右上角的标志,如图所示,在下拉菜单中inter选项.
3、最后选高级,通过代理连接使用HTTP 1.1勾上即可。
扩展资料:
Nginx(engine x)是一个高*能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx是由 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了。
Igor将源代码以类BSD许可证的形式发布。尽管还是测试版,但是,Nginx已经因为它的稳定*、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。
参考资料:nginx_百度百科
三、如何在nginx服务器上实现多媒体流的录制和转码
1、首先需要说明的是,不能用exec命令。他会在客户端推流结束的同时自动终止调用的外部程序,结果就是最后ffmpeg无法进行完整的编码。该命令只适合将接到的流转推到其他。
2、应该使用exec_record_done配合record命令使用。即在录制结束之后自动对已录制的文件进行转码操作得到MP4文件。根据是否使用record_interval命令又有两种不同的情况。
2A、若不使用record_interval,则会在推流停止后(即record完全停止后)才进行转码,在这之前得不到任何输出
2B、若使用record_interval,即可设置每隔一段时间就重新开始录制,结合record_end on命令,可确保最后录制的视频都在一个文件中,否则就会给每段录制都生成一个单独的文件。使用这两个命令之后,转码也会相应地每隔一段时间就进行一次,但最后都输出(覆盖)到同一个文件中。优点是能近乎“实时”地进行转码,缺点是会重复调用ffmpeg,占用系统资源。
3、需要注意的是,以上两种方法最后得到的转码文件(的时长)是相同的。
4、nginx.conf配置示例
[html] view plain copy
lication hls{
live on;
hls on;
record all;
record_path/home/zhanghui/test;
#record_interval 10s;
#record_end on;
hls_path/tmp/;
hls_fragment 5s;
# convert recorded file to mp4 format
exec_record_done'/usr/local/bin/ffmpeg'-y-i/home/zhanghui/test/livestream.flv-vcodec libx264-f mp4/home/zhanghui/test/test_record.mp4 2>>/home/zhanghui/test/test_record.log;
}