我偶尔会看到我运行的论坛显示一个永远无法加载的启动屏幕。
这似乎发生在重建之后,或者如果我长时间没有访问论坛。它似乎与不同的浏览器或论坛插件无关。而且它会发生在一些人身上,但不会发生在另一些人身上。
硬刷新(Windows 上的 Ctrl-F5 或 Mac 上的 Cmd-Shift-R)似乎每次都能解决问题。我猜这与 CDN 的缓存有关,但不确定。还有其他人遇到过类似的情况吗?
页面未加载时的控制台
硬刷新后的控制台
我偶尔会看到我运行的论坛显示一个永远无法加载的启动屏幕。
这似乎发生在重建之后,或者如果我长时间没有访问论坛。它似乎与不同的浏览器或论坛插件无关。而且它会发生在一些人身上,但不会发生在另一些人身上。
硬刷新(Windows 上的 Ctrl-F5 或 Mac 上的 Cmd-Shift-R)似乎每次都能解决问题。我猜这与 CDN 的缓存有关,但不确定。还有其他人遇到过类似的情况吗?
页面未加载时的控制台
硬刷新后的控制台
所有这些错误都是由于请求被速率限制所致。如果其资源无法加载,Discourse 就无法运行。
您应该检查:
对于所讨论的服务器,没有反向代理会隐藏所有用户流量,使其仅显示一个 IP。Discourse 内部设置的速率限制是默认值。
我猜 CDN 可能会进行一些代理?是否有推荐的方法来确认最终用户 IP 是否已传递到后端?我在日志中没有看到任何关于请求过多的信息。
这正是CDN的工作,所以是的,你需要确保正确的最终用户IP在请求链中得到维护。
我猜你没有这样做,并且CDN的所有请求都被计入了CDN POPs的请求速率限制,而不是最终用户的。
![]()
你可以看到CDN在这里返回了429,但你需要调查你的具体设置,以确定是谁决定返回该错误(即代理或真实服务器)。
KeyCDN 是所讨论的 CDN。我尝试启用 OriginShield 并将 template.yml(采用 cloudflare.template.yml 的风格)添加到我的 app.yml 中,但仍然收到 429 错误。
与其继续摆弄它,不如我切换到了 BunnyCDN,它似乎工作得更好。
如果这个模板文件对其他人有帮助,我把它放在下面。
run:
- file:
path: /tmp/add-keycdn-ips
chmod: +x
contents: |
#!/bin/bash -e
# Add list of keycdn ips
curl -s 'https://www.keycdn.com/shield-prefixes.json' | \
python3 -c "import sys, json; print('\n'.join(json.load(sys.stdin)['prefixes']))" > /tmp/keycdn-ips
# Make into nginx commands and escape for inclusion into sed append command
CONTENTS=$(< /tmp/keycdn-ips sed 's/^/set_real_ip_from /' | sed 's/$/;/' | tr '\n' '\\' | sed 's/\\/\\n/g')
echo keycdn IPs:
echo $(echo | sed "/^/a $CONTENTS")
# Insert into discourse.conf
sed -i "/sendfile on;/a $CONTENTS\nreal_ip_header X-Forwarded-For;\nreal_ip_recursive on;" /etc/nginx/conf.d/discourse.conf
# Clean up
rm /tmp/keycdn-ips
- exec: "/tmp/add-keycdn-ips"
- exec: "rm /tmp/add-keycdn-ips"
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.