如何使用nginx反向代理IP摄像头';这是一条小溪吗?
我在OpenWRT上使用nginx反向代理来自IP摄像头的运动jpeg提要,但我遇到了长达10-15秒的延迟,即使在非常低的帧大小和速率下也是如此。将OpenWRT设备从路径中移除后,可以无延迟地访问相机 由于延迟的长度(以及它随时间增长的事实),这看起来像是某种缓冲/缓存问题。我已经设置了如何使用nginx反向代理IP摄像头';这是一条小溪吗?,nginx,reverse-proxy,openwrt,Nginx,Reverse Proxy,Openwrt,我在OpenWRT上使用nginx反向代理来自IP摄像头的运动jpeg提要,但我遇到了长达10-15秒的延迟,即使在非常低的帧大小和速率下也是如此。将OpenWRT设备从路径中移除后,可以无延迟地访问相机 由于延迟的长度(以及它随时间增长的事实),这看起来像是某种缓冲/缓存问题。我已经设置了proxy\u buffering off,但是还有什么我应该注意的吗 谢谢。我从未对nginx的工作感到满意。根据您的具体需要,有两种解决方案可能足够: 如果您可以容忍流位于不同的端口,请使用OpenWR
proxy\u buffering off
,但是还有什么我应该注意的吗
谢谢。我从未对nginx的工作感到满意。根据您的具体需要,有两种解决方案可能足够:
- 如果您可以容忍流位于不同的端口,请使用OpenWRT内置防火墙的端口转发功能将其通过
- 使用tinyproxy的反向代理功能。默认包具有被标志禁用的反向代理功能,因此您需要自己轻松地签出并构建它。这种方法肯定更加精细,但也确实有效
我仍然有兴趣听到任何人在使用nginx时使用此功能。我在Arduino Yun上安装了mjpg streamer,然后在我的路由器设置中设置端口转发白名单,仅发送到我的Web服务器 这是我的Nginx配置,它位于启用站点的目录中
server {
listen 80;
server_name cam.example.com;
error_log /var/log/nginx/error.cam.log;
access_log /var/log/nginx/access.cam.log;
location / {
set $pp_d http://99.99.99.99:9999/stream_simple.html;
if ( $args = 'action=stream' ) {
set $pp_d http://99.99.99.99:9999/$is_args$args;
}
if ( $args = 'action=snapshot' ) {
set $pp_d http://99.99.99.99:9999/$is_args$args;
}
proxy_pass $pp_d;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Request-Start $msec;
}
}
我有Openwrt BB(wndr3800)上的Nginx反向代理到dlink 932LB1 ip cam,它工作得很好。没有明显的延迟,甚至在我禁用代理缓冲之前。如果我有很多东西通过网络传输,视频可能会变得杂乱无章,但不会比从浏览器(或我的任何ip cam应用程序)直接链接到摄像头更糟。所以这是可能的 Nginx是我的出路。我尝试了tinyproxy和lighttpd进行反向代理,但它们在OpenWrt上都缺少功能。tinyproxy和lighttpd都需要为完整的反向代理功能进行自定义编译,(AFAIK)lighttpd将不接受代理指令中的FQDN 下面是我要说的:
- 面向公众的Nginx上的Basic或digest auth提供站点范围的访问控制
- 我将我的CGI脚本(shell、haserl等)代理给Openwrt的uhttpd
- 严格控制摄像头的反向代理mjpeg和jpeg API,无 其他摄像机功能向公众公开
- 摄像头基本身份验证由Nginx(代理集头)处理,因此没有后端 向公众公开的授权代码
- 占用空间相对较小(没有perl、apache、ruby等)