ipv6下nginx启动bind()错误解决办法
2010年10月12日
在DiaHostingVPS配置ipv6隧道笔记一文中我们提到了如何在nginx主机上安装ipv6隧道及对应支持的方法,常常会有朋友因为各种原因要用 killall -g nginx
灭掉进程来重启nginx,而这个时候重启,经常会遇到以下错误:[emerg]: bind() to [::]:80 failed (98: Address already in use)
遇到这种问题,目前发现万无一失的解决办法便是注释掉所有listen [::]:80
行,然后启动,再取消注释,用nginx -s reload
来操作。
当然这真的很烦,而且像我的VPS有八个站点,一个一个注释实在太麻烦,于是,也有折中的办法:
将所有站点配置放在 vhost
文件夹里,所有注释掉这一行的站点放在 vhost_no_ipv6
文件夹里,每次启动的时候只需要在nginx.conf
里http块里修改include vhost/*.conf
即可。
嗯,还是挺折腾吧?谁叫我跟V6干上了呢?