yo @Falco ,nginx 日志中是否能获取到 cf 提供的 real_ip(CF-Connecting-IP header)?我这里不行,只能看到 cloudflared 的 IP。
我认为需要完成以下一项或两项(调查后跟进):
在 nginx 中为 cloudflared 的 IP 添加 set_real_ip_from 配置行。如果这是问题所在,那么我猜 templates/cloudflare.template.yml 中提供的其他 set_real_ip_from 行对于 argotunnel 用户来说是不需要的。这种情况下,也许应该在 docker 仓库中添加一个单独的 argotunnel 模板,从你的 app.yml 主文件中的环境变量或其他地方获取你的 cloudflared IP。
修复 log_format。不过我认为这可能不是问题。 已确认不需要
编辑:
这是我让它生效的方法:
不要使用 cloudflare 模板。没有意义。
而是将以下内容合并到你的 app.yml 中:
hooks:
after_web_config:
- file:
path: /etc/nginx/conf.d/cloudflare_tunnel_real_ip.conf
contents: |
# 恢复原始访客 IP (ngx_http_realip_module)
set_real_ip_from 10.100.20.200/32; # 你的 cloudflared/argotunnel IP 范围
real_ip_header CF-Connecting-IP;
顺便说一句,这会自动添加到 nginx 的 http 上下文中,这是合适的。
PS:我认为,为了整洁起见,cloudflare 模板也应该将其 nginx 配置生成到单独的文件中,而不是使用 sed -i 将其添加到 /etc/nginx/conf.d/discourse.conf。
1 个赞
是的@shyguy,我遵循了@Falco先生的步骤。
是的,我在隧道中,之前我从Cloudflare获得了DDoS防护,DDoS导致我的服务器CPU过高,访问日志20MB,我只看到了我的Docker IP,我通过URL路径/挑战访问者来保护服务器,但缓存过期导致了错误。
我遇到了和 Falco 网站一样的 DDoS 攻击情况,CPU 使用率也随之升高。
2 个赞
@shyguy 请问这个 IP 地址范围在哪里可以获取?抱歉打扰了。
这个呢?我必须在容器内部还是外部使用这个命令?
1 个赞
如果还不清楚,我之前的帖子只是关于修复 nginx 日志记录的。
如果你不修复它,你 nginx 日志中的所有请求看起来都将来自一个 IP(你的 cloudflared),而不是实际的客户端 IP。
那个 IP(或 IP 范围)是你的 cloudflared 连接到 discourse 的地址,所以这取决于你的设置。一种确定的方法是查看 nginx 日志文件并从中获取 IP。然后在其后添加 /32。
如果你严格按照他的指南操作,我猜应该是 127.0.0.1/32。
不,那只是对 cloudflare.template.yml 模板的建议——你不应该在当前设置中使用它。
只需按照第一个帖子的指南操作,但忽略将该模板添加到配置的步骤。取而代之的是,添加我提供的钩子 。
1 个赞
我按照您的设置操作了,但没有生效。
[27/May/2023:15:49:45 +0000] "sub.domain.ltd" 172.17.0.1 "POST /
[27/May/2023:15:49:45 +0000] "sub.domain.ltd" 172.17.0.1 "POST /
[27/May/2023:15:49:46 +0000] "sub.domain.ltd" 172.17.0.1 "GET /chat
[27/May/2023:15:49:46 +0000] "sub.domain.ltd" 172.17.0.1 "POST /message-bus
[27/May/2023:15:49:54 +0000] "sub.domain.ltd" 172.17.0.1 "POST /message-bus/
hooks:
after_web_config:
- file:
path: /etc/nginx/conf.d/cloudflare_tunnel_real_ip.conf
contents: |
# restore original visitor IPs (ngx_http_realip_module)
set_real_ip_from 172.17.0.1/32; # your cloudflared/argotunnel IP range
real_ip_header CF-Connecting-IP;
我哪里出错了?请帮助我 @shyguy
真遗憾。在我看来,这看起来是正确的,所以我不知道哪里出了问题。
这是它的工作方式:
Cloudflare 代理添加一个 CF-Connecting-IP 标头,其中包含客户端的 IP
Discourse 中的 Nginx 已使用 ngx_http_realip_module 编译——该软件读取此标头并修复日志等以显示实际客户端 IP
set_real_ip_from 启用此功能,用于来自传递给它的 IP 地址范围的连接。这通常是 Cloudflare 的 IP 地址范围(由 cloudflare.template.yml 便利模板提供),但由于您使用的是 Argotunnel,因此您只需使用 Argotunnel 的 IP 地址即可。
尝试禁用我的钩子。您在启用/禁用我的钩子之前/之后在 Nginx 日志中看到相同的 IP 地址吗?
我们设置之间可能唯一的区别是我正在 Docker 中运行 Argotunnel(cloudflared)。
如果您想尝试一下……
我创建了一个仅用于 cloudflared 的网络:
docker network create --subnet 10.200.10.0/24 cf_tunnel
这是 compose 文件:
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
command: tunnel run
restart: unless-stopped
networks:
wan:
cf_tunnel:
# for ngx_http_realip_module
# set to a high IP so that hopefully docker doesn't DHCP assign
# another container that IP if it starts before cloudflared
ipv4_address: 10.200.10.200 # this is the ip for `set_real_ip_from` in nginx
volumes:
# should be owned by uid:gid 65532:65532
- ./conf:/home/nonroot/.cloudflared
networks:
cf_tunnel:
external: true # just means a network not managed by compose
# for performance:
# https://github.com/quic-go/quic-go/wiki/UDP-Receive-Buffer-Size
# sudo nano /etc/sysctl.conf
# add this line:
# net.core.rmem_max=2500000
# (my old value was 212992 – check it with: sudo sysctl net.core.rmem_max)
您可以在该 conf 目录中将您的配置/证书传输到其中(请记住按照 compose 文件中的注释进行 chown),或者只需再次执行设置过程。您可以使用以下命令运行 cloudflared 命令进行登录等操作:
docker run -it --rm -v /path/to/conf:/home/nonroot/.cloudflared cloudflare/cloudflared:latest YOUR_CMD_HERE
然后您必须将您的 discourse 容器加入该网络。您可以通过在容器 yml 文件底部添加以下内容来实现:
docker_args:
- '--network=cf_tunnel' # optionally, you could set a static IP here too
1 个赞
rsmithlal
(Robert Smith)
2024 年1 月 5 日 00:42
49
有人成功地在 Cloudflare 隧道上运行 Discourse 邮件服务器容器吗?
我过去曾尝试在 Cloudflare 隧道后面设置另一个邮件服务器,但可以正常运行使用端口 80 和 443 的 Pi 上的应用程序。
我已经多次在服务器上设置 Discourse,目前我对主要的 Discourse 容器不太担心。
我认为这与此相关,但如果您觉得偏离主题,请根据我的回复创建一个新帖子。
谢谢。
pfaffman
(Jay Pfaffman)
2024 年1 月 5 日 11:59
50
2 个赞
kuaza
(kuaza)
2024 年5 月 13 日 19:45
51
我使用了argo服务。第一个月支付了28欧元后我就放弃了。实际上至少有200毫秒的差异。但是,我因为每个月支付28欧元才能节省200毫秒而取消了它。大型网站会有更多的账单,请注意。
该网站的访问量为800-1000独立用户。您可以据此计算。
1 个赞
自从我开始使用隧道以来,上传媒体一直很麻烦,几乎不可能。
上传正常,然后我收到此错误
这就是问题所在,哈哈,它是 64 位的。但我已经解决了。我运行了 apt get upgrade 并重启了 cloudflare 服务,然后它就上传了。另外,您知道 cloudflare 是否会限制使用 tunnel 上传视频吗?我上传一个大约 20MB 的视频时遇到了问题,以前没有这种情况。
Tobiasp
(Tobias)
2024 年6 月 11 日 08:41
58
我已经设置好了 Cloudflare Tunnel,并且它也已激活:
然而,在安装过程中,Discourse 无法访问域名的错误一直出现。
我在 App.yml 中写入了 DISCOURSE_FORCE_HTTPS: true。
但是,我没有取消安装,它在我能够更改 App.yml 之前就被自动取消了。这可能是错误的原因吗?
1 个赞
一样,@Tobiasp 你修好了吗?如果修好了,是怎么修的?谢谢
1 个赞
Tobiasp
(Tobias)
2024 年9 月 28 日 23:41
60
我有一个公共 IP 地址,并在安装过程中使用了它。然后我安装了 Cloudflare Tunnel。
1 个赞
你能把你的配置和东西以及你是怎么做的发给我吗?谢谢!
1 个赞
在遵循指南时,它要求我们选择连接网络还是应用程序。我们应该选择哪个?
1 个赞