gotosocial/docs/locales/zh/configuration/trusted_proxies.md
CDN 62f25ea08a
[docs/zh] Update zh docs: synced to e10de84 (#3763)
* [docs/zh] Update zh docs: synced to e10de84

* [docs/zh] update mkdocs config of zh docs

* [docs/zh] update repo docs translations (README, ROADMAP, CONTRIBUTING) + update swagger schema metadata of docs/zh
2025-02-09 11:13:08 +01:00

7.8 KiB
Raw Blame History

可信代理

为了正确执行速率限制GoToSocial 依赖于“可信代理”的概念,以准确确定访问你的实例的客户端的 IP 地址。

“可信代理”是一个中间网络跳转层GoToSocial 可以配置为信任由该代理层提供的正确的客户端 IP 地址。

例如,如果你使用 Docker + Nginx 的反向代理配置中运行,那么 Nginx 的 Docker 网络地址应该被配置为可信代理,因为从广域互联网传入的所有流量将通过 Nginx 进入 GoToSocial。

如果没有正确设置 trusted-proxies GoToSocial 将看到所有的入站客户端的 IP 地址都是同一个地址,这会导致速率限制的问题,因为 GoToSocial 使用客户端 IP 地址来执行速率限制。

总结:如何正确设置 trusted-proxies

如果你的 trusted-proxies 设置没有正确配置你可能会在实例的网页视图中看到以下警告v0.18.0及以上版本):

警告!此实例的配置中 trusted-proxies 的设置似乎不正确。这可能导致速率限制问题,进而导致联合问题。

如果你是实例管理员,你应该通过将 SUGGESTED_IP_RANGE 添加到你的 trusted-proxies 来修复此问题。

要解决这个问题可以复制消息中的IP范围并编辑你的 config.yaml 文件将IP范围添加到你的 trusted-proxies 中。

!!! tip "即使你没有看到上述警告,你也可能会遇到速率限制!" 如果你使用的是低于 v0.18.0 版本的 GoToSocial或者你在 Cloudflare不推荐 这样的 CDN 之后运行,你将不会看到警告消息。相反,你会在 GoToSocial 日志中看到所有客户端的 IP 都是同一个地址。在这种情况下,可以将重复出现的客户端IP值作为SUGGESTED_IP_RANGE

在下面例子中,我们假定SUGGESTED_IP_RANGE172.17.0.1/16默认的Docker桥接网络子网

修改之前(默认配置):

trusted-proxies:
  - "127.0.0.1/32"
  - "::1"

修改之后(新配置):

trusted-proxies:
  - "172.17.0.1/16"
  - "127.0.0.1/32"
  - "::1"

如果你使用环境变量来配置你的实例,可以通过设置环境变量GTS_TRUSTED_PROXIES为以逗号分隔的IP范围列表来配置trusted-proxies,如下所示:

GTS_TRUSTED_PROXIES="172.17.0.1/16,127.0.0.1/32,::1"

如果你使用 docker compose你的 docker-compose.yaml 文件在更改后应如下所示(注意 yaml 使用 : 而不是 =:

################################
# 其他配置内容 #
################################
    environment:
      ############################
      # 其他环境变量 #
      ############################
      ## 对于反向代理设置:
      GTS_TRUSTED_PROXIES: "172.17.0.1/16,127.0.0.1/32,::1"
################################
# 其他配置内容 #
################################

一旦你完成了必要的配置更改,重启你的实例并刷新主页。

如果消息消失,则问题已解决!

如果你仍然看到警告消息,但显示了一个不同的建议添加到trusted-proxies的 IP 范围,那么重复上述步骤,在你的配置中添加新的建议 IP 范围。

!!! tip "Cloudflare 的 IP 地址列表" 如果你在 GoToSocial 实例前面使用 CDN/代理,例如 Cloudflare (不推荐),那么你可能需要将一个或多个 Cloudflare IP 地址添加到你的 trusted-proxies以便速率限制正常工作。你可以在这里找到Cloudflare 的 IP 地址列表: https://www.cloudflare.com/ips/

我可能无法正确配置 trusted-proxies,可以直接禁用警告吗?

在某些情况下,很难实际正确配置 trusted-proxies 来检测入站请求的真实客户端 IP或者确保真实客户端 IP 是准确、但是仍显示为在私有网络内的。

例如,如果你在家用网络上运行 GoToSocial且实例位于无法注入 X-Forwarded-For 标头的家庭互联网路由器之后,那么建议你添加到 trusted-proxies 的条目看起来会像 192.168.x.x,但将其添加到 trusted-proxies 后问题依然无法解决。

另一个例子是:你在家庭网络上运行 GoToSocialGoToSocial 连接到家庭网络的路由器,并且你从同样在你家庭网络设备(比如笔记本或手机)上访问 Web 前端。在这种情况下,你的路由器可能会直接将你发送到你的 GoToSocial 实例,且你的请求不会离开家用网络,因此 GtS 将正确地认为你的客户端 IP 地址是一个私人网络地址,但其他从更广泛的互联网传入的请求将显示其真实的远程客户端 IP 地址。在这种情况下,trusted-proxies 的警告实际上不适用。

如果你已尝试编辑 trusted-proxies 设置,但仍看到警告,可能上面的一个例子适用于你。你可以通过以下两种方式之一继续:

为家庭网络添加速率限制例外(推荐)

如果 trusted-proxies 警告中的建议 IP 范围看起来像 192.168.x.x,但你在 GoToSocial 日志中仍看到其他客户端 IP 不以 192.168 开头,那么可以尝试只为家庭网络上的设备添加速率限制例外,同时对外部 IP 地址保持速率限制。

例如,如果你的建议是类似 192.168.1.128/32,那么将 /32 换为 /24,以便使范围覆盖 192.168.1.0 -> 192.168.1.255,并将其添加到 config.yaml 文件中的 advanced-rate-limit-exceptions 设置中。

默认设置(修改前):

advanced-rate-limit-exceptions: []

设置修改后:

advanced-rate-limit-exceptions:
  - "192.168.1.128/24"

如果你使用环境变量来配置实例,可以将环境变量 GTS_ADVANCED_RATE_LIMIT_EXCEPTIONS 设为以逗号分隔的 IP 范围列表,来配置 advanced-rate-limit-exceptions,如下所示:

GTS_ADVANCED_RATE_LIMIT_EXCEPTIONS="192.168.1.128/24"

如果使用 docker compose修改后的 docker-compose.yaml 文件应如下所示(注意 yaml 使用 : 而不是 =)

################################
# 其他配置内容 #
################################
    environment:
      ############################
      # 其他环境变量 #
      ############################
      GTS_ADVANCED_RATE_LIMIT_EXCEPTIONS: "192.168.1.128/24"
################################
# 其他配置内容 #
################################

完成必要的配置更改后,重启你的实例并刷新主页。

完全关闭速率限制(最后手段)

如果其他方法无效,你可以完全禁用速率限制,这也会禁用 trusted-proxies 检查和警告。

!!! warning "警告" 完全关闭速率限制应被视为最后的手段,因为速率限制有助于保护你的实例免受骚扰信息和爬虫攻击。

要关闭速率限制,请在 config.yaml 中将 advanced-rate-limit-requests 设置为 0。

默认配置前:

advanced-rate-limit-requests: 300

设置后:

advanced-rate-limit-requests: 0

如果你使用环境变量来配置实例,可以通过将环境变量 GTS_ADVANCED_RATE_LIMIT_REQUESTS 设置为 0来配置 advanced-rate-limit-requests,如下所示:

GTS_ADVANCED_RATE_LIMIT_REQUESTS="0"

如果使用 docker compose改变后的 docker-compose.yaml 文件应如下所示(注意 yaml 使用 : 而不是 =)

################################
# 其他配置内容 #
################################
    environment:
      ############################
      # 其他环境变量 #
      ############################
      GTS_ADVANCED_RATE_LIMIT_REQUESTS: "0"
################################
# 其他配置内容 #
################################

完成必要的配置更改后,重启你的实例并刷新主页。