必须启用 net.ipv4.ip_nonlocal_bind 才能让 Nginx、HAProxy、Keepalived 等服务绑定未配置的虚拟 IP(VIP),否则报错“Cannot assign requested address”;该参数为 0 表示禁用,1 表示启用,可通过 sysctl 临时或永久配置,并需配合路由或 ARP 机制确保通信正常。
要让核心服务(如 Nginx、HAProxy、Keepalived)绑定到尚未配置在本机网卡上的虚拟 IP(VIP),必须启用 net.ipv4.ip_nonlocal_bind,否则会报错 Cannot assign requested address。
执行以下命令查看是否已启用:
cat /proc/sys/net/ipv4/ip_nonlocal_bind
输出为 0 表示禁用,1 表示已启用。
适合测试或紧急修复:
sudo sysctl -w net.ipv4.ip_nonlocal_bind=1
echo 1 | sudo tee /proc/sys/net/ipv4/ip_nonlocal_bind
有三种主流方式,任选其一即可:
net.ipv4.ip_nonlocal_bind = 1
然后执行 sudo sysctl -p 加载
echo "net.ipv4.ip_nonlocal_bind = 1" | sudo tee /etc/sysctl.d/99-vip-bind.conf
再运行 sudo sysctl --system
cat /proc/sys/net/ipv4/ip_nonlocal_bind,确认输出为 1
该参数仅影响 IPv4 的 socket 绑定行为,不改变路由或转发逻辑。启用后,应用可监听任意 IPv4 地址(包括未配置的 VIP),但数据包仍需通过正确路由到达本机,通常需配合 net.ipv4.ip_forward=1 或 ARP 响应机制(如 Keepalived 的 arp_ignore/arp_announce)才能正常通信。