跳转到内容
Nacos 配置中心安全问题汇总及解决方案 点此了解

系统参数

Nacos 系统参数介绍

1. Nacos Server

对于Server端来说,一般是设置在{nacos.home}/conf/application.properties里,如果参数名后标注了(-D)的,则表示是 JVM 的参数,需要在{nacos.home}/bin/startup.sh里进行相应的设置。例如像设置 nacos.home 的值,可以在{nacos.home}/bin/startup.sh进行如下设置:

若没有标注(-D)的参数,则同时可以在{nacos.home}/conf/application.properties里和JVM参数中配置,如果同时配置了JVM参数和{nacos.home}/conf/application.properties,那么JVM参数的优先级更高。

JAVA_OPT="${JAVA_OPT} -Dnacos.home=${BASE_DIR}"

1.1. 全局参数

1.1.1. 基础参数

参数名含义可选值默认值
nacos.home(-D)Nacos的根目录目录路径Nacos安装的目录
nacos.standalone(-D)是否在单机模式true/falsefalse
nacos.functionMode(-D)启动模式,支持只启动某一个模块,不设置时所有模块都会启动config/naming/空
nacos.server.ip(-D)Nacos服务端的IP,优先级比nacos.inetutils.ip-address更高,如果配置了该参数,则nacos.inetutils.ip-address不再生效本机IPnull
nacos.inetutils.prefer-hostname-over-ip节点优先使用hostname作为本机ip,若为true时,cluster.conf里是否应该填hostnametrue/falsefalse
nacos.inetutils.ip-address本机IP,该参数设置后,将会使用这个IP去cluster.conf里进行匹配,请确保这个IP的值在cluster.conf里是存在的本机IPnull
nacos.core.sys.basic.processors指定服务端的处理器个数,用于部分虚拟化场景,防止读取CPU个数时读取到错误的值,导致线程数过多或过少正整数CPU个数
nacos.core.monitor.topn.enabledNacos Server topN 监控统计能力开关true/falsetrue
nacos.core.monitor.topn.countNacos Server topN 监控统计 top的个数,如如配置为10,表示top10的配置和服务正整数10
nacos.core.snowflake.worker-idNacos Server 的snowflake workerId正整数-1
nacos.core.param.check.enabledNacos Server 参数校验能力开关,开启后将会校验请求时的参数是否符合规范,不符合将被拦截,详情查看 参数校验true/falsetrue
server.portNacos Server 的端口正整数8848
server.servlet.context-pathNacos Server 的Servlet上下文路径正则表达式/nacos
spring.config.additional-locationNacos Server 的额外配置文件路径,除{nacos.home}/conf/application.properties外,用户可以添加额外的配置文件文件路径,多个文件路径用逗号分隔null

1.1.2. 数据库

参数名含义可选值默认值
spring.sql.init.platformNacos Server 使用的数据库类型mysql/空,指定为空时会根据nacos.standalone判断使用derby数据库还是mysql数据库;在使用数据源插件时,可以指定为插件对应的数据库值,比如oracle或postgresqlnull
spring.datasource.platformNacos Server 使用的数据库类型,即将被废弃,请使用spring.sql.init.platform代替mysql/空null
db.num数据库数目正整数0
db.url.0第一个数据库的URL字符串
db.url.1第二个数据库的URL,当db.num=2时生效字符串
db.user数据库连接的用户名字符串
db.password数据库连接的密码字符串
db.pool.config.xxx数据库连接池参数,使用的是hikari连接池,参数与hikari连接池相同,如db.pool.config.connectionTimeoutdb.pool.config.maximumPoolSize字符串同hikariCp对应默认配置

当前数据库配置支持多数据源。通过db.num来指定数据源个数,db.url.index为对应的数据库的链接。db.user以及db.password没有设置index时,所有的链接都以db.userdb.password用作认证。如果不同数据源的用户名称或者用户密码不一样时,可以通过符号,来进行切割,或者指定db.user.index,db.user.password来设置对应数据库链接的用户或者密码。需要注意的是,当db.userdb.password没有指定下标时,因为当前机制会根据,进行切割。所以当用户名或者密码存在,时,会把,切割后前面的值当成最后的值进行认证,会导致认证失败。

Nacos从1.3版本开始使用HikariCP连接池,但在1.4.1版本前,连接池配置由系统默认值定义,无法自定义配置。在1.4.1后,提供了一个方法能够配置HikariCP连接池。 db.pool.config为配置前缀,xxx为实际的hikariCP配置,如db.pool.config.connectionTimeoutdb.pool.config.maximumPoolSize等。更多hikariCP的配置请查看HikariCP 需要注意的是,url,user,password会由db.url.n,db.user,db.password覆盖,driverClassName则是默认的MySQL8 driver(该版本mysql driver支持mysql5.x)

1.1.2. Remoting

参数名含义可选值默认值
nacos.remote.server.grpc.sdk.max-inbound-message-sizeNacos Server gRPC 能接收的单次最大客户端请求大小,单位byte正整数10 * 1024 * 1024
nacos.remote.server.grpc.cluster.max-inbound-message-sizeNacos Server gRPC 能接收的单次最大集群间请求大小,单位byte正整数10 * 1024 * 1024
nacos.metric.grpc.server.executor.enabledNacos Server gRPC线程池 监控能力开关true/falsetrue
nacos.metric.grpc.server.executor.intervalNacos Server gRPC线程池的间隔时间,单位为毫秒正整数15000
nacos.metric.grpc.server.connection.enabledNacos Server gRPC长连接 监控能力开关true/falsetrue
nacos.metric.grpc.server.connection.intervalNacos Server gRPC长连接的间隔时间,单位为正整数15
remote.executor.times.of.processors(-D)服务端,处理请求的线程池大小的倍数, 例如配置为2,表示线程池大小为2 * CPU正整数16
remote.executor.queue.size(-D)服务端,处理请求的线程池队列大小正整数16384

1.1.3. 集群列表

参数名含义可选值默认值
nacos.member.listNacos Server 地址列表,在cluster.conf不存在时生效ip1:port1,ip2:port2null
nacos.member-change-event.queue.sizeNacos Server 集群节点变更事件队列的大小,当集群节点通过cluster.conf或地址服务器变更时,会将变更事件放入该队列,该队列会异步通知Server中的一些机制,比如Distro/Raft协议。正整数128
nacos.core.member.lookup.typeNacos Server 集群节点的发现方式,支持配置文件cluster.conf和地址服务器模式file/address-serverfile
nacos.core.address-server.retrynacos.core.member.lookup.type指定为address-server时生效,请求地址服务器的重试次数,超过重试次数后不再尝试从地址服务器获取NacosServer的集群列表正整数5
address.server.domainnacos.core.member.lookup.type指定为address-server时生效,地址服务器的域名域名jmenv.tbsite.net
address.server.portnacos.core.member.lookup.type指定为address-server时生效,地址服务器的端口0~655358080
address.server.urlnacos.core.member.lookup.type指定为address-server时生效,地址服务器的url字符串/serverlist

1.2. Distro 协议

参数名含义可选值默认值
nacos.core.protocol.distro.data.sync.delayMsDistro协议同步数据的延迟时间,同一份数据处于延迟时间内多次变更时,会被合并为一次同步,单位为毫秒正整数1000
nacos.core.protocol.distro.data.sync.timeoutMsDistro协议同步数据的超时时间,同步到目标节点时超过该时间,则会认为同步失败,进行延迟后重试,单位为毫秒正整数3000
nacos.core.protocol.distro.data.sync.retryDelayMsDistro协议同步数据的重试间隔,当数据同步到目标节点失败时,进行该值时间的延迟后再重试,避免同步重试风暴,单位为毫秒正整数3000
nacos.core.protocol.distro.data.verify.intervalMsDistro协议数据验证的间隔,已经同步过的数据,会定期进行数据有效性验证,验证失败会重新发起该数据的同步,单位为毫秒正整数5000
nacos.core.protocol.distro.data.verify.timeoutMsDistro协议数据验证的超时时间,单位为毫秒正整数3000
nacos.core.protocol.distro.data.load.retryDelayMsDistro协议快照数据加载的重试间隔,在节点刚启动时生效,单位为毫秒正整数30000
nacos.core.protocol.distro.data.load.timeoutMsDistro协议快照数据加载的超时时间,超过该时间未读取到其他节点的快照数据,则认为加载快照失败,单位为毫秒正整数30000

1.3 Raft 协议

参数名含义可选值默认值
nacos.core.protocol.raft.election_timeout_msRaft协议选举超时时间,单位ms正整数5000
nacos.core.protocol.raft.snapshot_interval_secsRaft协议快照写入间隔时间,单位s正整数3600
nacos.core.protocol.raft.core_thread_numRaft协议的核心线程数,用于处理Raft同步的请求线程数正整数8
nacos.core.protocol.raft.cli_service_thread_numRaft协议的核心线程数,用于发起Raft同步数据的请求线程数正整数4
nacos.core.protocol.raft.rpc_request_timeout_msRaft协议请求的超时时间,单位ms正整数5000
nacos.core.protocol.raft.max_byte_count_per_rpcRaft协议单次请求最大字节数正整数128 * 1024
nacos.core.protocol.raft.max_entries_sizeRaft协议单个日志的最大个数正整数1024
nacos.core.protocol.raft.max_body_sizeRaft协议发送日志的最大 body 大小正整数512 * 1024
nacos.core.protocol.raft.max_append_buffer_sizeRaft协议日志存储缓冲区最大大小正整数256 * 1024
nacos.core.protocol.raft.max_election_delay_msRaft协议选举的最大随机间隔,选举定时器间隔会在指定时间之外随机的最大范围正整数1000

1.4. Naming模块

参数名含义可选值默认值
nacos.naming.expireInstance是否自动摘除临时实例true/falsetrue
nacos.naming.clean.empty-service.intervalNaming模块的空服务清理间隔,单位毫秒正整数60 * 1000
nacos.naming.clean.empty-service.expired-timeNaming模块的空服务过期时间,过期的空服务会被清理,单位毫秒正整数60 * 1000
nacos.naming.clean.expired-metadata.intervalNaming模块的元数据清理间隔,单位毫秒正整数5000
nacos.naming.clean.expired-metadata.expired-timeNaming模块的元数据过期时间,过期的元数据会被清理,单位毫秒正整数60 * 1000
nacos.naming.client.expired.time临时Client对应数据的过期时间,当Distro协议停止对该Client的数据进行续约且时间超过该值时,该Client数据将被删除,主要应对Nacos Server之间断网的场景,单位毫秒正整数3 * 60 * 1000
nacos.naming.push.pushTaskDelay服务数据推送的延迟时间,同一个人服务处于延迟时间内多次变更时,会被合并为一次推送,单位为毫秒正整数500
nacos.naming.push.pushTaskTimeout服务数据推送的超时时间,超过该时间未收到客户端的确认,将延迟后重试,单位为毫秒正整数5000
nacos.naming.push.pushTaskRetryDelay服务数据推送失败后的重试间隔时间,单位为毫秒正整数1000

1.5. Config模块

参数名含义可选值默认值
nacos.config.push.maxRetryTime配置变更数据推送的延迟时间,同一个人配置处于延迟时间内多次变更时,会被合并为一次推送,单位为毫秒正整数50
nacos.config.retention.daysNacos配置中心配置变更历史保留天数,超过该时间的配置变更历史会被删除正整数30
nacos.config.search.max_capacityNacos配置中心,根据配置内容查找配置功能的最大队列个数,由于基于内容的检索十分消耗性能,因此对该功能的并发进行限制,最大不可超过320~324
nacos.config.search.max_thread根据配置内容查找配置功能的最大线程数,最大并发数,最大不可超过160~162
nacos.config.search.wait_timeout根据配置内容查找配置功能的等待超时时间,超过等待时间的查找任务会直接失败丢弃,单位毫秒正整数8000

1.6. CMDB模块

参数名含义可选值默认值
nacos.cmdb.loadDataAtStart是否打开CMDBtrue/falsefalse
nacos.cmdb.dumpTaskInterval全量dump的间隔,单位为秒正整数3600
nacos.cmdb.eventTaskInterval变更事件的拉取间隔,单位为秒正整数10
nacos.cmdb.labelTaskInterval标签集合的拉取间隔,单位为秒正整数300

1.7. Istio模块

参数名含义可选值默认值
nacos.extension.naming.istio.enabled是否加载istio模块true/falsefalse
nacos.istio.mcp.server.enabled是否开启Istio MCP协议true/falsefalse
nacos.istio.mcp.server.portIstio MCP协议监听端口正整数18848

1.8. 插件

1.8.1. 鉴权插件

关于如何开发鉴权插件,请参考鉴权插件

参数名含义可选值默认值
nacos.core.auth.enabledNacos是否开启鉴权true/falsefalse
nacos.core.auth.system.typeNacos鉴权插件的类型nacos/ldap/自定义插件类型nacos
nacos.core.auth.server.identity.keyNacos Server节点身份信息的key,用户Server节点之间通信的识别,当开启鉴权时为必填项字符串null
nacos.core.auth.server.identity.valueNacos Server节点身份信息的value,用户Server节点之间通信的识别,当开启鉴权时为必填项字符串null
nacos.core.auth.enable.userAgentAuthWhiteNacos Server使用UserAgent来进行Server节点之间通信的识别,在1.4.1版本后仅作为升级时的兼容,开启后会存在安全问题,后续版本将移除该参数true/falsefalse

同时对于Nacos默认鉴权插件的使用及更多默认鉴权插件的配置项,请参考权限校验

1.8.2. 数据源插件

其他和数据库相关的开发,请参考全局参数-数据库

参数名含义可选值默认值
spring.sql.init.platformNacos Server 使用的数据库类型mysql/空,指定为空时会根据nacos.standalone判断使用derby数据库还是mysql数据库;在使用数据源插件时,可以指定为插件对应的数据库值,比如oracle或postgresqlnull
nacos.plugin.datasource.log.enabled|Nacos Server 是否开启SQL日志打印,开启后会打印每一次执行的SQL,方便进行插件开发时的问题排查,但是较为损耗性能,日常状态建议关闭true/falsefalse

1.8.3. 环境变量插件

关于如何开发环境变量插件,请参考鉴权插件

参数名含义可选值默认值
nacos.custom.environment.enabledNacos Server 是否开启环境变量插件true/falsefalse

1.8.4. 反脆弱插件

反脆弱插件的开发,请参考反脆弱插件

参数名含义可选值默认值
nacos.plugin.control.manager.typeNacos反脆弱插件的类型nacos/其他自定义插件类型null
nacos.plugin.control.rule.external.storageNacos反脆弱插件,反脆弱规则外部存储类型,需要自行实现字符串null
nacos.plugin.control.rule.local.basedirNacos反脆弱插件,反脆弱规则本地存储目录文件路径${nacos.home}/data/

1.8.5. 配置变更插件

反脆弱插件的开发,请参考配置变更插件

参数名含义可选值默认值
nacos.core.config.plugin.${configChangePluginName}.enabled=trueNacos Server 是否开启配置变更插件true/falsefalse
nacos.core.config.plugin.${configChangePluginName}.${propertyKey}=${propertyValue}配置变更插件的配置项插件自定义插件自定义

2. 镜像环境变量

属性配置列表

属性名称描述选项
MODE系统启动方式: 集群/单机,对应nacos.standalonecluster/standalone 默认 cluster
NACOS_SERVERS集群地址,对应nacos.member.listp1
空格ip2
空格ip3
PREFER_HOST_MODE支持IP还是域名模式,对应nacos.inetutils.prefer-hostname-over-iphostname/ip 默认IP
NACOS_SERVER_PORTNacos 运行端口,对应server.port默认8848
NACOS_SERVER_IP多网卡模式下可以指定IP,对应nacos.server.ip
SPRING_DATASOURCE_PLATFORM单机模式下支持MYSQL数据库,对应spring.sql.init.platformmysql / 空 默认:空
MYSQL_SERVICE_HOST数据库 连接地址
MYSQL_SERVICE_PORT数据库端口默认 : 3306
MYSQL_SERVICE_DB_NAME数据库库名
MYSQL_SERVICE_USER数据库用户名
MYSQL_SERVICE_PASSWORD数据库用户密码
MYSQL_SERVICE_DB_PARAM数据库连接参数默认:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
MYSQL_DATABASE_NUM数据库个数默认:1
JVM_XMS-Xms默认 :1g
JVM_XMX-Xmx默认 :1g
JVM_XMN-Xmn512m
JVM_MS- XX
默认 :128m
JVM_MMS-XX
默认 :320m
NACOS_DEBUG是否开启远程DEBUGy/n 默认
TOMCAT_ACCESSLOG_ENABLEDserver.tomcat.accesslog.enabled默认
NACOS_AUTH_SYSTEM_TYPE权限系统类型选择,目前只支持nacos类型默认
NACOS_AUTH_ENABLE是否开启权限系统,对应nacos.core.auth.enabled默认
NACOS_AUTH_TOKEN_EXPIRE_SECONDStoken 失效时间默认 :18000
NACOS_AUTH_TOKENtoken注意:该环境变量的默认值在Nacos 2.2.1版本中已移除,开启鉴权时需要指定
NACOS_AUTH_CACHE_ENABLE权限缓存开关 ,开启后权限缓存的更新默认有15秒的延迟默认 : false
MEMBER_LIST通过环境变量的方式设置集群地址例子:192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809
EMBEDDED_STORAGE是否开启集群嵌入式存储模式embedded 默认 : none
NACOS_AUTH_CACHE_ENABLEnacos.core.auth.caching.enableddefault : false
NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLEnacos.core.auth.enable.userAgentAuthWhitedefault : false
NACOS_AUTH_IDENTITY_KEYnacos.core.auth.server.identity.key注意:该环境变量的默认值在Nacos 2.2.1版本中已移除,开启鉴权时需要指定
NACOS_AUTH_IDENTITY_VALUEnacos.core.auth.server.identity.value注意:该环境变量的默认值在Nacos 2.2.1版本中已移除,开启鉴权时需要指定
NACOS_SECURITY_IGNORE_URLSnacos.security.ignore.urlsdefault : /,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
DB_POOL_CONNECTION_TIMEOUT数据库连接池超时时间,单位为毫秒默认 : 30000
NACOS_CONSOLE_UI_ENABLEDnacos.console.ui.enableddefault : true
NACOS_CORE_PARAM_CHECK_ENABLEDnacos.core.param.check.enableddefault : true