当我重新启动我的服务器(不是 nginx,整个服务器)时,Nginx 无法自动启动。我登录服务器后,可以手动启动nginx(service nginx start)。有用。但是如果我再次重启,我必须手动启动Nginx。在检查 Nginx 的 error.log 时,我看到这个错误重复了好几次:
2012/08/27 09:19:23 [emerg] 1066#0: bind() to [ipv6]:80 failed (99: Cannot assign requested address)
我怎样才能解决这个问题?这是什么问题?(我运行的是 Ubuntu 12.04 服务器)
听起来您的 IPv6 地址刚刚分配给 eth0,并且仍处于暂定状态,因此 Nginx 无法在该 IP 上建立监听。
通过运行以下任一轮 DAD(重复地址检测):
(插入
/etc/sysctl.conf
永久)或将此行添加到
/etc/network/interfaces
inet6 接口定义下来源: http: //pyro.eu.org/how-to/micro/nginx-cannot-assign-requested-address-ipv6.txt
我有类似的症状,但配置不同。服务器运行配置了静态 IPv4 和 IPv6 地址的 Debian Wheezy。
每次启动时,nginx 都无法启动:
手动启动工作正常,手动检查还显示地址和路由已设置。只需设置 IPv6 地址
interfaces
(没有 IPv4 地址)即可。删除静态 IPv6 网关也有效,但随后使用了链路本地网关地址。进一步调试后,发现开机过程会吐出:事实证明,当接口启动时,路由器会自动分配一个 IPv6 地址和网关。要避免此行为,
accept_ra 0
请在iface eth0 inet6
部分中设置。该inet6
部分也必须移动到该inet
部分之前,否则默认路由仍将指向链路本地地址。在我的 Ubuntu 14.04 主机上,我只需要在 IPv4 (inet) 条目之前移动 IPv6 (inet6) 条目。
所以这有效: