0%

借用 frp 来访问内网的 web 服务

前言

上一节已经可以外网访问家里的树莓派,这次继续搭建 web 服务。

步骤

  1. web 服务 (http://公网 IP:8080/water?count=10)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # server.py
    from flask import Flask, jsonify
    from flask import request

    app = Flask(__name__)

    @app.route('/', methods=['GET'])
    def home():
    return "<h1>Home</h1>"

    @app.route('/water')
    def water():
    count = request.args.get('count', '0')
    return jsonify({'count': count})

    if __name__ == '__main__':
    app.run()

    返回结果

    1
    2
    3
    {
    "count": "10"
    }
  2. frp 服务端

    修改 frps.ini, 设置 http 访问端口为 8080

    1
    2
    3
    4
    # frps.ini
    [common]
    bind_port = 7000 //与 frpc.ini 中一致
    vhost_http_port = 8080

    启动 frps

    1
    ./frps -c ./frps.ini
  3. frp 客户端

    修改 frpc.ini, local_port 为本地 web 服务的端口,自定义域名 www.yourdomain.com

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # frpc.ini
    [common]
    server_addr = 公网 IP
    server_port = 7000 //与 frps.ini 中一致

    [web]
    type = http
    local_port = 5000 //python 服务的端口
    custom_domains = www.yourdomain.com //或者 公网 IP

    启动 frpc

    1
    ./frpc -c ./frpc.ini
  4. www.yourdomain.com 的域名 A 记录解析到 公网 IP,如果服务器已经有对应的域名,也可以将 CNAME 记录解析到服务器原先的域名

  5. 浏览器访问 http://www.yourdomain.com:8080 或者 公网 IP:8080