【问题标题】:nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) even after killing the process using port 80nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 即使在使用端口 80 杀死进程之后
【发布时间】:2025-02-14 02:00:02
【问题描述】:

我正在尝试按如下方式启动 nginx:

kurt@kurt-ThinkPad:~$ which nginx
/usr/sbin/nginx
kurt@kurt-ThinkPad:~$ sudo /usr/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

EasyEngine tutorial 之后,我尝试使用fuser -k 终止使用端口80 的进程:

kurt@kurt-ThinkPad:~$ sudo fuser -k 80/tcp
80/tcp:              31924 31925 31926

但是,在重新运行 sudo /usr/sbin/nginx 后,我得到了完全相同的错误消息。

我已经使用fuserlsof -inetstat 尝试了描述here 的其他几个“诊断”:

kurt@kurt-ThinkPad:~$ fuser 80/tcp
kurt@kurt-ThinkPad:~$ lsof -i :80 | grep LISTEN
kurt@kurt-ThinkPad:~$ netstat -tulpn | grep --color :80
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:8060            0.0.0.0:*               LISTEN      -      

只有netstat 命令会给出结果,但我无法从中推断出进程 ID。

关于如何让 nginx 工作的任何想法?

【问题讨论】:

    标签: linux nginx


    【解决方案1】:

    你应该运行这个

    user@user ~ $ sudo netstat -tulpn | grep --color :80
    

    它会显示你的进程ID

    tcp6       0      0 :::80                   :::*                    LISTEN      2063/apache2
    

    2063/apache2 – PID/进程名称

    【讨论】: