给站点加 HTTPS 证书,Nginx 一启动就报 443 已被使用。奇怪的是翻了半天,没看到明显的占用进程。这种时候别急着重启服务器,先弄清 443 到底被谁拿着。

443 是干什么的

443 是 HTTPS 的默认端口,跑的是 TLS 加密后的 HTTP。客户端连 443 时会先做 TLS 握手,验证服务器证书,再加密传输。它和 80 端口常成对出现:80 收到请求后跳转到 443,把明文升级成加密。防火墙和云安全组只放行 443、放过 80,是很常见的配置。

查占用先看这几行命令

netstat -ano | findstr :443
ss -tlnp | grep 443
lsof -i :443

Windows 拿最后一列 PID 去任务管理器对。Linux 上 lsof 直接给进程名。占用 443 的常客是 IIS、老版 Skype、以及 Docker 里的容器。有人装了 IIS 又装 Apache,两者抢 443,谁先启动谁占。

端口没被占却连不上

命令查不到占用,但外部访问超时,八成是防火墙或安全组的锅。本机 firewall-cmd、ufw、Windows 防火墙是一层,云厂商的安全组是另一层,两层都要放行 443 才通。还有一种隐蔽情况:证书链不全,浏览器报证书错误,看着像端口问题其实是配置问题。

要不要改默认端口

  • 不建议改:443 是浏览器默认认的,改了就没人能直接访问,用户得手动加端口号。
  • 可以改:内网服务、做端口复用,或一个服务器上跑多个 HTTPS 站点用 SNI 区分,这时靠 Nginx 的 server_name 分流。

判断很简单:对外站点老老实实用 443,把证书和防火墙配好;内部服务随意。查不到占用却不通,别浪费时间重装,先去安全组看规则。