fix: waitress 生产启动加 trusted-proxy 参数,修复反代HTTPS头被清除导致的重定向死循环

This commit is contained in:
2026-09-15 09:55:07 +08:00
parent c52e3a3ff5
commit 6fe5195b07
+16 -1
View File
@@ -18,4 +18,19 @@ if (-not (Test-Path $python)) {
throw "找不到虚拟环境解释器:$python,请先创建虚拟环境并安装 requirements/production-windows.txt"
}
& $python -m waitress --listen=127.0.0.1:8080 --threads=8 wagtailcms.wsgi:application
# --trusted-proxy / --trusted-proxy-headers 是必须的:Waitress 默认会清除所有
# X-Forwarded-* 请求头(clear_untrusted_proxy_headers 默认为 True),除非请求的
# REMOTE_ADDR 命中 --trusted-proxy 指定的地址。Nginx 与 Waitress 部署在同一台机器上,
# 反代请求的 REMOTE_ADDR 是 127.0.0.1,所以这里信任 127.0.0.1。
# 如果不加这两个参数,Django 的 SecurityMiddleware 永远看不到 X-Forwarded-Proto,
# SECURE_SSL_REDIRECT 会认为请求不是 HTTPS 从而不断触发 301,
# 与 Nginx 的 HTTPS 反代形成死循环(redirect count exceeded)。
# 注意:--trusted-proxy-headers 的值必须以空格分隔(Waitress 内部用 str.split(),
# 不支持逗号分隔),且必须作为单个参数传递(用引号包住),否则会被 Waitress 自身的
# 合法性校验判定为"未知的 trusted_proxy_headers 值"直接抛异常、进程启动失败。
& $python -m waitress `
--listen=127.0.0.1:8080 `
--threads=8 `
--trusted-proxy=127.0.0.1 `
"--trusted-proxy-headers=x-forwarded-for x-forwarded-proto x-forwarded-host x-forwarded-port" `
wagtailcms.wsgi:application