(如同这个问题,我知道,但是答案并不是解决方案。)
我刚刚在 Windows 7 Professional 上安装了 Apache 2.4 作为服务,并对其进行了正确配置,但是,如果我禁用 Windows 防火墙,则只能从 LAN 客户端访问它。(如果 Windows 防火墙正在运行,LAN 客户端将超时)。由于禁用 Windows 防火墙时不存在此问题,因此我不认为这是 httpd 配置中的错误。在启用 Windows 防火墙的情况下启用丢弃数据包日志记录会留下一个空白日志文件,这让我感到困惑。如果 Windows 防火墙确实阻止/丢弃了到端口 80 的入站数据包,那么它为什么不记录此情况?更好的是,为什么 Windows 防火墙会不顾我的防火墙规则继续阻止连接?
我已实施了具有以下选项的入站防火墙规则:Action: Allow the connection. Service: Apache2.4. TCP Port: 80. Local IP: Any. Remote IP: Local Subnet.
我已验证该规则适用于所有网络位置。这不能解决问题。我不认为该规则无效。
netstat -ao
无论 Windows 防火墙是否打开,运行均产生以下相关结果。10.0.0.76
是我运行 httpd 的主机:
Active Connections
Proto Local Address Foreign Address State PID
TCP 10.0.0.76:80 Traxus-GD65:0 LISTENING 9104
如果 httpd 确实在工作,我应该会看到LISTEN
IP 的状态10.0.0.76:80
(PID 9104
运行命令时 httpd 的 PID),并且确实如此。Apache 服务器已验证运行正常,将问题原因缩小到 Windows 防火墙。
以下是运行的输出netsh advfirewall firewall show rule name="Apache HTTP Server" dir=in
:
Rule Name: Apache HTTP Server
----------------------------------------------------------------------
Enabled: Yes
Direction: In
Profiles: Domain,Private,Public
Grouping:
LocalIP: Any
RemoteIP: LocalSubnet
Protocol: TCP
LocalPort: 80
RemotePort: All
Edge traversal: No
Action: Allow
Ok.
netstat /bn
另外,以下是在禁用 Windows 防火墙的情况下运行的相关输出:
Active Connections
Proto Local Address Foreign Address State
TCP 10.0.0.76:80 10.0.0.209:49019 ESTABLISHED
[httpd.exe]
TCP 10.0.0.76:80 10.0.0.209:49020 ESTABLISHED
[httpd.exe]
该10.0.0.209
地址是我的 LAN 客户端。这两个连接仅在禁用 Windows 防火墙并且连接客户端后才会出现。
答案1
我修复了这个问题,但我不知道为什么它能起作用。我回去删除了我的防火墙规则,就像我已经做过很多次一样,并为本地端口 80 制定了一条新规则。即使使用与我之前的规则完全相同的设置,新规则现在也能正常工作。我不确定这是否是一个真正的答案,因为我不完全理解这种发展背后的机制。– 毛茸茸的
我赞同这个解决方案,并把它作为其他人的答案。虽然我很困惑为什么它有效,但实际上,只需从我的规则中删除可执行路径要求就足以在我的 Windows 10 计算机上启用入站连接。谢谢你的提示,毛茸茸的!