在面板里启动站点提示 80 端口被占用,Nginx 反复启动失败。端口只有一个,先找出占用的进程再决定停谁。

查占用进程

ss -lntp | grep ":80 "
lsof -i :80 | head

常见的占用者有三类:系统预装的 httpd、另一个 Web 面板、Docker 容器映射出去的端口。

按类型处理

  • 系统 httpd:systemctl stop httpd 并禁用开机启动
  • 残留的 Nginx 进程:kill 掉后由面板重新拉起
  • Docker 映射:docker ps 看端口绑定,改容器映射或换端口

确认配置本身没错

nginx -t
journalctl -u nginx -n 30 --no-pager

有时端口没被占,是配置里重复 listen 或者证书路径不存在导致启动失败,报错文案却指向端口。以 nginx -t 的输出为准。

如果确实需要两个服务共存,把面板或某个站点改到 8080 并做反向代理,不要直接改默认站点的监听端口了事,容易忘掉后续的跳转规则。

端口释放后仍启动失败

占用进程已经清掉,面板还是报错,就去看 Nginx 的错误日志和配置文件语法。常见的还有证书文件路径被删、include 的站点文件里有重复 server_name,报错内容经常被面板简化成一句启动失败。

另外 CentOS 上 SELinux 开启时会限制 Nginx 绑定非标准端口,改用 8080 之后需要执行 semanage port -a 放行,否则换端口也一样起不来。

处理完记得验证:curl -I 本地地址能看到响应头,再回面板确认站点状态是运行中。

作者 9823189