ASP.NET Core托管Blazor WASM部署Linux时报443端口占用错误如何处理?
问题排查与解决步骤
1 核心问题定位
报错栈中明确抛出System.Net.Sockets.SocketException (98): Address already in use,本质是Linux服务器上的443端口已经被其他进程占用,导致Kestrel无法绑定该端口启动服务。
2 端口占用问题解决
- 登录Linux服务器执行以下命令查看占用443端口的进程:
sudo lsof -i :443 # 备选命令 sudo netstat -tulpn | grep :443
- 拿到占用进程的PID后,确认该进程是否可停用,若为无用进程直接终止即可:
sudo kill -9 <对应PID>
- 若443端口被Nginx、Apache等不可停用的Web服务占用,可调整Kestrel的监听端口为5001等未被占用的端口,再配置反向代理将443端口的请求转发到Kestrel的监听端口即可。
3 配置修正
当前配置存在两处需调整的问题:
appsettings.Development.json中配置的监听Host为localhost,但服务需要绑定服务器IP 10.0.2.200对外提供服务,将Host改为0.0.0.0即可允许所有IP访问,也可直接指定为10.0.2.200。- 证书配置不完整,
appsettings.Development.json的Https节点中缺少证书密码字段,需补充Password字段,取值和appsettings.jsonKey节点下的密码保持一致。
4 补充注意事项
- Linux系统中1024以下的端口属于特权端口,非root用户默认无法绑定,如果需要用普通用户运行的Kestrel绑定443端口,可执行以下命令授权:
sudo setcap 'cap_net_bind_service=+ep' /path/to/your/dotnet/executable
- 生产环境不要使用
Development环境启动服务,将环境变量改为Production,对应配置写到appsettings.json或者appsettings.Production.json中。
内容的提问来源于stack exchange,提问作者Daniel2001k
相关产品推荐
相关产品推荐

