随机端口生成
给本地服务、容器映射和测试环境挑一个不容易撞的端口号,顺便看看它属于哪个区间、会不会需要 root。
内核临时端口区,本地调试最不容易撞
还没有结果,点「重新生成」或者调整一下范围。
端口怎么挑
IANA 把 0 到 65535 分成三段:0 到 1023 是系统端口,也叫特权端口,绑定它需要 root 或者 CAP_NET_BIND_SERVICE 能力,容器里还常被 sysctl 限制;1024 到 49151 是注册端口,给长期运行的服务用,好处是不用提权,坏处是容易和别人的服务撞;49152 到 65535 是动态端口,内核给客户端连接自动分配临时端口时也用这一段,拿来做本地调试最省事,缺点是同一个端口可能已经被系统分配出去了。
反过来说,选端口时最该避开的就是知名服务:80、443、22、25、3306、5432、6379、27017、8080 这些一旦被占用,你起服务时会直接报「address already in use」,而排查起来又容易忽略。本页内置了一份常见端口清单,勾上避让后就不会生成它们。
把端口写成配置项时,建议同时留一条环境变量覆盖的口子,比如 PORT=8080 或者 APP_PORT=xxx。默认值挑一个高位动态端口,同一个项目在多台机器、多个 checkout 上并行跑时不容易互相抢;但要注意动态端口区是内核的临时端口分配范围,长期监听在 49152 以上理论上有可能和系统分配出去的客户端端口冲突,所以更稳妥的选择是 20000 到 30000 之间这类没有被系统临时端口占用的区间。
还有两件事值得留意:一是 Docker 的 -p 映射和 Kubernetes 的 nodePort 默认范围(30000 到 32767)应该避让,部署到集群里才不会被拦;二是端口只在本机是「私有资源」,真正对外暴露时还要考虑防火墙、安全组和运营商是否封了该端口,很多云主机默认只放行 80 和 443。
生成用的是浏览器自带的加密随机数(crypto.getRandomValues)并做了拒绝采样,所以不会出现「某些端口更容易被抽到」的取模偏差。整站在本机计算,生成的端口不会上传。