nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)报错解决记录

问题描述

今天我在阿里云服务器上配置 nginx ,刚安装好nginx

sudo apt install nginx 

使用默认配置,运行

sudo nginx # 启动nginx

报错如下:

nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)

然后我运行

sudo nginx -t  # 检查nginx的配置是否正确

报错如下:

nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)
nginx: configuration file /etc/nginx/nginx.conf test failed

系统信息:
OS: Debian 9.2 stretch
Kernel: x86_64 Linux 4.9.0-4-amd64




问题分析
在 /etc/nginx/sites-enabled/default 文件中,有

server{
    listen 80 default_server;
    listen [::]:80 default_server;
}

其中 listen [::]:80 default_server; 这句是配置对 ipv6端口的监听。
ipv4和ipv6有什么区别呢?

TCP/IP协议是互联网发展的基石,其中IP是网络层协议,规范互联网中分组信息的交换和选路。目前采用的IPv4协议地址长度为32位,总数约43亿个IPv4地址已分配殆尽。
IPv6是IP地址的第六版协议,诞生于1999年,其最大的优点就是设计地址长度达128bit,可以提供2的128次方个IP地址,即使将地球上所有沙子都变成晶体管,依然会有足够的IP地址给电子设备使用。
近乎无穷的IP地址让IPv6能容得下海量设备,这将与5G等技术一起,支撑移动互联网、物联网、工业互联网、云计算、大数据、人工智能等新兴业态的快速发展。
ipv4和ipv6只是位数不同,版本不同,ipv6目前还没有普及。

目前国内很多服务器不支持ipv6,阿里云现在开始支持ipv6了,但是需要手动开启。
因为没有开启ipv6,所以会出现 Address family not supported by protocol 的报错。

解决问题:

sudo vim /etc/nginx/sites-enabled/default

将 listen [::]:80 default_server; 注释掉

server{
    listen 80 default_server;
    # listen [::]:80 default_server;
}

然后

sudo nginx -t  # 检查nginx的配置是否正确

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

这样nginx就可以正常启动了。或者还可以将服务器的ipv6开启,具体的方法百度一下挺多的。

猜你喜欢

转载自blog.csdn.net/Clark_Fitz817/article/details/79768126
今日推荐