.NET 7 Kestrel如何通过appsettings.json配置指定路径的Unix Socket监听?
在.NET 7中通过appsettings.json配置Kestrel监听指定路径的Unix Socket
要在.NET 7的Kestrel中通过配置文件指定Unix Socket监听路径,你需要在Endpoints节点下用Url字段指定unix://协议格式的路径,而非自定义的SocketPath字段。
正确的appsettings.json配置示例
{ "Monitoring": { "Kestrel": { "Endpoints": { "HttpMonitoringEndpoint": { "Url": "http://*:60765" }, "UnixSocketMonitoringEndpoint": { "Url": "unix:///run/myapp/monitor.sock" } } } } }
关键说明
- 协议格式要求:Unix Socket的路径必须以
unix://开头,后续跟绝对文件路径(注意是三个斜杠unix:///,因为协议后直接衔接文件系统路径)。 - 配置节点位置:Unix Socket端点和TCP端点一样,统一放在
Endpoints节点下,无需单独的UnixSocketEndpoints或UnixDomainSocketEndpoints节点——这类节点仅用于Kestrel自动生成临时Socket的场景,无法指定自定义路径。 - 原有代码无需修改:你当前的配置加载代码(
kestrelOptions.Configure(_configurationRoot!.GetRequiredSection("Monitoring").GetSection("Kestrel")).Load())可以直接读取上述配置,无需额外改动。
额外注意事项
- 确保运行应用的进程对目标目录(如
/run/myapp/)拥有读写权限,否则无法创建Socket文件。 - Unix Socket文件在应用退出后不会自动删除,建议在应用启动前检查并清理旧的Socket文件,避免启动失败。
内容的提问来源于stack exchange,提问作者dodexahedron
相关产品推荐
相关产品推荐

