树莓派frp下Nginx反向代理实现https协议
何为frp?
我们的家里,宿舍通常是没有公网ip的,没有公网ip就相当于在互联网中没有门牌号,其他人不知道你的树莓派在那,那么就无法访问到树莓派上的服务啦。
如何解决呢?其实我们需要一个有公网ip第三方,当做一个桥梁,通过这个桥梁就可以从外网访问到你的树莓派了!
这个第三方可以是:花生壳,哲西云等等这样的内网穿透提供商!当然价格也不便宜。当然如果我们手上有一个vps,那么我们可以采用自己搭建内网穿透服务,我们可以采用开源项目 frp和NPS,当然我就介绍frp啦!
frp官方文档: https://gofrp.org/docs/
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
安装frp和配置开机自启我就不多说了,可以参考我的上一篇文章。
我简单介绍一下,准备的材料,简单的原理。
准备的材料
-
可以使用80,443端口的服务器 我这里采用的是阿里云轻量级服务器(香港,24元一个月),这里我强调一点的是:大陆地区由于一些不可抗拒的原因,使用80和443端口需要备案,非大陆地区就不用了,当然你有备案的大陆地区服务器是没问题的,大陆地区的服务器学生套餐一年购买可便宜了,我这边有一些原因导致我无法备案,所以无奈只能用这个了。备案算是有点麻烦的吧。
-
一个域名,买一个top或者其他域名不是很贵,我20块钱买了2年的,注意买域名的时候一定要名字起好,有buff加成。这里我采用的是我这个
yingwiki.top
域名下的二级域名blog.yingwiki.top
。这个域名需要解析到vps -
frp 客户端和服务端 ,树莓派是arm架构,而服务器是amd64的所以下载的使用一定要注意
-
证书,我这里采用的我这里用的是Let’s Encrypt,毕竟免费,当然每3个月需要续签一次,我们可以安装certbot-auto来解决,安装这个的教程我就不写到这里,太多了。
-
足够的耐心和细心
补充
简单原理
http的默认端口是80,https的默认端口是443,所以我们日常在访问网站的时候都无需要加端口号,就想访问谷歌 www.google.com
的时候没有这样访问吧,www.google.com:80
。这里就有一个问题,服务器只有一个80,443端口,但是我一台服务器如何部署多个网页呢?其实可以将网页部署到别的没有使用的端口,例如8080,这样就可以你的域名:8080
访问了但是多一个端口号非常不舒服。所以我们这里需要Nginx反向代理以下,将在我们访问80端口时,Nginx会根据我们访问的域名,接到不同端口中去!
我目前的服务器已经安装了一个web服务器了也就是我的博客,那么我如果想让树莓派上的web服务被互联网访问到,可以采取通过部署frps的服务器内网穿透,这样frp就想一个桥,我们可以通过frp访问树莓派上的web服务了,但是80,443已经被我用了,所以需要Nginx反向代理一下,服务器上的web服务和frp共用一个80,443端口。
前面睡了那么多废话,如果你是个大佬的话,一句话解释就好了,用户访问nginx 80/443端口,nginx再去访问带非通用默认端口的frp地址返回给用户
安装
这里我就不多介绍了,我上一篇已经写过了,大家只需要看到,配置systemctl
,设置开机自启之类的这里就足够了
配置开机自启的时候树莓派要root权限,所以先sudo -i
,服务器直接用root用户就好了。
配置
frps 代表服务端,frp代表客户端
-
首先,我们要放开配置一下防火墙,由于我树莓派安装的是宝塔系统,所以配置起来异常方便
我们肯需要准备一下几个端口
自定义端口 要在0-65535之间 注意要避开常用的80,443等端口,建议自定义到1w以上!
服务端
-
80和443
-
frps服务的端口 ,这里我们可以采用开放 ,端口7000(注意,这个端口最好自定义一下,防止别人蹭网)
-
frps配置http端口 这里采用8080
-
frp的web管理页面的端口 7505 (注意,这个可以不要,为了安全端口也需要自定义)
-
客户端
- 本地的web服务端口 8080
- 配置frp服务端配置文件
vi /usr/local/frp/frps.ini
[common]
# 设定的frp服务端端口
bind_port = 7000
#服务端看板的访问端口
dashboard_port=7505
#服务端看板账户
dashboard_user=xxx
#服务端看板账户密码
dashboard_pwd= ******
#自己设定的http访问端口
vhost_http_port = 8080
# 客服端最大连接数
max_pool_count=5
# 放和bind_port一样,用来减低延迟,不过额外消耗10%~20%流量 降低 tcp的延迟
#kcp_bind_port = 7000
配置完毕启动
systemctl start frp
查看运行情况:
systemctl status frp
,按下q退出,如下情况安装成功
-
配置客户端配置文件(树莓派这边)
vi /usr/local/frp/frpc.ini
[common] #服务器IP地址 server_addr = x.x.x.x #服务器端口,必须和frps.ini里的bind_port一样 server_port = 7000 #凭证token必须和frps.ini一样, privilege_token = ***** # web这个就是名字而已可以随意设置 [web] type = http local_ip = 127.0.0.1 # Nginx的端口 remote_port = 80 # 树莓派上的web端口 local_port = 8080 #自己的域名 custom_domains = blog.yingwiki.top
配置完毕启动
systemctl start frp
查看运行情况:
systemctl status frp
,按下q退出,如下情况安装成功到这一步,你可以浏览器输入
你的域名:端口号
访问你的博客服务了 -
配置Nginx
这个证书我就不说了
#重新定向到https server { listen 80; #自己的域名 server_name blog.yingwiki.top; rewrite ^(.*) https://$server_name$1 permanent; } #https 服务 server { listen 443 ssl; #证书位置 ssl_certificate /usr/local/zs/fullchain.pem; ssl_certificate_key /usr/local/zs/private.pem; #自己的域名 server_name blog.yingwiki.top; location / { # 你的frp定义http端口和域名 proxy_pass http://blog.yingwiki.top:8080; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_max_temp_file_size 0; proxy_redirect off; proxy_read_timeout 240s; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
配置完重载配置。
-
测试,收工
结语
其实这个我前天配置https的时候一直502,结果其实发现我们完全不需要配置到frp配置https,多此一举,可以直接Nginx配置https
放假咸鱼的第26天