Nginx无法启动(地址已在使用中)

时间:2017-02-17 16:55:36

标签: nginx

我的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.

你能帮助我吗?

7 个答案:

答案 0 :(得分:62)

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

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。

答案 1 :(得分:5)

另一种方式(根据我的经验)只是强制退出在该端口上运行的进程<style> @media print { .table td.cell { background-color: blue !important; } } </style> <table class="table"> <tr> <td class="cell">TR 1</td> </tr> </table>

443

或者如果您在端口sudo fuser -k 443/tcp 上运行,只需将端口更改为

即可
80

希望它可以帮助那些有同样问题的人

替代使用sudo fuser -k 80/tcp

找到PID&amp;杀死在端口lsof上运行的进程

443

答案 2 :(得分:1)

谢谢您的回答。 运行后

sudo netstat -tulpn

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

apt remove apache2

这成功了!再次谢谢你。

答案 3 :(得分:1)

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

这有助于我在/etc/nginx/nginx.conf中暂时注释此行,重新启动nginx,然后取消注释该行:

worker_processes auto;

答案 4 :(得分:1)

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

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

将其更改为:

server {    
   listen 443 ssl; 
   ...
} 

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

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

答案 5 :(得分:0)

如果使用虚拟机,则可能只需要重新启动虚拟机即可。昨天我遇到了同样的问题,无法让Nginx开始使用本文中的任何方法。因此,我今天早上启动了虚拟机,检查了正在运行的进程,然后看到Nginx在端口80上运行。昨天,我什至用systemctl查看了Nginx的状态,但说失败了,但今天它处于活动状态。不知道这里发生了什么,但是值得一试。

答案 6 :(得分:0)

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

sudo netstat -plant | grep 80

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

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

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

sudo systemctl stop apache2 && sudo systemctl start nginx