使用自己的vps内网穿透
我采用的方案就是,搭建frp服务器来内网穿透。但是还有一个配置https的问题没有解决,真是苦恼死我了,求大佬指点指点 这个 502咋解决哇!!!
任务进度
穿透对象 ——我的树莓派
- 我的世界这类tcp服务内网穿透
- ssh
- Nginx 反向代理(实现默认80端口访问)
- Nginx 配置https -----失败 ,一直502不知道咋办😭😭😭
Nginx配置https 已经完成了 更多请看下一篇
我的资源
-
一块不能食用的树莓派4b 4g版本
系统: Kevin大佬的 Debian10 宝塔镜像
-
服务器 : 阿里云香港轻量级服务器(宝塔镜像)
系统:centos7
目前安装了 halo 博客系统 和
frp
安装 frp
参考视频 : up 老明视频- DIY架设内网穿透教学
参考文章:CentOS7搭建Frp 实现访问部署于内网的 web 服务 ssh访问内网机器 文件访问服务
frp官方项目地址:https://github.com/fatedier/frp
下载对应的版本
后面的操作都需要权限,我们就切换到root用户,树莓派输入 sudo -i
树莓派安装 arm版本的,服务器上就安装 amd64就好啦
卸载好了解压,移动到 /usr/local
服务端
tar -xvf frp_0.34.3_linux_amd64.tar.gz
mkdir /usr/local/frp
mv frp_0.34.3_linux_amd64/* /usr/local/frp/
树莓派
tar -xvf frp_0.34.3_linux_arm64.tar.gz
mkdir /usr/local/frp
mv frp_0.34.3_linux_arm64/* /usr/local/frp/
配置systemctl
,设置开机自启之类的
服务端
新建文件 vim /usr/lib/systemd/system/frp.service
,下面是配置信息
[Unit]
Description=Frp Server Service
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit
[Install]
WantedBy=multi-user.target
编辑完保存,
重载配置文件!
systemctl daemon-reload
随后我们就设置开机自启之类的了
systemctl start frp # 启动
systemctl stop frp # 停止
systemctl restart frp # 重启
systemctl status frp # 查看状态
systemctl enable frp # 设置开机自启
systemctl disable frp # 取消开机自启
客户端
和服务端差不多,只不过位置有点不一样
vim /usr/lib/systemd/system/frp.service
将frps改成frpc
[Unit]
Description=Frp Client Service
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit
[Install]
WantedBy=multi-user.target
之后和客户端一样的操作就可以啦!
frp的配置文件
配置文件有两个frps.ini frpc.ini 分别对应着 客户端和服务端
我只需要对应修改就好了!
服务端
编辑配置文件 vim /usr/local/frp/frps.ini
[common]
# 设定的frp服务端端口,可以自己设置,不要忘了防火墙
bind_port = xxxx
# 自己设定的http访问端口
vhost_http_port = xxxx
# 可以放任何token,这是预防别人蹭你的frp
token = *******
# ssh反向代理
[ssh]
# 设定的ssh访问端口
listen_port = xxxx
客户端
编辑配置文件 vim /usr/local/frp/frpc.ini
[common]
#服务器IP地址
server_addr = xxxxx
#服务器端口,必须和frps.ini里的bind_port一样
server_port = xxxx
#必须和frps.ini一样
token = ******
# []的名字随意
[tcp]
#有tcp,udp,http,https
type = tcp
#本地IP
local_ip = 127.0.0.1
#本地服务端口
local_port = 25565
#服务端远程端口 注意要放行
remote_port = 25565
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 服务端代理的 ssh端口 ,自己随意设置就好了注意要放行
remote_port = xxxx
[web1]
type = http
local_ip = 127.0.0.1
local_port = xxxx
# 服务端代理的 web端口 ,
remote_port = xxxx
# 和设置的服务端一样的域名
custom_domains = xxxxxx
[web2]
# 和上面的一样
后续补充
现在最新的frp,其实再配置http,可以无需配置[web1],[web2],之类的,主要是配置 vhost_http_port = xxxx,就可以了,配置域名或者https的话,配和nginx就好了!详细可以看后面一篇博客。
当然需要穿透tcp协议的需要客户端服务端都设置(服务端设置远程端口,客户端配置本地信息),和上面的一样。
值得注意点
- 防火墙 端口放行
保存完了 我们在服务器和客户端都启动frp ,网页的话需要 你的域名:vhost_http_port
才能访问
nginx反向代理frp 实现共用80端口
我的服务器本来就有web服务了,所以不能直接再次使用80端口了,每次访问树莓派上的网页还需要输入端口,非常麻烦,我们需要nginx反向代理一下。
我的想法是:用于用户访问nginx后,nginx 再转发请求给这个端口;达到省略后面端口的效果
这里我们要改一下 客户端的设置,将[web]的远程端口设置成
remote_port =80
然后给Nginx配置
#http配置
server{
listen 80;
server_name *.example.com;
location / {
//服务器的ip和vhost_http_port端口 http://[ip]:[vhost_http_port]
proxy_pass http://your_ip:xxxx;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header X-Powered-By;
}
access_log off;
}
现在你就可成功访问啦!
只不过,我https的问题还没解决一直出现502不知道啥原因!!
问题已解决
出现502的原因就是Nginx无需转发本地服务的端口,只需要转发frp
vhost_http_port 即可。详细可以看下一篇文章
结语
放假咸鱼的第25天