我正在尝试使用端口80为我的应用程序服务器,但是当我执行“netstat -aon”我得到
TCP 0.0.0.0:80 0.0.0.0:0聆听4
当我在任务pipe理器中查找进程时,它显示PID 4是SYSTEM,就是这样,不是扩展…什么都不是,只是“SYSTEM”。 这里发生了什么?
我害怕结束这个过程,我该怎么办?
虽然人们正在指出特定的服务(例如“Web部署代理服务”),但是这不能解决根本原因。 如果你只是禁用引发这个问题的服务,那么未来可能会以一种略微不同的方式重新开始。 所以这是值得了解发生了什么问题,因为这导致更好的解决scheme。
当应用程序服务器需要完全控制端口80时,会出现此问题。这与Windows的一个function相冲突,该function旨在使多个进程能够处理端口80上的请求。完全有可能让任何数量的进程都在端口上接收HTTP请求80,因为Windows有一个内置的HTTP调度机制。 每个进程都可以告诉Windows它想要处理的URL。
但是,如果一个应用服务器完全忽略了这一点,那么你又回到了老旧的sockets世界中,只有一个进程可以接收发往任何特定端口的请求。
这可能没什么问题 – 如果你真的不需要特定的进程来处理端口80上的HTTP请求,那么使用不支持Windows提供的更灵活的机制的应用服务器是可以容忍的。 (而且一些stream行的应用服务器也有这个限制,例如,AFAIK,Tomcat不能和其他人一起玩,所以如果你使用别人的应用服务器,那么可能是不切实际的适应它使用首选的机制。)
Windows试图通过不将其调度机制绑定到端口80来适应这种不灵活的服务,直到主动请求端口。 (这就是为什么你最初不一定会看到问题的原因,但是在更新或者更改configuration后会遇到这个问题)。但是依靠这个并不是一个很好的解决scheme – 你基本上相信没有任何东西尝试在启动应用程序服务器之前在端口80下进行监听。 (有一个过程可能会尝试在端口80上注册某些URL,有不同的原因,如果不允许,则返回)。
所以如果你想让一个服务拥有对80端口的独占访问权限,你最好告诉Windows。 尝试closures所有可能尝试使用通常的端口共享机制的服务是不够好的,因为很难确信已经find了所有这些服务。 (特别是当Windows更新似乎改变了默认设置时)。禁用你所知道的很可能是一个很好的习惯,但是最好从两个方面来解决这个问题:禁用你不想要的服务,并且确保它不是可能是你不知道要把你绊倒的人。
默认情况下, HTTP.SYS (Windows中的底层端口共享HTTP调度机制)能够监听所有地址。 但你可以告诉它不要。 此页面显示了一种方法: http : //www.mikeplate.com/2011/11/06/stop-http-sys-from-listening-on-port-80-in-windows/
这是一个相对较轻的方法,因为它仍然可以在本地主机上侦听IPv6。 它只是释放了IPv4端口80.你可以进一步采取更专门的configuration。 (你甚至可以完全禁用HTTP.SYS ,但这可能会破坏80以外的端口,所以可能会导致问题。)
但是不pipe你做什么,关键是要确保HTTP.SYS不会尝试在你关心的IP地址上监听端口80。 一旦你这样做了,你不必担心停用服务,也不需要担心重新引入问题的其他更改。 如果你确保你需要的端点实际上超出了端口共享的范围,那么你应该发现系统进程停止了绑定。
罪魁祸首是Web部署代理服务。
比net stop http更好的解决scheme是停止名为“Web部署代理服务”的服务。
这很可能是IIS 6.0或更高版本。
以内核模式运行的HTTP协议栈(HTTP.sys)接收客户端请求并将它们路由到适当的请求队列。 在用户模式下运行的工作进程直接从它们自己的内核请求队列中提取请求,从而消除了当Web服务器将请求发送到High时,在IIS 5.0中发生的进程跳跃(并且也发生在IIS 5.0隔离模式中) – 隔离,进程外应用程序。 由于在工作进程隔离模式下消除了这些额外的进程跳跃,IIS可以在不牺牲性能的情况下提供应用程序隔离。
尝试通过进入Device Manager/Non Plug and Play Drivers并selectHTTP来停止HTTP.SYS ,尝试停止它,您将看到触发此HTTP使用端口80的服务。
最后,我检查了一下,你不能结束“系统”过程,如果你这样做,我猜它会有灾难性的影响。 我现在也不会在PC上试用它!
看起来,Windows本身内部正在倾听:80 – 我会猜测它可能是恶意的。 找出最好的方法是:
a)打开一个web浏览器到本地主机,看看会发生什么
b)启动telnet和telnet到localhost 80并运行一些基本的HTTP GET(例如GET /)并查看它返回的内容
如果您认为自己可能正在托pipe恶意软件,那么B是更好的select,因为您不想再次感染自己。 虽然也许没关系。
我find了这个问题的答案: https : //superuser.com/questions/352017/pid4-using-port-80
特别是当它是系统进程4时,您需要禁用HTTP.sys驱动程序,该程序在Windows 7或2008上由其他服务(如Windows远程pipe理或打印后台处理程序)按需启动。
重新启动并使用netstat -nao | find“:80”来检查是否仍然使用80。
我也尝试通过运行“净停止http”来取回端口,但端口似乎从未被释放。 上面的确为我工作,而且我不需要依靠这个驱动程序的其他服务。
Windows Sync Share是在Windows 2012 R2上杀了我们的。 一旦我们禁用了这个function,一切都很好。
我已经通过一个stackoverflow问题解决了这个问题。 按照此链接查找如何让IIS停止侦听指定的IP地址的端口80的解决scheme。