一、上线前必须改
1. 同域代理让 Go 看不到真实客户端 IP
浏览器请求 /api/v1/* 时,是经过 Next.js 的 rewrites 转发到 Go 的(next.config.ts)。所以 Go 拿到的 RemoteAddr 永远是 Next 服务器的地址,由此出现两个实际问题:
- 验证码按 IP 限流变成了全站共用一个额度。 auth.go 里的
mail-ip限流是每小时 30 次。上线后,全站所有人每小时加起来只能申请 30 个验证码。 - 游客浏览量严重少算。 interactions.go 的
viewTopic对游客按 IP 去重 30 分钟。所有游客的 IP 都相同,所以同一个话题 30 分钟内只会被计 1 次游客浏览。
建议的做法:生产环境在最前面放一层 Nginx 或 Caddy。/api/* 和以后的 /ws 直接转给 Go,其余请求转给 Next。Go 只信任这层代理传来的 X-Forwarded-For,可信代理地址写进配置。这样还能顺带去掉浏览器请求"先到 Next、再到 Go"的那一跳。
