在面板里启动站点提示 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 本地地址能看到响应头,再回面板确认站点状态是运行中。