Cloudflare Tunnel 和 Nginx Proxy Manager 的完美配合

转载自Cloudflare Tunnel 和 NPM 的完美配合 简介 今天要说就是通过 cloudflare tunnel 和 nginx proxy manager 的配合,实现新部署的程序,只需要在 npm 配置反向代理就可以访问。 之前一直懒得用 npm,感觉这玩意能做的太简单了,很多配置还

转载自Cloudflare Tunnel 和 NPM 的完美配合

简介

今天要说就是通过 cloudflare tunnel 和 nginx proxy manager 的配合,实现新部署的程序,只需要在 npm 配置反向代理就可以访问。

之前一直懒得用 npm,感觉这玩意能做的太简单了,很多配置还得自己手动修改配置文件去加。但是现在发现如果只是简单使用的话,还是挺香的。

而这个实现的关键就是 cloudflare tunnel 能够进行通配符路由到 npm,然后 npm 通过对应域名反向代理到不同的后端。然而界面创建的隧道并不支持通配符,因为按如图所示创建的话,会提示不会创建 dns 记录,意思就是不会生效。

20240316143915.png

后来想着,如果不能界面配置,那我使用本地配置文件好了,这样至少新增记录的时候方便一点。更有意思的是,在一点点摸索过程中,发现本地创建隧道的方式居然支持通配符方式,那这就很完美了!

前期准备

目前探索到的一种方式是,需要使用命令行进行登录,并创建隧道等方式。因为暂时没有找到其他的方式,所以只能先按这种进行操作。

1. 登录授权

docker run --rm -u root -v /home/docker/cloudflared:/root/.cloudflared cloudflare/cloudflared tunnel login

输入命令后提示打开如下 url,浏览器打开登录即可。

20240316144758.png

登录后会进入如下界面,随便点击一个域名进行授权。

20240316144856.png

点击授权即可。

20240316144941.png

授权以后,证书就下载完成了。

20240316145023.png

到这里,第一步就完成了。

2. 创建隧道

本地配置管理的隧道和界面管理不通用,所以需要使用命令进行创建隧道,而不能使用管理界面创建的隧道。

docker run --rm -u root -v /home/docker/cloudflared:/root/.cloudflared cloudflare/cloudflared tunnel create test

test 为创建的隧道名称,这里随意即可。执行命令后会在本地生成一个以隧道 id 命名的 json 文件。

20240316145420.png

3. 创建配置文件

在 /home/docker/cloudflared 目录下创建 config.yaml 文件,部分内容需要替换为自己的配置。

tunnel: <tunnel-id>
credentials-file: /root/.cloudflared/<tunnel-id>.json
protocol: http2
ingress:
  - hostname: "*.domain.xyz"
    service: http://localhost:80
  - service: http_status:404
  • 替换为上一步创建的隧道的 id
  • *.domain.xyz 替换为自己的域名,注意通配符需要加上

这里将所有的流量都转发到 80 端口。

4. 创建路由

运行命令之前需要保证之前没有创建过通配符的 dns 记录。

docker run --rm -u root -v /home/docker/cloudflared:/root/.cloudflared cloudflare/cloudflared tunnel route dns test "*.domain.xyz"
  • test 替换为自己的隧道名
  • *.domain.xyz 替换为自己的域名,注意通配符需要加上

运行命令不报错,并且 dns 记录新增了一条通配符的记录就可以了。

20240316153034.png

运行

这里使用 docker-compose 运行了,如果想直接 docker run,使用 gpt 转换一下即可。

version: '3'
services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm
    restart: unless-stopped
    network_mode: host
    volumes:
      - /home/docker/npm/data:/data
      - /home/docker/npm/letsencrypt:/etc/letsencrypt
  tunnel:
    container_name: tunnel
    image: cloudflare/cloudflared
    user: root
    volumes:
      - /home/docker/cloudflared:/root/.cloudflared
    restart: always
    network_mode: host
    command: tunnel run test

需要注意的是,command 这里需要替换为自己的隧道名。

npm 的安装似乎需要一段时间,安装好以后打开 81 端口。

邮箱和密码:

Email: [email protected]
Password: changeme

登陆后会强制修改邮箱和密码。

然后点击 Proxy Hosts 进行新增反向代理。

20240316151635.png

新增一条反向代理配置到 npm 的管理界面试试。

20240316154455.png

测试应该可以通过配置的域名进行访问 npm。

方便的是,以后如果部署了其他的程序,只需要在 npm 管理界面添加反向代理即可。

LICENSED UNDER CC BY-NC-SA 4.0
Comment