如何使用nginx反向代理IP摄像头';这是一条小溪吗?

如何使用nginx反向代理IP摄像头';这是一条小溪吗?,nginx,reverse-proxy,openwrt,Nginx,Reverse Proxy,Openwrt,我在OpenWRT上使用nginx反向代理来自IP摄像头的运动jpeg提要,但我遇到了长达10-15秒的延迟,即使在非常低的帧大小和速率下也是如此。将OpenWRT设备从路径中移除后,可以无延迟地访问相机 由于延迟的长度(以及它随时间增长的事实),这看起来像是某种缓冲/缓存问题。我已经设置了proxy\u buffering off,但是还有什么我应该注意的吗 谢谢。我从未对nginx的工作感到满意。根据您的具体需要,有两种解决方案可能足够: 如果您可以容忍流位于不同的端口,请使用OpenWR

我在OpenWRT上使用nginx反向代理来自IP摄像头的运动jpeg提要,但我遇到了长达10-15秒的延迟,即使在非常低的帧大小和速率下也是如此。将OpenWRT设备从路径中移除后,可以无延迟地访问相机

由于延迟的长度(以及它随时间增长的事实),这看起来像是某种缓冲/缓存问题。我已经设置了
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等)
我会在这里包括我的nginx.conf,除了它没有什么不寻常的地方。。。只不过是赤裸裸的代理而已。如果流量确实是你的罪魁祸首,你可以试试tcpdump或wireshark,看看你的局域网里有什么乱七八糟的东西

但听起来好像是你的路由器引起了延迟。也许硬件无法处理cpu/流量负载,或者Openwrt设置中可能有其他东西占用了高速路。你的视频是否流畅,只是延迟了?或者你正在看一段严重起伏的视频?您提到的延长延迟听起来确实像是缓冲/缓存的事情。。。但我不知道该怎么做。

另请参见