Windows 系统下,本地安装 Nginx 并启动 nginx.exe,出现报错:“ nginx: [emerg] bind() to
0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) ”。
一、SQL Server 的 Reporting Service 导致的80端口被占用
-
我们可以看到问题造成的原因主要是80端口被占用了,正常思路我们进入 cmd 终端查看80端口的占用情况。
netstat -ano | findstr "80"
-
但是我们发现 PID 为4的是 System 进程,System 进程是肯定不能结束的,继续换个思路。
那么我们知道 HTTP 服务器的端口号正好就是80,那么就从这一点入手,多半就是 HTTP 服务导致了80端口已经被占用了。
于是我们可以查看一下当前 HTTP 的服务状态。
netsh http show servicestate
-
由此可以发现请求队列中有进程 ID 为8868的请求队列,正是这些进程占用了80端口,那么我们再去任务管理器中查找 PID 为 8868 的进程。
-
之后转到服务并且打开服务,在服务列表中找到与 ReportServer 相关的 SQL Server Reporting Services(MSSQLSERVER)。
- 之后将该服务的启动类型改成手动启动,并且停止该服务。
- 之后再去启动 nginx.exe 就能发现 Nginx 能够正常启动了。
二、IIS 导致的80端口被占用
因为我不是这个原因,所以就简写了。
-
win + R 运行 regedit 打开注册表编辑器。
-
找到这个路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP,并找到其下面的 Start 项。
-
将 Start 项的数据值改为 0。
-
重启电脑,System 进程就不会再占用80端口了。