Просмотр исходного кода

fix: support comma-separated RailsAdminAddr whitelist

xcx-server 容器化后,Rails admin (宿主) → xcx-server (容器) 的 RemoteAddr
被 docker NAT 改写为网桥网关 (172.19.0.1),原先单值匹配 127.0.0.1 直接返回
403 railsAdminIPReduced,导致 admin 后台发货按钮全部失败。

改为支持配置项 RailsAdminAddr 逗号分隔多 IP 白名单,并在被拒绝时打日志。
配置文件需同步改为 "127.0.0.1,172.19.0.1,172.17.0.1"。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
abiao недель назад: 3
Родитель
Сommit
e757eb514a
1 измененных файлов с 11 добавлено и 1 удалено
  1. 11 1
      go/gopath/src/fohow.com/apps/init.go

+ 11 - 1
go/gopath/src/fohow.com/apps/init.go

@@ -381,11 +381,21 @@ func checkWxUserLogin(ctx *context.Context) {
 }
 
 // 检查来自大后台的请求是否为服务器IP
+// 支持配置项 RailsAdminAddr 为逗号分隔的 IP 白名单(容器化后 docker 网桥网关需要加入白名单)
 func CheckIsInvokeFromRailsAdmin(ctx *context.Context) {
 	s := strings.Split(ctx.Request.RemoteAddr, ":")
 	ip := s[0]
 	beego.BeeLogger.Debug("railsadmin request ip is: %s", ip)
-	if ip != beego.AppConfig.String("RailsAdminAddr") {
+	allowed := strings.Split(beego.AppConfig.String("RailsAdminAddr"), ",")
+	matched := false
+	for _, a := range allowed {
+		if strings.TrimSpace(a) == ip {
+			matched = true
+			break
+		}
+	}
+	if !matched {
+		beego.BeeLogger.Warn("railsadmin request rejected, ip=%s not in whitelist", ip)
 		errCode := &ErrCode{
 			Code:     RailAdminIPReduced[0],
 			Msg:      RailAdminIPReduced[1],