80 端口被谁占了

举报
yd_258587103 发表于 2026/11/11 00:13:28 2026/11/11
【摘要】 80 端口被谁占了:从定位进程到用 nginx 建站【摘要】新服务绑不上 80 端口,用 ss、ps、lsof 三层定位到 nginx,再讲清 nginx 与 1Panel 如何配合建站,附上线前的三个检查点,适合刚接手 Linux 小主机的人。 一、缘起:服务起不来,先别急着换端口我在一台 Linux 小主机上部署新服务,配置文件写完,启动就报端口被占用。第一反应是把 80 改成 808...

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 稳。

六、总结

  1. 端口被占先定位再决策,ss -lntp 看不到进程名时,用 sudo 或 ps 反查,别急着换端口。
  2. 80 端口上的 nginx 通常是入口而不是障碍,优先考虑反向代理,而不是 kill。
  3. nginx 配置以 nginx -T 的实际加载结果为准;面板和手改二选一,避免配置互相覆盖。

END

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。