【问题标题】:Nginx will not start (Address already in use)Nginx 将无法启动(地址已在使用中)
【发布时间】:2017-07-07 07:15:53
【问题描述】:

我的 nginx 有问题。我尝试了不同的解决方案,但对我来说没有任何效果。 那是我的错误:

4 root@BANANAS ~ # sudo service nginx restart                                :(
Restarting nginx: nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:443 failed (98: Address already in use)
nginx: [emerg] still could not bind()
nginx.

你能帮帮我吗?

【问题讨论】:

  • 看起来 https 已经在使用中了。使用“netstat -tulpn”找出正在使用它的内容。
  • in 'netstat -tulpn' 在 443 端口上没有听到任何声音。我在评论中尝试了所有这些方法。
  • 寻找正在运行的有问题的软件。对我来说,它原来是 aria2 客户端。
  • @Deadooshka 我没有 Aria2。

标签: nginx


【解决方案1】:

可能其他进程正在使用指定端口:

sudo netstat -tulpn

获取已经使用 443 的进程的 PID。并使用 kill 命令发送信号。

sudo kill -2 <PID>

sudo service nginx restart

您也可以这样做:

sudo fuser -k 443/tcp

确保不要使用旧语法:

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

上面的语法会导致

nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)

正确的语法:

server {
    listen 80;
    listen [::]:80 ipv6only=on;
}

server {
    listen [::]:80;
}

上述两种语法将实现相同的功能,同时监听 ipv4 和 ipv6。

【讨论】:

  • 我没有找到使用端口 443 的程序。这是我的问题。
  • sudo netstat -tulpn 的输出是什么?
  • 请使用 sudo 并重试
  • 那很奇怪,做一个sudo pkill nginx然后重试,只有nginx被安装为web服务器对吗?
  • 这对我帮助很大。如果您只是使用 sudo apt remove apache2 命令删除它,请确保您没有运行 apache2 =) =_
【解决方案2】:

另一种方法(根据我的经验)只是强制退出在该端口 443 上运行的进程

sudo fuser -k 443/tcp 

或者如果您在端口 80 上运行,只需将端口更改为

sudo fuser -k 80/tcp

希望对遇到同样问题的人有所帮助

替代使用lsof:

找到PID并杀死在端口443上运行的进程

sudo kill -9 $(lsof -t -i :443)

【讨论】:

  • fuser默认没有安装在centos中。
  • @KhomNazid 然后先安装它
【解决方案3】:

感谢您的回答。 运行后

sudo netstat -tulpn

我意识到我在 80 端口上运行了 apache2。这可能是在我使用 Certbot 在服务器上安装 SSL 之后完成的。 我删除了 Apache2,服务器已启动并运行。

apt remove apache2

这成功了!再次感谢。

【讨论】:

  • 为我工作。我使用的 vagrant box 默认安装了apache2,我没有注意到。
【解决方案4】:

由于在同一个服务器块内不小心重复了两次listen指令,我收到了上述错误,如下所示:

server {    
   listen [::]:443 ssl ipv6only=off; 
   listen 443 ssl; 
   ...
}

改成:

server {    
   listen 443 ssl; 
   ...
} 

server {    
   listen [::]:443 ssl ipv6only=off; 
   ...
} 

解决了重启服务器时的问题:sudo service nginx start

【讨论】:

    【解决方案5】:

    首先,我们必须检查有多少服务在端口 80 上运行。要检查它,您可以运行以下命令:

    sudo netstat -plant | grep 80
    

    这将向您显示哪个服务正在侦听端口 80,然后您可以决定是要使用该服务还是使用 Nginx。

    如果是 Apache,你需要决定是使用 Apache 还是 Nginx。

    如果你只想拥有Nginx,你需要先停止Apache:

    sudo systemctl stop apache2 && sudo systemctl start nginx
    

    【讨论】:

      【解决方案6】:

      当我终止绑定到 80 和 443 端口的 nginx 进程时,该进程总是以新的 PID 重新出现。

      它帮助我在/etc/nginx/nginx.conf中暂时注释了这一行,重启nginx然后取消注释该行:

      worker_processes auto;
      

      【讨论】:

      • 在这样做之后必须杀死 -9 pid 并且我可以开始
      【解决方案7】:

      在我的例子中,运行 Ubuntu 20.04,我启动了服务器,Apache2 被设置为自动启动。

      $ sudo lsof -i -P -n | grep LISTEN
      

      这表明 Apache2 在端口 80 上运行,并导致了冲突。我用

      关闭它
      $ sudo systemctl stop Apache2
      

      然后用 nginx 启动

      $ sudo systemctl start nginx
      

      【讨论】:

        【解决方案8】:

        如果使用虚拟机,您可能只需要重新启动虚拟机。我昨天遇到了同样的问题,我无法让 Nginx 开始使用这篇文章中的任何方法。所以今天早上启动虚拟机,查看运行进程,看到Nginx在80端口运行。昨天我什至用systemctl查看了Nginx的状态,它说失败,但今天它是活动的。不确定这里发生了什么,但值得一试。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-16
          • 2019-09-17
          • 2012-03-09
          • 2018-03-21
          • 2019-08-04
          • 1970-01-01
          • 2012-12-25
          相关资源
          最近更新 更多