最近在使用PHP5.6+Apache2.4,搭建開發環境;在實際的開發過程中發現http請求一緻處于挂起狀态,于是重新開機(net start/stop)Apache2.4服務,然後再通路問題得到了解決,但是過一會,平凡的打開頁面又出現問題,通過檢視web伺服器的日志,發現報很多"指定的網絡名不再可用"的錯誤:
[Thu Nov 20 14:07:43.151780 2014] [mpm_winnt:warn] [pid 8752:tid 1132] (OS 64)指定的網絡名不再可用。 : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Nov 20 14:07:43.152781 2014] [mpm_winnt:warn] [pid 8752:tid 1132] (OS 64)指定的網絡名不再可用。 : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Nov 20 14:07:43.152781 2014] [mpm_winnt:warn] [pid 8752:tid 1132] (OS 64)指定的網絡名不再可用。 : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Nov 20 14:07:43.152781 2014] [mpm_winnt:warn] [pid 8752:tid 1132] (OS 64)指定的網絡名不再可用。 : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Nov 20 14:07:43.152781 2014] [mpm_winnt:warn] [pid 8752:tid 1132] (OS 64)指定的網絡名不再可用。 : AH00341: winnt_accept: Asynchronous AcceptEx failed.
在網上找各種資料,都是說在httpd.conf檔案中添加 Win32DisableAcceptEx 标記:
<IfModule mpm_winnt.c>
ThreadsPerChild 150
MaxRequestsPerChild 10000
Win32DisableAcceptEx
</IfModule>
配置之後問題依然未得到解決,最終檢視Apache的手冊(PS:檢視最新的Apache2.4的手冊),看到官方的如下解釋:
The default values on Windows are:
AcceptFilter http data
AcceptFilter https data
Window's mpm_winnt interprets the AcceptFilter to toggle the AcceptEx() API, and does not support http protocol buffering. There are two values which utilize the Windows AcceptEx() API and will recycle network sockets between connections. data waits until data has been transmitted as documented above, and the initial data buffer and network endpoint addresses are all retrieved from the single AcceptEx() invocation. connect will use the AcceptEx() API, also retrieve the network endpoint addresses, but like none the connect option does not wait for the initial data transmission.
On Windows, none uses accept() rather than AcceptEx() and will not recycle sockets between connections. This is useful for network adapters with broken driver support, as well as some virtual network providers such as vpn drivers, or spam, virus or spyware filters.
在配置檔案中添加如下資訊:
AcceptFilter http none
AcceptFilter https none
最終解決問題