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


72

我对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'找出正在使用什么。
Donal

在“ netstat -tulpn”中,在端口443上听不到任何声音。我在注释中尝试了所有这些方法。
Herbert89 '17

寻找正在运行的越野车软件。对我来说,它是aria2客户。
Deadooshka

@Deadooshka我没有Aria2。
Herbert89 '17

Answers:


113

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

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的程序。这是我的问题。
Herbert89 '17

什么是输出sudo netstat -tulpn
Farhad Farahi

请使用sudo
并重

2
sudo pkill nginx那就很奇怪了,先执行一次然后重试,只有nginx作为Web服务器安装了吗?
Farhad Farahi

是的,只有Nginx被安装为Web服务器。在“ sudo pkill nginx”之后,它不起作用。
Herbert89 '17

9

另一种方法(根据我的经验)是强制退出该端口上运行的进程 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然后先安装它
Aditya Kresna Permana

4

谢谢你的回答。跑步后

sudo netstat -tulpn

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

apt remove apache2

这成功了!再次感谢你。


为我工作。我正在使用的无聊的盒子apache2默认情况下已安装,我没有注意到。
BugHunterUK

2

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

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

更改为:

server {    
   listen 443 ssl; 
   ...
} 

要么

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

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


1

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

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

worker_processes auto;

完成此操作后必须杀死-9 pid,然后我才能开始
Thomas Bennett

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.