我有一个 nginx 服务,驻留在端口 80 和 443 上,并且已经做了很多年了。昨天我突然得到一个纯文本页面,其中包含404页面不存在信息
标题:
HTTP/2 404
content-type: text/plain; charset=utf-8
x-content-type-options: nosniff
content-length: 19
date: Sun, 01 Jan 2023 10:24:28 GMT
为了排除故障,我在另一台电脑上启动了终端并开始watch curl -ksI https://trausti.local
sudo service nginx stop
即使我停止了 nginx 服务,该终端窗口的输出仍然保持不变。我用以下方法验证了这一点
为了找出哪个其他进程可能已经占用了该端口,我运行了以下命令:
netstat -tulpn | grep :80
$ netstat -tulpn | $ netstat -tulpn | grep :80 (并非所有进程都可以被识别,非拥有的进程信息不会显示,您必须是 root 才能看到全部。)
tcp 0 0 0.0.0.0:8086 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8088 0.0.0.0:* 监听 -
tcp6 0 0 :::8086 :::* 监听 -
tcp6 0 0 :::8088 :::* 监听 -
ss -lptr
两者都没有迹象表明罪魁祸首......
我验证了 nginx 服务已停止sudo systemctl status nginx
:
● nginx.service - 高性能 Web 服务器和反向代理服务器
已加载:已加载(/lib/systemd/system/nginx.service;已启用;供应商预设:已启用)
活动:自 Sun 2023-01-01 起不活动(死亡)欧洲中部时间 11:15:05; 5 分钟前
文档:man:nginx(8)
进程:572 ExecStartPre=/usr/sbin/nginx -t -q -g 守护进程; master_process 开启; (code=exited, status=0/SUCCESS)
进程: 935 ExecStart=/usr/sbin/nginx -g daemon on; master_process 开启; (代码=退出,状态=0/成功)
进程:124643 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (代码=exite>
主PID:936(代码=已退出,状态=0/成功)
CPU:374ms
一月 01 00:45:13 Trausti 系统1:启动高性能网络服务器和反向代理服务器...
Jan 01 00:45:22 Trausti systemd1:启动了高性能Web服务器和反向代理服务器。
一月 01 11:15:03 Trausti systemd1:停止高性能 Web 服务器和反向代理服务器...
Jan 01 11:15:05 Trausti systemd1: nginx.service: 成功。
一月 01 11:15:05 Trausti systemd1: 已停止 高性能 Web 服务器和反向代理服务器。
我最近安装的唯一新服务是k3s那是几天前的事了。
我在 00:45 完全重启了服务器,返回了正常的 nginx 网页,但现在又回到了404页面不存在
uname -a
输出:
Linux Trausti 5.10.0-20-amd64 #1 SMP Debian 5.10.158-2 (2022-12-13) x86_64 GNU/Linux
编辑:
正如 @steve 所说,它与 k3s 有关。具体来说Traefik Ingress 控制器和反向代理我仍然很好奇它是如何在没有任何东西出现的情况下劫持端口的。 (并且很恼火的是没有任何标头表明它是什么服务)。
我仍然想知道它如何在不出现ss
或出现的情况下侦听端口 80 和 443netstat
答案1
这是因为 k3s 入口将传入端口 80 转发到其他端口。
k3s 设置了防火墙规则,以便任何针对端口 80 的内容都会发送到 k3s 正在侦听的另一个端口。
按照设计。