由于上海电信把家庭宽带 443 端口封掉,导致我的微信公众号“游戏打折情报”( yxdzqb )无法从微信服务器直连。于是我用 PHP 写了一个类似反向代理的转发器布署在外服务器上,用途是:把来自 80/443 的微信服务转发给家庭宽带的其它未封端口上。
这里做个广告:微信公众号 游戏打折情报 可以查询 Steam/杉果 /Humble Bundle 的打折 /最低价情况,还有一些免费领取的推送,不会推垃圾信息,可以自行查看推送历史。
一般情况下可以正常使用,但过了一段时间以后微信公众号会出现无响应(经判断是拒绝服务),重启 Apache 后即恢复正常。把 log 调到 Debug 模式以后发现如下可疑行:
中文 Windows 系统:
[mpm_winnt:warn] (OS 64)指定的网络名不再可用。
AH00341: winnt_accept: Asynchronous AcceptEx failed.
英文 Windows 系统:
(OS 64)The specified network name is no longer available.
AH00341: winnt_accept: Asynchronous AcceptEx failed.
在 MPM 里调试了很久没找到问题,后来找到了这个讨论: https://communities.ca.com/thread/241692373
解决方法是升级到 Apache 2.4.24 以后的版本,如果执行的是 2.4.23 或以前的版本,也可以在 httpd.conf 中改如下行:
AcceptFilter https connect
AcceptFilter http connect
我看到很多中文网站(都是抄的同一个来源)说:
加入:
Win32DisableAcceptEx
或者:
AcceptFilter https none
AcceptFilter http none
并不完全正确,Win32DisableAcceptEx 只适用于 Apache 2.2 而 AcceptFilter https none 不用 Filter 会有一些安全风险。
在这里记录一下分享给大家,也以免自己忘了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.