80 端口只有一个

在动手之前,先看一眼谁在听:

1
ss -ltnp

输出不长,但信息密度很高。80 端口归 nginx,22 归 sshd,7500 是 frps 的管理口,5001–5008 是 frps 的隧道口,8081 被 docker-proxy 占着 —— 那是 OpenWebUI,映射在 172.17.0.1:8081。

一个端口只能有一个主人

OpenWebUI 是一开始就想放 80 的。它是个容器,-p 80:8080 写下去很自然。

问题是 80 上已经有 nginx 了。两个进程同时想 listen 同一个端口,谁先绑上谁赢,另一个直接报 Address already in use 起不来。Container 起不来还不会大声喊,只是反复重启,docker ps 里显示 Restarting,很容易以为是镜像的问题。

最后的做法是让容器退回去:只绑内网地址 172.17.0.1:8081,外面要访问就走 nginx。这样 80 上永远只有一个主人,也顺手把「公网直接打到容器」这条路关上了。

default_server 也只能有一个

nginx 的站点配置放在 sites-available/,靠 sites-enabled/ 里的软链接启用。我打开的时候只有一个:

1
sites-enabled/home -> /etc/nginx/sites-available/home

里面写着 listen 80 default_server; 和 server_name _; —— 意思是「任何没被别的 server 匹配到的请求都给我」。这是好事,说明之前那张截图页是兜底页。

但这也意味着:想换掉它,不能只是新增一个 listen 80 default_server 的配置。两个都是 default_server,nginx -t 会直接报 duplicate default server,然后 reload 什么都不做,站点还是旧的那张页。第一次遇到时我盯着浏览器刷新了三次才反应过来是配置没生效。

正确顺序是先禁用再启用。

动手前的备份

改 nginx 之前有一件事值得花三秒钟:

1
cp -a /etc/nginx/sites-available /root/backups/nginx-$(date +%F)

配置是纯文本,备份成本几乎为零,而它就是那种「删掉之后想不起来原来写了什么」的东西。


80 端口只有一个
https://zxtweb.fun/posts/port-80/
作者
站长
发布于
2026年10月28日
许可协议