【树莓派】配置Nginx代理实现树莓派远程视频监控

背景介绍:
在淘宝上入手一个树莓派摄像头,它是通过CSI接口连接到树莓派板上,之前我使用的是CentOS系统,在网上找了很久,没有发现能在CentOS系统下的摄像头驱动(如果各位看客有相关资料或信息,欢迎联系本人),没办法重新刷了树莓派官方Debian系统,它自带树莓派摄像头的管理工具—raspistill。
在这里插入图片描述
为了实现树莓派+摄像头组合完成远程监控的目标,我们需要完成的任务包括:
1>. 视频流实时传输(本教程使用web端实现视频传输)
2>. 内网穿透(如果你有公网IP则可忽略此步骤)
如果你的树莓派只运行视频监控的端口服务,那么完成以上两个步骤就OK了。
如果你的树莓派还运行其它端口服务,如nginx,tomcat,pythonweb等等,你需要再多进行一项任务3:
3>. 树莓派端口代理转发,配置nginx.conf(本教程使用nginx为例)

一、视频流实时传输

淘宝卖家提供了一个相对简单的解决方案:下载一个master.zip的包在我们的树莓派上编译并运行它,就可以通过web浏览器方便的使用摄像头,运行效果如下图,可以看出使用了名为“MJPG-Streamer”的web开源项目:
在这里插入图片描述
这套解决方案包含了web前端的与后台服务端,我们能使用浏览器实时查看摄像头的视频/图像信息,但遗憾的是后台服务端没办法修改,所以不能进行如修改端口号的操作(这个系统设定端口号为8080)。

二、内网穿透

要想实现远程监控,你的树莓派必须有一个公网IP。什么是公网IP这里就不进行科普了,请自行百度。一般来说,我们现在的家庭网络是没有公网IP的,所以需要进行内网穿透的一个操作。实现内网穿透有很多方法,这里给推荐两种方法,一种简易流,一种技术流。
方法1: (简易流看这里↓↓↓)
推荐使用花生壳服务(不是打广告啊,只是个人使用推荐o(╥﹏╥)o)
① 首先你需要在树莓派上安装花生壳服务。
很赞的是,花生壳提供了树莓派版的花生壳程序,大家可参考官方教程安装。给出链接:
官方下载
官方教程
安装完成后你会看到类似如下输出:
在这里插入图片描述
请使用这个SN作为账号名登录“http://b.oray.com”,默认密码是“admin”
②登录以后:
a. 会赠送你一个免费的壳域名
b. 然后再花6块钱买一个内网穿透的试用服务(只能用一年),内网映射配置如下。
这种方法唯一的一个优点就是超级省心,特别适合小白以及不想折腾的People,缺点也很明显,试用版的内网穿透服务带宽只有1M,我自己在用的时候没办法流畅的查看视频监控。
在这里插入图片描述
应用名称和域名自己填,映射类型选择HTTP80,外网端口不能选,默认80(花钱可以改外网端口),内网主机填"127.0.0.1",内网端口填“8080”(请忽略图片上的80,为什么是8080请回看第一节描述),然后点击开启映射服务。到这里内网穿透就完成了。

确保以上操作都已顺利完成,你可以开始使用树莓派的远程监控服务了。
在这里插入图片描述
这里的图像是倒的是因为我摄像头就是倒过来的,各位看客不用担心自己需要倒立去看o(╯□╰)o

方法2: (技术流看这里↓↓↓)
直接看我之前的博客 内网穿透 - SSH反向代理 ,有不懂的可以给我留言。

三、树莓派端口代理转发

首先声明,这里的介绍我就不像前面那样写的详细了,重点在于Nginx的配置。

如果你之前按我的教程 内网穿透 - SSH反向代理 配置内网穿透,而不是使用花生壳,那么你不会面临我下面描述的问题,但你仍然需要对Nginx进行配置,这是很有必要的。

这里解释一下为什么会需要对Nginx进行配置:在我的树莓派上还运行了很多端口服务,如Tomcat,Pyserver,MJPG-Streamer,甚至Nginx本身也占用端口,但是如果我们像前面步骤使用了花生壳免费穿透服务,外网访问端口固定为80端口,内网映射端口也设置为80,但此时内网中有端口号为8080的MPG-Streamer服务不能被外网访问,因为它没有被映射到外网,与此同时其他端口服务也是不能被访问的。这里我们可以利用Nginx对所有的端口服务进行一个代理转发。
重点是利用Nginx的proxy_pass变量参数:

            proxy_pass http://localhost:8080/;  # Nginx代理转发请求到 MJPG-Streamer 服务端的8080端口

在树莓派上安装Nginx,修改nginx.conf如下部分:

    #设定虚拟主机配置
    server {
        #侦听80端口
        listen    80;

        # 主机域名   
        server_name  xkxzw.iask.in localhost;
        #定义服务器的默认网站根目录位置
        root /var/www/html/;
        #定义首页索引文件的名称
        index index.php index.html index.htm;
        #设定本虚拟主机的访问日志
        # access_log  logs/nginx.access.log  main;

        #默认请求
        location / {
       	    # 代理转发请求到Nginx,我这里设置和内网
            proxy_pass http://localhost:80/;
            #定义首页索引文件的名称
            index index.php index.html index.htm;
        }
        location ^~ /camera/ {
           # 代理转发请求到 MJPG-Streamer 服务端,这里是重点
            proxy_pass http://localhost:8080/;
            root   /home/pi/mjpg-streamer-master/mjpg-streamer-experimental/www/;
            index  index.html index.htm;
        }
        #设定查看Nginx状态的地址
        location /NginxStatus {
                stub_status            on;
                access_log              on;
                auth_basic              "NginxStatus";
                auth_basic_user_file  /etc/nginx/htpasswd;
        }
        # 定义错误提示页面
        error_page   500 502 503 504 /50x.html;
        	location = /50x.html {
        }

在配置nginx过程中踩了很多坑,大部分都可以参考 Nginx常见错误及处理方法

猜你喜欢

转载自blog.csdn.net/u011865919/article/details/84486914