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 文件中,有 ```conf 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开启,具体的方法百度一下挺多的。

你可能感兴趣的:(nginx)