Nginx 将无法启动(地址已在使用中)
Posted
技术标签:
【中文标题】Nginx 将无法启动(地址已在使用中)【英文标题】:Nginx will not start (Address already in use) 【发布时间】: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.
你能帮帮我吗?
【问题讨论】:
试试这里发布的一些答案nginx - nginx: [emerg] bind() to [::]:80 failed (98: Address already in use) 看起来 https 已经在使用中了。使用“netstat -tulpn”找出正在使用它的内容。 in 'netstat -tulpn' 在 443 端口上没有听到任何声音。我在评论中尝试了所有这些方法。 寻找正在运行的有问题的软件。对我来说,它原来是 aria2 客户端。 @Deadooshka 我没有 Aria2。 【参考方案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的状态,它说失败,但今天它是活动的。不确定这里发生了什么,但值得一试。
【讨论】:
以上是关于Nginx 将无法启动(地址已在使用中)的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Eclipse 启动 Tomcat:“地址已在使用中”
无法启动 HSQLDB(java.net.BindException:地址已在使用中)
Grails 项目运行错误 - 服务器无法为端口 8080 启动:地址已在使用中:JVM_Bind