[奇淫技巧]在cloudflare上运行nginx替代分流,超高性能,完全无本地负载
← 返回列表

当前位置: 作者:kanshan · 2026-04-20 15:13:40

#1 kanshan · 2026-04-20 15:13:40
stalltrix
众所周知,现在很多建站都在最外层套一个反代来分流,不是nginx/openresty就是caddy之类。反代直接承载证书renew,路径服务分流。内部服务就可以简单配置一些

但是承载反代的网关的负载往往是最重的,所有流量都会经过这个反代网关。反代网关一旦挂了。后端所有服务都运行不了。流量一大反代网关还吃性能。

很多经典云服务厂商,都推出一个付费的,名称类似“网关”服务。本质上就是这个。很准需求推出付费而已





不过现在很多建站的,都会配合cloudflare使用。那么能不能直接把cloudflare当nginx来配置替代呢。这样直接在云端运行网关,无限性能,几乎不会宕机报502


我研究了一下,其实可以,cloudflare这个功能已经很久了。cloudflare很早就免费开放了他们的Origin Rules。虽然只给出修改端口功能,而其他功能需要付费。但是着也足够了、下面的这种是免费套餐也可以使用。

这种配置如下:

设置两个变量,hostname与path同时设置,防止错误匹配。

> 比如服务 /app 反代到后端 docker1,/index反代到后端 docker2

以前可能是nginx监听0.0.0.0:443,而反代127.0.0.1:8001(docker1),127.0.0.1:8002(docker2)

现在我们直接让cloudflare承担这个功能。

cloudflare已经监听0.0.0.0:443了。并且配置好ssl证书了,那么我们就只用配置分流就行了。

分流倒是简单,像这种配置就行。












如何安全的与cloudflare提供的"nginx"通信呢,本地直接使用127.0.0.1地址,外人也看不到。但是cloudfalre的"nginx"跑在云端,必须监听公网,因此如何安全的与反代网关通信是重点




为了与cloudflare安全通信,其实有两个办法cloudflared官方隧道与源证书+iptables白名单

1.使用cf源证书+iptables白名单



cf有一个客户端源证书,在ssl栏里面,获取这个源证书导入客户端有15年有效期。实现本地与cf云端的安全通信,如果需要,建议也打开双向验证。同时验证客户端证书与服务器请求



此外,建议设置一个iptanles规则,阻止其他访问我们的服务端口

比如从cf官网获取ip https://www.cloudflare.com/zh-cn/ips ,然后加入iptables列表中

下面我的写了一个脚本,可以快速实现这个操作
```bash
#!/bin/bash

echo "input_port:"
read user_input

echo "port= $user_input"
#ipv6
ip6tables -A INPUT -p tcp -s 2400:cb00::/32 --dport $user_input -j ACCEPT
ip6tables -A INPUT -p tcp -s 2606:4700::/32 --dport $user_input -j ACCEPT
ip6tables -A INPUT -p tcp -s 2803:f800::/32 --dport $user_input -j ACCEPT
ip6tables -A INPUT -p tcp -s 2405:b500::/32 --dport $user_input -j ACCEPT
ip6tables -A INPUT -p tcp -s 2405:8100::/32 --dport $user_input -j ACCEPT
ip6tables -A INPUT -p tcp -s 2a06:98c0::/29 --dport $user_input -j ACCEPT
ip6tables -A INPUT -p tcp -s 2c0f:f248::/32 --dport $user_input -j ACCEPT
ip6tables -A INPUT -p tcp --dport $user_input -j DROP
#ipv4
iptables -A INPUT -p tcp -s 103.21.244.0/22 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 173.245.48.0/20 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 103.21.244.0/22 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 103.22.200.0/22 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 103.31.4.0/22 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 141.101.64.0/18 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 108.162.192.0/18 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 190.93.240.0/20 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 188.114.96.0/20 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 197.234.240.0/22 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 198.41.128.0/17 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 162.158.0.0/15 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 104.16.0.0/13 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 104.24.0.0/14 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 172.64.0.0/13 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp -s 131.0.72.0/22 --dport $user_input -j ACCEPT
iptables -A INPUT -p tcp --dport $user_input -j DROP
```


然后访问端口,看看是不是只有cf IPcdn才能访问了呢。

不过即使有ssl,还是建议本地服务器鉴权一下sni与host。




2.使用cloudflared官方隧道



官方隧道配置简单,并且不需要公网IP,缺点就是隧道会消耗性能,并且本地服务器必须,并且流量都会这个cloudflared程序,与运行一个nginx无异。因此不是很推荐这个。

如果你本来就在跑cloudflared,不妨试试直接在云端分流


此外还有一个办法,如果你有cf的zreo trust也能实现,但是需要绑卡,受限与篇幅,这里就不说这么多了
#2 下耕 · 2026-04-20 16:05:50
stalltrix
大佬牛批,先收藏了。也许以后能用到
#3 星河 · 2026-04-20 16:37:42
stalltrix
origin rules配置通过端口分流后,看样子确实是cf监听443端口->然后cf在云端通过的oring rules配置的端口分流后,再发到用户内网端口。看样子确实与nginx无异??
#4 bigjj · 2026-04-20 16:57:21
stalltrix
感觉太麻烦了,直接使用nginx proxy manager就行了
#5 LoopLab · 2026-04-20 17:12:46
stalltrix
@bigjj 这个运行在云端,应该不一样吧
#6 jjboom · 2026-04-20 18:32:41
stalltrix
cf确实有很多骚操作玩法,很多都是没有想到的思路。

以前free防火墙只能5个规则,然后就有神人想出使用or来绕过
#7 duso · 2026-04-21 09:15:45
stalltrix
看完了也不会。有人和我一样吗?
#8 风长旧客 · 2026-04-21 20:26:17
stalltrix
@jjboom cloudflare确实有很多可玩的地方。

除了Origin Rules外,像是页面规则+重定向规则,记得以前loc上还有用这个当“图比”动态302转换的
#9 BitForge · 2026-04-22 12:32:11
stalltrix
感觉argo配合这个简单一些,支持协议多,我看网上的一键脚本也多。这种配mTLS没搞过
#10 gmking · 2026-04-22 19:11:34
stalltrix
有没有大佬知道,为什么我配置了后,全部页面都返回http 400呢?
#11 星河 · 2026-04-22 21:22:16
stalltrix
@gmking cf那里的 ssl -> 完全。400是把http发到https了
#12 mx1996 · 2026-08-10 01:47:22
stalltrix
图床是不是挂了,楼主可以更新下图片吗

注册

或使用第三方注册

登录

没有账号? 立即注册
技术
闲聊
开发
正在提交...