首页 > Sysadmin > 正文

Linux 修改 443 端口:Nginx、Apache 与防火墙

huyuanwen 2026-11-02 Sysadmin

HTTPS 默认跑在 443 端口,但迁移、避免扫描或与现有服务冲突时,需要把监听改到别的端口。改完服务配置、防火墙和内核监听三处都要同步。

改 Nginx 监听端口

nginx.conf 或 sites-enabled 里的 server 块用 listen 指令指定端口 [1]。改之前先用 nginx -t 校验配置,再用 systemctl reload nginx 平滑生效,无需断连。

# 把默认的 443 改成 8443
sed -i 's/listen 443 ssl;/listen 8443 ssl;/g' /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx
ss -tulnp | grep nginx

如果你启用了 IPv6,记得把 listen [::]:443 也一起改掉。

改 Apache 监听端口

Apache 2.4 的端口在 ports.conf 的 Listen 指令里声明 [2]。改完后还要同步 sites-enabled 里的 <VirtualHost> 端口,否则服务启动会报地址冲突。

# 改全局监听端口
sed -i 's/Listen 443/Listen 8443/g' /etc/apache2/ports.conf
# 改默认虚拟主机
sed -i 's/<VirtualHost *:443>/<VirtualHost *:8443>/g' /etc/apache2/sites-enabled/000-default.conf
apache2ctl -t && systemctl restart apache2
ss -tulnp | grep apache2

防火墙放行与封堵

新端口必须先放行,再把旧端口封掉。ufw 的规则顺序很重要,先加 allow 再 delete deny,避免把自己锁在外面 [3]。也可以用 iptables 直接操作,但回滚更麻烦。

# 放行新端口
ufw allow 8443/tcp
# 删除旧 443 入站规则
ufw delete deny 443/tcp
# 确认规则列表
ufw status numbered

低编号端口(<1024) Historically 需要 root 才能绑定,但现代内核和 systemd 已经放开;只是 /etc/services 里的名字映射还在 [4],改端口不会影响程序运行。

排错速查表

现象 原因 处理
ss 看不到新端口 配置文件改了但没 reload 确认 systemctl reload 成功
防火墙规则顺序错 deny 443 在 allow 8443 前面 ufw status numbered 看顺序
启动报 Address already in use 端口被别的进程占用 ss -tulnp 找 pid 再处理
浏览器提示 connection refused 新端口没放行或服务没监听 先查服务再查防火墙

回滚与局限性

回滚就是把配置文件改回原来的端口,reload 或 restart 服务,然后把防火墙规则切回去。注意 ufw 没有 “undo” 命令,delete 规则前先 status numbered 确认规则编号。

WSL 和容器里的 systemd 行为可能和物理机有差异;WSL2 的 localhost 转发是内置的,但端口冲突检查逻辑和原生 Linux 一致 [5]。实际公网服务器上改 443 还要同步 CDN、负载均衡和证书路径,这些不在本教程范围内。


参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。