Nginx 启动报 bind() failed (98: Address already in use) 怎么办?

80 端口被占用导致 Nginx 起不来:用 ss -tulnp 或 lsof -i :80 找到占用进程(常是 Apache、旧 nginx、其他服务),停掉或改端口;也可能是配置里重复 listen。本文给排查步骤。

最佳实践
Nginx 启动报 bind() failed (98: Address already in use) 怎么办?封面

这个错误表示 Nginx 无法绑定报错中的监听地址和端口。先确认哪个进程正在监听、它承载什么业务,再决定复用现有 Nginx、调整端口或停止冲突实例。不要直接停用 Apache,也不要按进程名强杀所有 Nginx。

第一步:找出占用者

以 Linux 上的 TCP 80 端口为例:

sudo ss -ltnp 'sport = :80'
# 或
sudo lsof -nP -iTCP:80 -sTCP:LISTEN

检查输出中的 PID、监听地址和进程启动参数;如果报错的是 443 或其他端口,按实际端口查询。确认进程由哪个服务单元、容器或手工命令启动,并联系业务负责人判断是否允许中断。

占用者 下一步
Apache 或其他 Web 服务 确认它是否仍提供服务;保留现有入口或为新服务选择其他端口
已运行的 Nginx 检查是否重复启动;更新现有实例配置通常应 reload,而非另起 master
Node、Tomcat 等应用 确认是否应由 Nginx 反向代理,再规划应用内部端口
容器映射 检查容器端口发布配置及其业务归属,按部署流程调整

第二步:对症处理

服务管理器启动的 Nginx,先检查状态和配置。以下命令适用于实际单元名为 nginx 的 systemd 部署:

sudo systemctl status nginx
sudo nginx -t

确认测试的二进制和配置与该服务一致。配置检查通过后,已有实例用 sudo systemctl reload nginx 应用变更;服务未运行且端口冲突已解决时,才用 sudo systemctl start nginx。要停止其他服务,应走它的服务管理流程并确认停机影响,不默认执行 disable。

手工启动的多余 Nginx 实例,先核对 master PID、二进制、配置前缀和 PID 文件,再通过对应实例的配置发送优雅退出指令:

sudo nginx -s quit

此命令通过配置的 PID 文件定位实例;存在多个安装目录或自定义 -p、-c 参数时,必须使用该实例对应的二进制与参数。确认目标退出且端口释放后,再启动需要的服务。不要用 pkill -9 nginx 作为常规修复。

需要换端口时,修改目标站点的 listen,同时检查负载均衡、容器映射与防火墙。先检查配置,再对正确的运行实例执行 reload;未运行的实例则执行 start。

配置错误的情况

检查实际加载的配置及全部 include:

sudo nginx -T

输出可能包含内部地址或凭据,不要直接公开粘贴。

不同 server 块共享 listen 80; 是正常的虚拟主机配置,不应见到重复端口就删除。相同块内重复声明、同一地址端口的监听选项冲突,应根据 nginx -t 的具体报错处理。

当前 Nginx 的 ipv6only 默认是 on,所以 listen [::]:80; 默认只接受 IPv6;它与 listen 80; 可以用于分别监听 IPv6 和 IPv4。显式设置 ipv6only=off 时,IPv6 通配套接字也可接受 IPv4,需检查是否与其他 IPv4 监听重叠。详见 listen 指令。

预防

  • 为主机及容器发布端口维护明确的业务归属。
  • 使用一种管理方式启动同一实例,避免手工启动和服务管理器重复拉起。
  • 配置变更后检查服务日志、实际监听地址与测试请求,不只看命令是否返回成功。

常见问题(FAQ)

Q:有监听端口,但看不到进程名?

先使用 sudo,并确认查看的是正确主机或容器的网络命名空间;查询结果也可能因进程退出而变化。TIME_WAIT 是已关闭 TCP 连接的状态,不是仍在监听的进程,不应据此建议重启网络栈。

Q:reload 能改变监听端口吗?

可以。Nginx 会检查新配置并尝试打开新的监听套接字;失败时回退到旧配置继续工作,成功后启动新 worker,让旧 worker 关闭监听并处理完已有连接。改完仍异常时,检查错误日志和实际生效配置,而不是认定 reload 不释放旧监听。参见 Nginx 配置重载流程。

Q:禁用 IPv6 的环境怎么写?

只配置需要的 IPv4 监听并移除 IPv6 监听。设置 ipv6only=on 仍然需要创建 IPv6 套接字,不能用它绕过系统禁用 IPv6 的限制。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台