是否有相当于ipv6的net.ipv4.ip_nonlocal_bind? 需要启动我的nginx启动这样一个IP …
尽pipe有这个/ etc / network / interface,我的Ubuntu并没有在eth0上快速分配这个IPv6:
iface eth0 inet6 static address 1:2:3:4::5 netmask 64
在启动时:
Starting nginx: the configuration file /etc/nginx/nginx.conf syntax is ok [emerg]: bind() to [1:2:3:4::5]:80 failed (99: Cannot assign requested address)
我需要在/etc/init.d/nginx restart后几秒钟运行/etc/init.d/nginx restart启动才能使其正常工作: – /
NB:1:2:3:4 :: 5在这里只用于演示,我有一个有效的IPv6地址在我的服务器上。
net.ipv6.ip_nonlocal_bind sysctl是在内核4.3中添加的,所以如果你正在运行一个更加net.ipv6.ip_nonlocal_bind系统,你现在可以直接用sysctl来解决这个问题,而不是解决初始化脚本hack的问题。
延迟很可能是由于IPv6重复地址检测 。 把它closures(当然)会打破标准,但是你可以尝试将net.ipv6.conf.eth0.dad_transmits设置为0(在我的Ubuntu系统上默认为1):
sysctl -w net.ipv6.conf.eth0.dad_transmits=0
为了永久:
sudo /bin/bash -c 'echo "net.ipv6.conf.eth0.dad_transmits=0" > /etc/sysctl.d/99-disable-dad-eth0.conf'
当然,另一种select是只绑定到:: :(IPv6全零或任何IPv6地址)和防火墙closures服务的接口,不应该暴露它。
您可以简单地在Loopback接口上configuration一个静态的IPv6地址表项。 这将允许nginx监听IP / PORT,即使它在eth0上还没有可用的地址。
手册:
/sbin/ip -6 addr add 2001:db8::ffff:1/64 dev lo
configuration文件:
# File: '/etc/network/interfaces' auto lo iface lo inet loopback iface lo inet6 static address 2001:db8::ffff:1 netmask 64
由于似乎没有这样的ipv6的内核参数,你可以破解nginx的初始化脚本,并添加:
grep -q eth0 /etc/network/run/ifstate || ifup eth0
在启动nginx之前的某个地方?
或者,因为您似乎使用debian或者derivatice,您可以尝试在insserv包的帮助下通过依赖重新sortinginit脚本,并通过在/etc/default/rcS设置variablesCONCURENCY=makefile来切换到并行初始化脚本lauchning /etc/default/rcS (如果您使用Debian Squeeze,这是默认configuration)。
在这篇文章开始的四年里,我确信你已经解决了你的问题,但是我最终在这里试图find一个解决scheme,在一个启用systemd的CentOS 7系统上启动nginx,也许这会帮助别人。
我的nginx会在IPv4和IPv6联网前出现,导致它无法启动并保持closures状态。 RedHat有一个错误,系统在'after'network-online.target之前设置了IPv6,所以在执行nginx之前,它可以绑定到它的configuration中的IPv6地址。
不幸的是,由于这是一个bug,我唯一的select是在nginx的systemd服务定义中引入一个sleep调用,以便在IPv6启动时足够长的睡眠时间。