如何在本地主机上释放端口80(Windows)?

147

我安装了XAMPP 1.6.8,但它似乎无法正常工作。后来发现端口80没有空闲或未监听。我该如何释放或让其空闲?

非常感谢!


https://dev59.com/SHI95IYBdhLWcg3wyBCc#16251034 - amin k
https://dev59.com/q3RB5IYBdhLWcg3wAjNH - mateuszb
我认为这是一个重复的问题(请在此找到答案)->https://dev59.com/pHM_5IYBdhLWcg3wUxVB - Dung
重复还是不重复,这是在Google上的第一个搜索结果。 - Bitterblue
这回答了你的问题吗?[如何在Windows上找出哪个进程正在监听TCP或UDP端口?] (https://dev59.com/nXVD5IYBdhLWcg3wOo5h) - Stephen Ostermiller
18个回答

7

我正在尝试从这里安装 nginx - http://nginx.org/en/docs/windows.html

访问 http://localhost/ 将会显示一些信息,至少是一个合适的“未找到”消息。
这是因为80端口是默认端口,并且已被其他进程占用。

现在执行以下命令:

net stop http

    // Above command stopped below services  
    // - SSDP Discovery  
    // - Print Spooler  
    // - BranchCache  
    // - Function Discovery Resource Publication  
    // - Function Discovery Provider Host  

现在,访问http://localhost/将会显示一个无法连接的页面。
主要的进程是BranchCache,此进程停止后,会在几秒钟内重新启动。因此,我们需要立即运行其他命令,以下是一个示例:
// this will stop
net stop http

// immeidately run other command you want to
start nginx

现在,访问http://localhost/会显示:

Welcome to nginx!

希望这有所帮助。

4

我也遇到了同样的问题,使用net stop http没有帮助,并且在Windows控制面板中的IIS下的World wide web services选项未被勾选。所以在XAMPP控制面板中,我只需选中Apache启动按钮旁边的Svc复选框(安装Apache作为服务),然后重新启动Windows。现在每次Windows启动时,Apache会自动启动并占用端口80,先于任何其他服务。对我有用!


4
Skype喜欢使用80端口并会阻挡IIS。这就是我的问题所在。

4

这只是一个猜测,但由于端口80是HTTP的传统端口,您可能在系统上运行着Web服务器。是否启用了IIS?

如果您正在运行IIS,则可能会运行Web farm服务。这就是导致我的xampp崩溃的原因。


1
不,我没有IIS。以前我用过xampp,它可以工作。我猜测其他服务正在占用80端口,不允许重新安装Apache服务。 - Aashish
2
Skype也喜欢占用80端口,这是一个常见的意外罪犯! - Simon_Weaver

4

监听80端口的已知Windows服务

从服务管理器(运行:services.msc)中停止并禁用以下已知绑定到端口80的Windows服务。

双击服务后,将“启动类型”更改为“禁用”...

  1. SQL Server Reporting Services(ReportServer)
  2. Web Deployment Agent Service(MsDepSvc)
  3. BranchCache(PeerDistSvc)
  4. Sync Share Service(SyncShareSvc)
  5. World Wide Web Publishing Service(W3SVC)
  6. Internet Information Server(WAS,IISADMIN)

Skype也默认使用端口80, 您可以取消选中它。

您可能已经安装并运行其中一些服务,也可能没有。

在我的情况下,“SQL Server Reporting Services”正在打开端口80。


1
谢谢,这解决了我的问题。对我来说,“SQL Server Reporting Services”也使用了90端口。 - borat

1

程序化地识别真实进程

(当进程ID显示为4时)

通常情况下,这里的答案都需要一定的交互性。

问题在于当某些东西通过HTTP.sys进行侦听时,PID始终为4,并且大多数人发现需要一些工具才能找到真正的所有者。

以下是如何以编程方式识别有问题的进程。没有TcpView等工具(尽管这些工具很好)。但确实依赖于netsh;但是,问题通常与HTTP.sys有关。

$Uri = "http://127.0.0.1:8989"    # for example


# Shows processes that have registered URLs with HTTP.sys
$QueueText = netsh http show servicestate view=requestq verbose=yes | Out-String

# Break into text chunks; discard the header
$Queues    = $QueueText -split '(?<=\n)(?=Request queue name)' | Select-Object -Skip 1

# Find the chunk for the request queue listening on your URI
$Queue     = @($Queues) -match [regex]::Escape($Uri -replace '/$')


if ($Queue.Count -eq 1)
{
    # Will be null if could not pick out exactly one PID
    $ProcessId = [string]$Queue -replace '(?s).*Process IDs:\s+' -replace '(?s)\s.*' -as [int]

    if ($ProcessId)
    {
        Write-Verbose "Identified process $ProcessId as the HTTP listener. Killing..."
        Stop-Process -Id $ProcessId -Confirm
    }
}

最初发布在这里:https://dev59.com/pHM_5IYBdhLWcg3wUxVB#65852847


0

我遇到了相同的问题,通过在httpd.conf文件中进行小修改来解决它,可以通过单击Apache选项旁边的配置按钮获得该文件。

我所做的更改是将listen 80替换为listen 8080。


-1

对我来说,这个问题是在我在Windows 8电脑上托管VPN连接时开始的。

仅仅从"控制面板\网络和Internet\网络连接"中删除该连接就解决了问题。


答案与此无关。这个问题是关于打开端口而不是VPN连接的。 - Pvria Ansari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接