一文教会:内网穿透建站
技术 26

Github Pages,CloudFlare Pages太慢?

云服务器太贵?配置太差?带宽小水管?

厌倦了Hexo等静态博客,想搭个高大上的动态网站?

不用担心!本文教你使用sakura frp(其他类似的内网穿透服务同理)来搭建动态网站!整个过程完全免费!

环境搭建

硬件

  • HP Z240 Workstation
    • ChipSet:C236
    • CPU:E3-1255v6@3.30GHz 4C4T
    • RAM:16GB DDR4 2133MHz
    • Storage:128GB NVMe SSD + 500GB HDD * 2(RAID1) + 128GB SATA SSD

PS:当然,用自己的电脑+IIS也可以XD

软件

  • OS:fnOS@latest
  • 虚拟化平台:fnOS自带QEMU虚拟机
  • VMOS:Ubuntu 25.04
  • FRP服务:sakura-frp(免费两条隧道,10Mbps带宽,可建站,签到送流量)

注意:有些FRP服务是不能建站的,像我之前买的9.9r 1年的FRP服务就焊死了端口号,这种没有80/443端口的也可以开web服务,但是基本只能自己用

安装服务器面板

推荐安装1Panel - 现代化、开源的Linux服务器运维管理面板无论是从UI设计还是功能上我感觉都要比一股中年老登味的宝塔面板要好

创建好虚拟机之后,直接复制官网的一键安装脚本

image-20251001225224810

全部使用默认配置安装,装好之后,按照信息登录对应网址就能看到1panel的管理界面了~

[1Panel Log]: =================感谢您的耐心等待,安装已完成==================
[1Panel Log]:
[1Panel Log]: 请使用您的浏览器访问面板:
[1Panel Log]: 外部地址:  http://xxxxx:37948/xxxxx
[1Panel Log]: 内部地址:  http://192.168.31.99:37948/xxxxxx
[1Panel Log]: 面板用户:  xxxxxx
[1Panel Log]: 面板密码:  xxxxxx
[1Panel Log]:
[1Panel Log]: 官方网站: https://1panel.cn
[1Panel Log]: 项目文档: https://1panel.cn/docs
[1Panel Log]: 代码仓库: https://github.com/1Panel-dev/1Panel
[1Panel Log]: 前往 1Panel 官方论坛获取帮助: https://bbs.fit2cloud.com/c/1p/7
[1Panel Log]:
[1Panel Log]: 如果您使用的是云服务器,请在安全组中打开端口 37948
[1Panel Log]:
[1Panel Log]: 为了您的服务器安全,离开此屏幕后您将无法再次看到您的密码,请记住您的密码。
[1Panel Log]:
[1Panel Log]: ================================================================

image-20251001225509335

安装sakura-frp启动器

注册sakura-frp账号:Sakura Frp | 樱花内网穿透 — 免费内网穿透_免费端口映射_高速_高防节点_不限流量_Minecraft我的世界_微信开发调试_群辉NAS_无需公网_免备案

进入后台管理页面

image-20251001225733655

选择Linux,复制安装脚本并安装(直接在1panel里面的终端复制粘贴执行就行,当然SSH也可以)

image-20251001225819560

安装完成后会打印出frp服务的Web管理地址

以后如何查看Web管理地址呢?

由于安装1panel时会默认安装docker,所以运行完之后1panel的容器页会多一个frp服务的docker容器

image-20251001230355004

点进终端,输入 cat config.json

image-20251001231244345

可以看到是本机的7102端口,端口号下面是WebUI的访问密钥

建立隧道

**注意:**如果要使用自己的域名,那么就必须进行ICP备案并且审核通过(10~20天),域名备案通过之后在sakura-frp后台提交备案号和对应的域名

如果仅用于测试,也可以使用sakura-frp提供的子域

image-20251002164934536

下面以使用我自己的域名test.starsac.cn为例

  • 在管理后台创建HTTP隧道

image-20251002165150817

  • 在服务器上登录Web管理页面,应用创建好的这个隧道(从下面拖上来就可以了)

image-20251002165403559

测试:建立一个简单的静态网页

  1. 安装OpenRusty(高性能的反向代理服务器和Web服务器)

直接在应用商店进行安装,配置全部默认即可

  1. 建立一个静态网站

image-20251002164517387

  1. 首先尝试在本地进行访问

由于此时我们没有配置DNS,所以直接使用域名访问是不行的,先使用本机IP地址访问试试:

image-20251002165623447

出现404NotFound是完全正常的,这说明OpenRusty(Nginx)已经成功对我们的请求做出了回应

  1. 为我们刚才的域名创建解析
  • 如果使用sakura-frp自带的子域:

image-20251002170415636

直接在这里申请一种域名并绑定对应的隧道就可以了

  • 如果使用自己的域名

找到你域名的DNS托管商(我这里是CloudFlare)

在DNS记录中新添加一条CNAME记录,记录值在隧道列表点击节点名称进行查看:

image-20251002170722734

我们刚才设置的网站域名为 test.starsac.cn,这里就要添加主机名为 test,值为 frp-fun.com的CNAME记录,TTL可以自动

添加完成之后等待一会,也可以去ITDOG - 在线ping_在线tcping_网站测速_HTTP测速_API测速_路由追踪_在线MTR_DNS查询_ITDOG-云邦畅想看一下解析记录生效了没有

如果一切顺利,我们此时就可以通过域名访问这个网站了:

image-20251002171046301

注意:

  • 如果等待10分钟以上仍然无法访问且ITDOG查询记录已经生效,请更换浏览器、网络环境或者设备重试
  • 如果为根域(如 starsac.cn)创建CNAME记录,那么通常使用CNAME拉平进行实现,此时无法查询到CNAME信息,可以使用 ping进行测试

进阶:设置反向代理实现一台服务器托管多个Web应用服务

在上面的实践中,我们成功搭建了静态网站并通过域名进行访问。在静态网站的场景下,我们可以通过设置多个域名(sakura-frp中一条HTTP(S)隧道可以最多设置三个域名)不同的静态网站来实现多网站的目的。

但是如果要搭建动态网站,就会出现端口冲突的问题(如果A应用已经占用了80端口,那么此时B应用就只能使用其他端口,如果要访问B应用就必须添加端口号)。

这种情况下,我们可以使用OpenRusty作为反向代理服务器,在80端口上充当门卫,将来自不同域名的请求转发给在不同端口上的Web应用,这样就解决了端口冲突的问题。

接下来我以Halo建站和Gitea代码托管平台为例,在一台服务器上搭建两个动态网站。

安装Halo建站

Halo需要使用数据库,因此我们先安装数据库(这里我安装的MySQL):

一切设置都默认即可。

image-20251002173016453

接下来安装Halo:

数据库服务选择你刚刚安装的数据库,其余配置默认即可。

image-20251002173139583

可以看到halo此时运行在8090端口上,如果你勾选了halo的“允许外部访问”,那么此时你就可以在内网使用IP:8090端口访问到halo的页面了

安装gitea代码托管

配置默认即可,同样使用MySQL数据库

image-20251002173618519

可以看到gitea工作在3000端口上

配置OpenRusty

  1. 记得在DNS服务商和frp后台那里配置好域名和对应的解析,例如:
  • halo: starsac.cn
  • gitea: repo.starsac.cn
  1. 记得删除之前的静态网站

在以前,配置反向代理需要手写Nginx的 config文件,但是现在有了1panel,部署过程变得非常简单了,直接一键部署

image-20251002174210746

gitea同理。

此时访问试试:

image-20251002174410514

image-20251002175920256

可以看到都已经成功访问

进阶:设置全站HTTPS访问,提高安全性

在上一节的网络架构下,我们只需要在反向代理服务器(OpenRusty)上配置证书就可以了,经过反代之后,数据包脱去了加密,可以用HTTP协议与应用进行通信。

1panel提供了acme账户,可以让我们非常方便的申请免费证书,还可以自动续签。

  1. 添加一个DNS账户

由于申请证书时需要添加DNS记录来验证对域名的所有权,所以需要添加一个DNS账户让1panel自动完成这些繁琐的设置

以CloudFlare为例(其他DNS服务商也类似):

image-20251002180749453

image-20251002180916086

创建好之后,复制令牌并创建DNS账户

image-20251002181145692

两个都分别申请一下:

image-20251002181302685

在网站页面,点击配置,为每个网站设置SSL证书

image-20251002181443816

然后在frp后台创建对应的HTTPS隧道,并在WebUI管理页面应用新隧道。

现在就可以使用HTTPS协议安全的访问网站了

image-20251002182539381

image-20251002183609594

如果提示没有可以信任的证书,则说明证书没有成功部署

如果提示有证书但部分不安全,则大概是由于证书缓存的原因,可以清除浏览器历史记录,重启浏览器,换用其它设备等方式重试

一文教会:内网穿透建站
https://starsac.cn/archives/e77af8aa-1a9d-4a0e-b708-9db7de14889c
作者
Administrator
发布于
更新于
许可