Pipe 通过 Frp 暴露公网,并开启 https

本贴最后更新于 618 天前,其中的信息可能已经事过景迁

前言

因为家里移动宽带,所以之前 pipe 一直在内网玩,公司通过 zerotier 组网远程访问,后来有时候要将文章分享给朋友,就各种麻烦,想想还是弄一下其他的穿透吧,这里就分享下我的 frp 穿透方案。

博客地址:

https://blog.itfun.top

大体思路

http 方式的话,还是蛮简单的,直接 frp 穿透 pipe 的运行端口就可以了。不过有一个问题,就是外网访问我们博客的时候,后面得加上/blogs/你的账号,要取消这个后缀的话,你得使用 nginx 反代一下,并且得设置一下 rewrite。

https 方式,得通过 nginx 部署证书,其他操作跟 http 差不多。

Frp

很早之前用过,不过速度感人,个人买一台 10M 带宽左右的 vps,不算便宜,所以一直作罢,直到最近发现 starryFrp 居然有免费的 8M 的香港云主机,而且速度还可以!!那还等什么,直接开搞!

StarryFrp 星空内网穿透的官网:https://frp.starryfrp.com/

先注册一下,并实名认证,认证需要 2 块钱,之后就可以免费创建 10 条隧道。它的流量是可以通过每日签到来免费获取的,一般签到一次能给个几 G 的流量,日常用用也够了。(后面写个签到脚本,自动签到 😄 )

进去之后,我们看一下节点:

图片.png

非 vip 只能使用普通节点,不同的节点有不同的限制,大陆的节点有些不允许建站,有些建站需要备案。所以我直接用的香港节点,这样随便申请个域名就行,不用备案。

这里看下香港节点的域名:

图片.png

记录下来,hk-01.starryfrp.com 一会域名解析那边要用。

ping 一下,看延迟还是不错的~都是 100ms 以下

图片.png

域名

我在腾讯云随便申请了一个域名,itfun.top 第一年不到 10 块钱,个人建议在腾讯云或者阿里云申请域名,因为他们有送免费的 ssl 证书,我们后面搞 https 需要用到。

申请好之后,去设置一下解析(登陆腾讯云后,搜索 dns 可以进去):

图片.png

比如我就新增了 4 条,记录值填的都是上面 starryfrp 选择的节点的域名。也就是说到时候访问 nas.itfun.top 会解析到 starryfrp 提供的节点上。这个主机记录值是随便你填写的,不必跟我写的一样,我上面新增的 4 条是因为我要设置 4 个网站:

nas.itfun.top # nas 管理

media.iftun.top #影视播放

blog.itfun.top #博客

v.itfun.top #在线影视

后面我们要加新网站的话,在这边新增记录就行。

部署 Pipe

docker run -d --name pipe \
-p 5897:5897 \
b3log/pipe \
'--mysql=数据库用户名:数据库密码@(mysql地址:mysql端口)/pipe?charset=utf8mb4&parseTime=True&loc=Local' \
--runtime_mode=prod \
--port=5897 \
--server=https://blog.itfun.top

我是使用 mysql 方式的,所以前提是你已经启动了 mysql。然后你要提前创建好 pipe 的库并且创建一个拥有权限的账号。这个 mysql 账号,必须拥有 create、index、select、insert、update、delete 权限。

启动之后,使用 docker logs pipe 看下日志,看看有没有报错,没有的话就 ok

我们这里的话让 pipe 运行在 5897 端口,并通过 docker 暴露出来,宿主机上也是 5897 端口。

Nginx

你可以通过 docker 单独启一个 nginx,或者通过宝塔启动,我是已经部署了宝塔,所以直接用的宝塔的 nginx。

进入宝塔,新建一个网站:

图片.png

域名其实可以随便取,你自己知道就行。

先来配置 ssl:

图片.png

key 和 pem 怎么获取?

在域名服务商(我的是腾讯云)直接下载就好了

图片.png

然后我们修改下 nginx 监听的端口:

主要是修改 ssl 的端口,注意这里跟 pipe 的端口没有任何关系,因为我们接下来马上要设置反代,随便填写一个未占用的端口即可(如果你的宝塔是使用 docker 部署的,并且没有使用 host 网络模式的,你要特别注意你使用的端口是否在创建宝塔的时候已经提前暴露了,不然的话你是无法访问的)

设置伪静态:

rewrite ^/(?!theme|console|admin|api|init) /blogs/luofeng0603$uri break;

图片.png

这个是用来消灭访问博客后面还要带/blogs/用户名这个问题的。

最后配置下反代:

我们的目标是 pipe 的真实地址

这样 nginx 就设置完了。

创建隧道

去 starryFrp 中创建隧道:

图片.png

注意,自定义端口用的是 我们在上面 nginx 中设置的 ssl 端口 8801

然后下载 frp 客户端:

图片.png

根据自己的机器下载就行,我是部署在 nas 上的,所以下的 linux 的。

上传到服务器,解压后如下:

root@luofengNas:/volume1/nas/frpc_linux_amd64# ls
@eaDir  frpc  frpc.ini  nohup.out  start-frpc.sh  systemd

star-frpc.sh 就是启动文件,但是默认有问题,我们删除重新编写一下:

#!/bin/bash
nohup ./frpc -c frpc.ini &

赋予一下可执行权限:

chmod +x start-frpc.sh

获取 frp 客户端配置文件

图片.png

我们将它复制到 上一步 frp 文件夹中的 frpc.ini(先清空,再粘贴)

然后 使用 ./start-frpc.sh 启动 frp,使用 tail -f nohup.out 看一下日志:

出现类似这种信息就 ok 了:

图片.png

见证奇迹

图片.png

完全没有问题!

最后

还有一点不完美的地方,此时如果我们访问 http://blog.itfun.top 是访问不到的,因为我只设置了 https 的隧道,要解决也很简单,新增一条 http 的隧道就行了,端口使用 8801,注意,这里还是用 nginx 中设置的 https 端口,更新配置,重启 frp 即可。

这样访问 http://blog.itfun.top 也会直接变成 https://blog.itfun.top 跟开启了强制 https 的效果一样哈~!

  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    132 引用 • 1114 回帖 • 126 关注
  • HTTPS
    99 引用 • 274 回帖 • 3 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 419 关注
  • 反代
    2 引用 • 3 回帖
1 操作
luofeng0603 在 2023-04-13 10:54:00 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...