Apache 默认监听所有网卡,需修改 Listen 指令为具体 IP+端口(如 Listen 192.168.1.100:80),同步更新 VirtualHost 地址,并避免重复绑定,最后重启服务并用 ss 命令验证。
apache 默认监听本机所有网卡上的指定端口(比如 listen 80 会绑定到 0.0.0.0:80)。要让它只响应某一张网卡的 ip 地址上的请求,关键在于在 listen 指令中明确写出该网卡的 ip 和端口组合。
修改 Listen 指令,指定 IP + 端口
打开 Apache 主配置文件:
- CentOS/RHEL:/etc/httpd/conf/httpd.conf
- Ubuntu/Debian:/etc/apache2/ports.conf(有时还需检查 /etc/apache2/apache2.conf)
找到类似 Listen 80 的行,将其改为具体地址+端口格式。例如,若目标网卡 IP 是 192.168.1.100,希望只在此 IP 的 80 端口上提供服务,则写成:
IPv6 地址需用方括号包裹,如:
Listen [2001:db8::1]:80
同步更新虚拟主机配置
如果启用了 <VirtualHost>,其地址端口必须与 Listen 匹配,否则请求无法被正确路由。将原配置中类似:
改为:
注意:* 表示任意地址,此时已不适用;必须使用实际监听的 IP。
允许多个网卡或端口组合
可以添加多条 Listen 指令,让 Apache 同时监听不同网卡的不同端口。例如:
-
Listen 192.168.1.100:80(内网服务) -
Listen 10.0.0.5:8080(管理接口)
但要避免重叠绑定,比如同时写 Listen 192.168.1.100:80 和 Listen *:80,会导致启动失败并报错:
(48) Address already in use: make_sock: could not bind to address [::]:80
验证和重启
保存配置后执行:
- CentOS/RHEL:
sudo systemctl restart httpd - Ubuntu/Debian:
sudo systemctl restart apache2
用以下命令确认绑定效果:
sudo ss -tuln | grep ':80'正常应看到类似:
tcp 0 0 192.168.1.100:80 0.0.0.0:* LISTEN
而不是 0.0.0.0:80 或 *:80。


















