bin/init --tls、overleaf.rc 中的 NGINX_* 和 TLS_*)在这里没有对应项;Toolkit 的相关内容请参见 TLS 代理。
代理必须做到的事项
- 传递 WebSocket(
/socket.io)。 - 允许持续 10 分钟的请求(长时间编译)以及 50 MB 的请求体(上传),或
MAX_UPLOAD_SIZE指定的大小。 - 将其面向 pod 的空闲 keep-alive 超时设置为低于 65 秒,即 pod 中 nginx 的超时时间。
- 发送
X-Forwarded-For和X-Forwarded-Proto: https。 - 在多个副本的情况下,将用户保持在同一个副本上,参见水平扩展。
ConfigMap
X-Forwarded-Proto: https,Ayakaleaf Pro 会认为请求是通过 HTTP 到达的,因而不会设置其安全会话 cookie:登录随之失败。仅当用户确实通过 HTTPS 访问站点时才设置 OVERLEAF_SECURE_COOKIE;任何值都会启用它,包括 "false"。
HAProxy 示例
要在水平扩展的 HAProxy DaemonSet 中终止 HTTPS,请将证书及其私钥放入同一个 PEM 文件并创建 Secret:80-haproxy.yaml:
80-haproxy.yaml (changes)
config-hash 以使 HAProxy 重启,然后按上述方式设置 ConfigMap 并重启副本。
重定向会保留请求的端口:这适用于使用 80 和 443 端口的负载均衡器,但在 NodePort 上,它会将 http://host:30081 重定向到 https://host:30081。如果前端没有负载均衡器,请省略重定向这一行,并向用户提供 https://...:30443 地址。
在 Kubernetes 上的测试
在 Kubernetes 1.37 上,以三个副本运行并按上述方式由 HAProxy 终止 HTTPS,OVERLEAF_SITE_URL 使用 https:// 并设置了 OVERLEAF_SECURE_COOKIE:用户通过 https:// 链接激活账户,使用标记为 Secure 的会话 cookie 登录,上传并编译项目且成功获取 PDF,始终停留在各自的副本上,打开了编辑器的 WebSocket(wss),并通过 HTTPS 使用 Git 进行克隆和推送。NodePort 上的 http:// 请求被重定向到相同端口的 https://,与上文所述一致。
