0. 前言
由于种种原因,希望可以通过外网访问自己的笔记本电脑搭建的Web服务,而这正是内网穿透所做的事情,hhh,自己之前找了关于Nginx实现反向代理的教程,发现呼呼扯一堆不是自己想要的,于是又找,终于找到了一篇写的比较详细完整的教程:windows下基于frp的内网穿透部署 - 知乎和理想中的工具:frp。
1. 原理
1.1 frp简介
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
1.2 需求及原理
2. 搭建流程
2.1 下载运行程序
在Releases · fatedier/frp界面分别下载对应架构的服务端程序和客户端程序,以我的为例:
其中标红的是需要下载的压缩程序,文件名含linux的是服务端,含windows的是客户端,因为我的腾讯云服务器上装的是Centos7,而我的笔记本则是Windows10系统。
分别将这两个文件放到服务器和笔记本的适当位置(没有要求,自己看着来)
2.2 配置服务端(公网反向代理端)
2.2.1 修改frps.ini
文件
设置 http 访问端口为 8080:
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
2.2.2 启动frps
在程序所在目录运行以下命令:
./frps -c ./frps.ini
当然以上的命令是前台运行的,一退出就挂掉了,所以实际上我们需要后台执行该程序,也就是要运行以下命令:
nohup ./frps -c ./frps.ini > frps.log 2>&1 &
这样frps程序便会在后台运行,并且会将程序输出重定向到frps.log
文件
2.3 配置客户端(内网机,实际访问端)
2.3.1 修改frpc.ini
文件
假设 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 web 服务对应的端口, 绑定自定义域名 www.yourdomain.com
:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
注意:如果没有自定义域名,可以将上面的
custom_domains
字段内容设置为服务器的ip地址,即server_addr
字段的内容,这样也可以直接通过ip访问内网服务
我自己的配置是:
2.3.2 启动frpc
./frpc -c ./frpc.ini
以我自己的为例,则是:
./frpc.exe -c ./frpc.ini
如下图:
3. 测试服务
我们使用Python下的Flask环境搭建一个最简单的Web服务:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(port=8080)
注意: 服务端口一定要对应的上
本地与外网访问结果如下图: