使用自己的vps内网穿透

我采用的方案就是,搭建frp服务器来内网穿透。但是还有一个配置https的问题没有解决,真是苦恼死我了,求大佬指点指点 这个 502咋解决哇!!!

任务进度

穿透对象 ——我的树莓派

  •  我的世界这类tcp服务内网穿透
  •  ssh
  •  Nginx 反向代理(实现默认80端口访问)
  •  Nginx 配置https -----失败 ,一直502不知道咋办😭😭😭

Nginx配置https 已经完成了 更多请看下一篇

我的资源

  1. 一块不能食用的树莓派4b 4g版本

    系统: Kevin大佬的 Debian10 宝塔镜像

  2. 服务器 : 阿里云香港轻量级服务器(宝塔镜像)

    系统:centos7

    目前安装了 halo 博客系统 和 frp

安装 frp

参考视频 : up 老明视频- DIY架设内网穿透教学

参考文章:CentOS7搭建Frp 实现访问部署于内网的 web 服务 ssh访问内网机器 文件访问服务

frp官方项目地址:https://github.com/fatedier/frp

下载对应的版本

后面的操作都需要权限,我们就切换到root用户,树莓派输入 sudo -i

树莓派安装 arm版本的,服务器上就安装 amd64就好啦

image-20210117224943762

卸载好了解压,移动到 /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协议的需要客户端服务端都设置(服务端设置远程端口,客户端配置本地信息),和上面的一样。

值得注意点

  1. 防火墙 端口放行

保存完了 我们在服务器和客户端都启动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;
  }

现在你就可成功访问啦!

image-20210117234741175

只不过,我https的问题还没解决一直出现502不知道啥原因!!

问题已解决

出现502的原因就是Nginx无需转发本地服务的端口,只需要转发frp
vhost_http_port 即可。详细可以看下一篇文章

结语

放假咸鱼的第25天
微信小程序

努力成长的程序员