Skip to content

安全配置参考

Spine 使用加密传输和有界运行时默认值。部署检查应调用 App.ValidateApp.Run 会自动执行同一套无网络预检。

默认值

领域默认行为显式开发或兼容选项
Kafka每个启用的 reader/writer 使用隐式 TLS 1.2 以上自定义 TLS/Dialer/Transport,或仅本地使用 AllowInsecureTransport: true
RabbitMQ要求 amqps://amqp:// 配合 AllowInsecureTransport: true
RabbitMQ 发布持久消息、强制路由、publisher confirms、有界重试调整 PublisherRetry
RabbitMQ 处理器失败拒绝且不重新入队FailurePolicy: boot.RabbitMqFailureRequeue
RabbitMQ prefetch每个消费者 1 条未确认消息正数 PrefetchCount
消费者传输失败指数退避和抖动后重建 reader配置 ConsumerRetry
WebSocket 来源scheme 与 host 必须一致精确 AllowedOrigins
WebSocket 容量1024 个活动及待处理连接正数限制或 UnlimitedWebSocketConnections
WebSocket 认证WebSocketHandshakeInterceptor 在 upgrade 前运行每个受保护 WS 路由实现握手认证
全局拦截器HTTP 与 WebSocketInterceptorFor 缩小范围
带凭据 CORS必须使用明确来源不支持通配来源
Cookie 序列化写响应前拒绝非法字段任意值先用 EncodeCookieValue

启动前验证

go
opts := boot.Options{
	Address: ":8080",
	HTTP: &boot.HTTPOptions{},
}

if err := app.Validate(opts); err != nil {
	var configErr *boot.ConfigError
	if errors.As(err, &configErr) {
		for _, issue := range configErr.Issues {
			log.Printf("%s [%s]: %s", issue.Path, issue.Code, issue.Hint)
		}
	}
	log.Fatal(err)
}

boot.ConfigError.Issues 中的 Code 是稳定的机器可读部署诊断;不要解析面向人的错误文本,也不要在日志中输出代理凭据。

运行要求

  • 只在隔离的本地环境启用不安全的消息代理传输。
  • 为 Spine 消费队列配置 DLX 前,先在 RabbitMQ 中创建相应 dead-letter exchange,并对齐现有队列参数。
  • Kafka/RabbitMQ 消费者必须幂等;重连与确认丢失可能导致至少一次重投或重复。
  • 启用 TrustedProxyCIDRs 时,代理必须移除或覆盖客户端提供的 forwarding headers。
  • 监控 WEBSOCKET_CAPACITY_EXCEEDED、消费者重连耗尽以及 RabbitMQ Type/RoutingKey 不一致日志。

支持的版本请参阅当前版本