自建frp服务器

动机

来实现内网项目部署到公网上

最近我有把我的hola博客,以及之前写完的项目部署到公网上的想法,于是结合之前玩服务器的经验,最后采取自建frp服务器的方案

我的需求:

  • 性价比高,服务器费用不能太贵
  • 能够部署多个java项目
  • 不需要备案

几种实现方案

一般而言,要部署到公网上必须要一台服务器和一个公网ip,所有也有以下几种实现方案

  1. 将项目打包部署到公网云服务器中

    这种也是最普遍最传统的做法,但是他有几个不够好的缺点:

    • 性价比低,2核2g通常都需要30块钱一个月, 大厂服务器就更不用说了, 没有人那么有精力为了试用经常迁移多个项目
    • 不适合多个java项目,众所周知java项目是很吃内存的

    优点:

    • 性能好用户体验好,因为项目是直接部署到服务器中的,相比于自建frp服务器方案要好
    • 不需要维护多台服务器,项目在哪里就维护哪台服务器
  2. 将项目部署到本地服务器,配合cloudfared做内网穿透

    原理是: 访问者-> cf -> 本地服务器 -> cf -> 访问者

    这种是我最近发现的一种方案,但是也仍然存在不好的点:

    • 国内访问巨慢, cf服务器在美国, 你每次请求都需要绕很大一圈,自己经常访问后速度会改善,但是一旦给别人访问速度巨慢,这也是其最致命的缺点
    • 如果要改善国内访问速度慢的痛点,你需要给cf做优点ip+自定义主机回退源,需要经常配置最佳ip,而且需要两个域名操作,但是只能改善一点仍然解决不了速度慢

    优点:

    • 免费
    • 部署cf tunnel很方便
  3. 使用其他内网穿透工具, 例如樱花frp

    这种方式和cf差不多, 但是具体玩的时候发现不够完美:

    • 不是专门做海外内网穿透的, 针对海外线路, 没有对国内回程优化, 实际体验比cf略好(可以选一个比较近的节点)
    • 付费节点虽然不贵但是我既然付费了为什么不自己搭建一台frp服务器内?
  4. 自建frp服务器

    优点:

    • 性价比高, 2h2g就可以满足, 重要的是网速带宽, 中转不吃cpu内存, 吃带宽. 这样成本低
    • 本地服务器可以运行多个java项目, 中转服务器只需要反向代理即可
    • 选一个海外服务器就无需备案

    缺点:

    • 维护可能比较麻烦一点, 本地服务器和中转服务器都需要去维护

核心流程-实现自建frp服务器完成内网穿透

我当前的环境: windows本地服务器 + 香港云服务器

自建前的准备: 一台香港服务器(选物理距离近的), frps和frpc

  1. 购买了一台性价比高的香港服务器后, 给他装1panel, 通过1panel安装frps(frp服务端),
  2. 本地服务器使用frpc, 配置及其简单, 看官方实例就能完成基本配置
  3. 购买一个域名, 配置好解析, 安装openresty来实现反向代理&安装证书

frps

1panel安装frps, 要记得打开防火墙, docker端口暴露

注意:

  • 默认端口是7000,改高一些,不然无法链接客户端

frpc

修改toml文件配置好auth.token="xxxx"

反向代理

这里需要一些域名解析的只是

泛解析: *.aaa.com

A解析: 指向ip地址

子域名解析: bbb.aaa.com

主域名也解析到这台香港云服务器ip

每个子域名指向一个java项目, 每个子域名都是解析到这台香港云服务器ip

这里的原理,就是子域名和主域名都解析到同一个ip地址, nginx会根据域名区分并且反向代理到服务端口

公网用户 → 域名(子域名) → 香港云服务器
  ↓
香港服务器:OpenResty(反向代理) → FRP服务端(frps)
  ↓
FRP加密隧道 → 本地Windows:FRP客户端(frpc) → 多个Java项目
  1. frpc配置了proxy, 代理中会告诉服务端, 本地服务地址端口以及映射到服务端的端口是哪一个(一般设置为本地端口一样)
  2. 然后 子域名也解析同一个ip, 但是子域名不同, nginx会代理到服务器上的对应端口, 然后frp服务端会监听这个端口, frp再中转回本地服务器
  3. 例如:

主域名是blog-sky.asia, 子域名也是解析同一个ip地址, 这样就是实现了根据域名做反向代理(从cf部署tunnel中学习到的)

微服务 2026-04-05