80 端口被谁占了
80 端口被谁占了:从定位进程到用 nginx 建站
【摘要】新服务绑不上 80 端口,用 ss、ps、lsof 三层定位到 nginx,再讲清 nginx 与 1Panel 如何配合建站,附上线前的三个检查点,适合刚接手 Linux 小主机的人。
一、缘起:服务起不来,先别急着换端口
我在一台 Linux 小主机上部署新服务,配置文件写完,启动就报端口被占用。第一反应是把 80 改成 8080——反正能跑就行。
但这样会留下两个隐患:访问地址多一个尾巴,以后上 HTTPS、配反向代理时还要回来改一遍。与其绕开,不如先花两分钟弄清楚:80 端口到底被谁占了,它是不是本来就该在那儿。
二、三招定位:从"端口"查到"进程"
第一招:ss 看监听
sudo ss -lntp | grep ':80'
-l 只看监听,-n 不做域名解析,-t 限 TCP,-p 显示进程。当时机器上的回显很干净:
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
这里有个容易误判的点:Process 列是空的,不代表没有进程。普通用户看不到别人的进程信息,加上 sudo 之后,这一列才会出现 users:(("nginx",pid=...,fd=...)) 这样的内容。我第一次就是盯着空列以为端口只是被内核占着。
第二招:ps 反查进程名
端口归属看不清,就从进程侧反查:
ps -eo user,pid,args | grep -i nginx | grep -v grep
当时回显的关键两行:
root 1262262 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 1265887 nginx: worker process
一个 master、一个 worker,这是 nginx 的标准形态。看到这里基本可以确定:80 端口被 nginx 占着,而且它是正常服务,不是僵尸进程。
第三招:lsof 交叉验证
如果机器上装了 lsof,可以直接把端口和进程绑在一起看:
sudo lsof -i :80
三招里任选一到两招就够。ss 快,ps 直观,lsof 信息全。真正要避免的是只看一眼 ss 里没有进程名,就直接下"端口空闲"的结论。
三、查到 nginx 之后,别急着 kill
看到占用进程,最省事的做法是 kill 掉再启动自己的服务。这一步最好忍住。
nginx 往往是这台机器上其他站点的入口。master 进程被干掉,所有虚拟主机一起下线,影响面比"换个端口"大得多。先确认两件事:
systemctl status nginx
sudo nginx -T | grep -n 'listen'
nginx -T 会把实际加载的完整配置打印出来,包括 include 进来的站点文件。比起在 /etc/nginx 里一层层翻目录,这个命令更接近"nginx 真正在读什么"。
如果确认 80 端口上的站点还有用,那正确姿势不是抢端口,而是把自己的服务挂到 nginx 后面:新服务监听 127.0.0.1 的某个高位端口,由 nginx 按域名或路径转发。
四、nginx 和 1Panel 怎么配合
1Panel 自带 nginx 管理,两者不冲突——前提是别同时改同一份配置。
面板里的操作路径大致是:
| 操作 | 面板位置 | 实际动作 |
|---|---|---|
| 新建站点 | 网站 → 创建网站 | 生成 server 块与根目录 |
| 反向代理 | 站点设置 → 反向代理 | 写入 proxy_pass |
| 配证书 | 站点设置 → HTTPS | 写入 ssl_certificate 并 reload |
| 改根目录 | 站点设置 → 基本 | 指向 /www/wwwroot/站点名 |
习惯命令行的话,也可以走传统方式:在 sites-available 里写配置,软链到 sites-enabled,nginx -t 通过后 reload。
两种方式选一种就好。面板建站后又手动改配置文件,面板下一次重载可能把你的改动覆盖掉——这类"配置莫名其妙回滚"的问题,多半不是 nginx 的锅。
五、上线前的三个检查点
监听对不对。 ss -lntp 确认服务真的在听,且监听的是 0.0.0.0 而不是只有 127.0.0.1。要对外提供服务却只监听回环地址,本地 curl 通、外网访问不了,很容易查错方向。
防火墙放没放。 云主机有两层:安全组和系统防火墙。只开其中一层,症状都是"端口通了但连不上"。
默认站点有没有抢。 多个 server 块都监听 80 时,没有匹配到域名的请求会落到 default_server。新站配置明明对了却打开旧页面,先查这一条。
改完配置,养成两个动作:nginx -t 验证语法,再 systemctl reload nginx 平滑重载。reload 不会中断现有连接,比 restart 稳。
六、总结
- 端口被占先定位再决策,
ss -lntp看不到进程名时,用sudo或ps反查,别急着换端口。 - 80 端口上的 nginx 通常是入口而不是障碍,优先考虑反向代理,而不是 kill。
- nginx 配置以
nginx -T的实际加载结果为准;面板和手改二选一,避免配置互相覆盖。
END
- 点赞
- 收藏
- 关注作者
评论(0)