Macos nginx:[emerg]bind()到0.0.0.0:8080在mac上失败(48:地址已在使用)
我是新来Nginx的,在这里遇到了一些麻烦 我使用的是macos和Macos nginx:[emerg]bind()到0.0.0.0:8080在mac上失败(48:地址已在使用),macos,nginx,Macos,Nginx,我是新来Nginx的,在这里遇到了一些麻烦 我使用的是macos和nginx版本:nginx/1.17.7 我第一次下载Nginx是很久以前。当时,一切都运转得很好。然后,当我玩nginx.conf时,不知怎么搞砸了。因此,当我今天重新开始学习Nginx时,我删除了以前所有的文件,并通过自制重新安装了它。然后,我希望有人能帮我解决的问题突然出现了 在初始化Nginx之后,我得到了这个错误 nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Addr
nginx版本:nginx/1.17.7
我第一次下载Nginx是很久以前。当时,一切都运转得很好。然后,当我玩nginx.conf
时,不知怎么搞砸了。因此,当我今天重新开始学习Nginx时,我删除了以前所有的文件,并通过自制重新安装了它。然后,我希望有人能帮我解决的问题突然出现了
在初始化Nginx之后,我得到了这个错误
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:8080 failed (48: Address already in use)
nginx: [emerg] still could not bind()
我在网上搜索了这个问题。有很多答案,但要么是针对Linux而不是Mac的解决方案,要么就是无法工作
我发现的最有希望的答案之一是杀死使用端口的进程。顺便说一句,即使我有这个错误,我也可以访问页面localhost:8080
,但它是403禁止页面
。然后我在终端上尝试了一个命令:ps ax-o pid,ppid,%cpu,vsz,wchan,command | egrep'(nginx | pid)
()
这就是输出:
PID PPID %CPU VSZ WCHAN COMMAND
21827 1 0.0 4291640 - nginx: master process nginx
21828 21827 0.0 4301348 - nginx: worker process
21831 93689 0.0 4267768 - egrep (nginx|PID)
nginx: [emerg] open() "/usr/local/var/run/nginx.pid" failed (13: Permission denied)
我不(仍然不)明白这说明了什么,所以我试图通过kill-9
杀死他们,即kill-921827
,kill-92182
,和kill-921831
然后我得到一个错误:-bash:kill:(21827)-不允许操作
。我只是想也许sudo
可以解决这个问题,所以我试着sudo kill-9 21827
。这一次,它起了作用。除第三个进程外,我杀死了所有进程。当我试图sudo kill-9 21831
时,我没有得到这样的过程。然后我发现这是因为这个过程的PID
由于某种原因一直在变化,所以如果我当时没有捕捉到这个过程的确切PID,我就无法杀死它。然后我就这样把它放在那里了
然后我尝试在终端上运行nginx
。这就是输出:
PID PPID %CPU VSZ WCHAN COMMAND
21827 1 0.0 4291640 - nginx: master process nginx
21828 21827 0.0 4301348 - nginx: worker process
21831 93689 0.0 4267768 - egrep (nginx|PID)
nginx: [emerg] open() "/usr/local/var/run/nginx.pid" failed (13: Permission denied)
这次我没有找到一个有潜力解决这个问题的答案。。。因此,我尝试通过命令sudo nginx-s stop&&sudo nginx
()重新启动nginx
,但没有成功。它报告了nginx:[alert]kill(21827,15)失败(3:没有这样的过程)
。因此,我尝试了同一来源中提供的另一个答案:brew服务列表
,然后brew服务启动nginx
但我仍然得到了nginx:[emerg]open()“/usr/local/var/run/nginx.pid”失败(13:权限被拒绝)
现在我不知道如何解决这个问题。我还尝试用自制软件重新安装nginx。但之前的过程会像它们那样突然出现
此外,我还尝试了这个命令:ps aux | grep nginx
。在我终止进程之前,这给了我三个进程。在这一切之后,我得到了
apple 22922 0.0 0.0 4267768 832 s003 S+ 3:09AM 0:00.00 grep nginx
不知道这能说明什么
这里出了什么问题?或者,您可以分享让Nginx运行的正确初始步骤吗?这里有很多内容。首先,Mac OS是Linux的近亲。许多Linux解决方案/命令将在Mac上本机运行。那些没有的通常可以修改以使其工作。在某些情况下,您可能需要安装默认情况下未安装在Mac OS中的其他命令行工具 其次,
ps
是“流程状态”的缩写。顾名思义,它是一个命令,用于报告计算机上运行的进程的状态(您的权限允许您查看)。当然,使用kill
终止进程是可能的,有时也是必要的。但是,如果你不知道自己在做什么,我不建议你这么做。正如您所发现的,根据您的操作系统权限/设置,您可能需要使用sudo
来覆盖。使用nginx命令启动和停止正在运行的nginx服务器可能更好。这样做的一件事是允许这些动作“优雅地”执行,也就是说“干净地”和“没有意外的副作用”。稍后再谈
在ps
输出中,第三个进程的PID不断变化的原因是,该进程就是要报告的egrep
进程本身。每次运行该命令时,都会执行一个新的egrep
命令,并获得自己的全新PID
在ps
输出中需要注意的另一件事是:有2个nginx
进程。一个是大师,另一个是工人。只要主进程正在运行,您就可以一次又一次地杀死工作进程,主进程将产生一个新的工作进程(使用另一个新的PID)。文档中说,“主进程的主要目的是读取和评估配置文件,以及维护工作进程。”
现在,听起来另一个进程已经在使用端口8080。通过运行以下命令,您可以发现该进程是什么:
lsof-nPL-iTCP:8080
根据lsof
命令报告的内容,您可以使用报告的PID
退出程序或终止进程。如果出于某种原因,您不能或不想终止有问题的进程,则必须更改nginx
的配置
正如错误消息所显示的,您现在对文件/usr/local/var/run/nginx.pid
存在权限问题,该文件阻止nginx
启动。该文件包含启动时提供给nginx
进程的PID。当您发出命令nginx-s stop时,它试图从该文件中读取先前分配的PID。如果不能,它将失败,并显示您看到的错误消息
使用kill
终止