ngnix 启动 isse ipv4 和 ipv6

ngnix 启动 isse ipv4 和 ipv6

我正在尝试设置我的第一个 nginx 服务器,但在设置 ipv4 和 ipv6 时遇到了问题。

我的配置文件顶部有这个(它是配置文件中唯一的服务器块):

    server {

            # Listen for requests on these ports 
            listen 80 default;
            listen [::]:80 default_server;
    }

这是我尝试启动 ngnix 时收到的错误:

* Restarting nginx nginx
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

任何帮助都将受到赞赏。

答案1

您尝试绑定到 IPv4 两次。

        listen 80 default;
        listen [::]:80 default_server;

默认情况下(在 Linux 上)第二listen条指令绑定到 IPv4 和 IPv6,除非您明确要求它仅使用该ipv6only选项绑定到 IPv6。

有两种方法可以解决此问题。请选择其中一种(但不能同时选择两种):

  1. 删除第一个listen指令,因为这是多余的。第二个指令将通过 IPv4 映射的 IPv6 覆盖 IPv4 和 IPv6 连接。这样做的唯一缺点是您的日志将以映射形式显示 IPv4 地址,例如::ffff:203.0.113.25

  2. 添加ipv6only=on到第二listen条指令。


请注意,从 nginx 1.3.4 开始,它ipv6only=on现在是默认设置,因此在后续版本中必须使用原始配置。在此之前,默认设置取决于操作系统。

答案2

你运行的是 Linux 吗?

那么可能必须做这样的事情:

    listen [::]:80 ipv6only=on;
    listen 80;

相关内容