Nginx端口被占用需先查进程再处理:用sudo lsof -i :80或netstat命令定位,常见为另一Nginx、Apache、Python/Node服务;可停用冲突服务、杀进程或改Nginx监听端口为8080,并建议用systemctl管理服务及反向代理分流。

这个错误说明 Nginx 尝试绑定的端口(通常是 80 或 443)正被其他进程占用,系统不允许重复绑定。解决的核心思路是:找出谁占了端口,再决定是杀掉它,还是让 Nginx 换端口,或者释放冲突服务。
查清楚哪个进程在用端口
运行以下命令,把 80 替换成你实际报错的端口号(比如 443、8080):
sudo lsof -i :80 或 sudo netstat -tulpn | grep :80
如果提示命令未找到,先安装对应工具:
Ubuntu/Debian:sudo apt install lsof 或 sudo apt install net-tools
CentOS/RHEL:sudo yum install lsof 或 sudo yum install net-tools
常见占用端口的进程及处理方式
-
另一个 Nginx 实例正在运行:执行
sudo nginx -s stop或sudo systemctl stop nginx停止旧进程;再用ps aux | grep nginx确认无残留 worker 进程,有则用sudo kill -9 PID强制结束 -
Apache 占用了 80 端口:运行
sudo systemctl stop apache2(Ubuntu)或sudo systemctl stop httpd(CentOS),如不需 Apache 可禁用:sudo systemctl disable apache2 -
Python 的 SimpleHTTPServer、Node.js 的本地服务、Docker 容器等临时占用了端口:通过
lsof输出中的 PID 和 COMMAND 列识别,再用sudo kill -9 PID结束
临时绕过:让 Nginx 改用其他端口
如果只是测试或开发环境,不想动其他服务,可修改 Nginx 配置:
编辑站点配置文件(如 /etc/nginx/sites-enabled/default 或 /etc/nginx/conf.d/*.conf),将 listen 80; 改为 listen 8080;,保存后运行:
sudo nginx -t && sudo nginx -s reload
之后通过 http://your-server-ip:8080 访问即可。
预防再次发生的小建议
- 启动 Nginx 前先检查端口:运行
sudo ss -tlnp | grep ':80'快速确认 - 避免手动 kill 进程后忘记清理,改用
systemctl管理服务更稳妥 - 多个 Web 服务共存时,明确分工:Nginx 做反向代理,把 80/443 统一收口,后端应用走内网端口(如 3000、5000)










