0. 前言

由于种种原因,希望可以通过外网访问自己的笔记本电脑搭建的Web服务,而这正是内网穿透所做的事情,hhh,自己之前找了关于Nginx实现反向代理的教程,发现呼呼扯一堆不是自己想要的,于是又找,终于找到了一篇写的比较详细完整的教程:windows下基于frp的内网穿透部署 - 知乎和理想中的工具:frp

1. 原理

1.1 frp简介

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

1.2 需求及原理

反向代理示意图

2. 搭建流程

2.1 下载运行程序

Releases · fatedier/frp界面分别下载对应架构的服务端程序和客户端程序,以我的为例:

下载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访问内网服务

我自己的配置是:

frpc客户端配置

2.3.2 启动frpc

./frpc -c ./frpc.ini

以我自己的为例,则是:

 ./frpc.exe -c ./frpc.ini

如下图:

Windows客户端启动frpc

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)

注意: 服务端口一定要对应的上

本地与外网访问结果如下图:

本地测试Web服务

外网访问本地服务

4. 参考

  1. windows下基于frp的内网穿透部署 - 知乎
  2. frp/README_zh.md at master · fatedier/frp

评论




博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Volantis 作为主题,总访问量为
载入天数...载入时分秒...
冀ICP备20001334号