ぐぐると対処法はすぐ出てくるんだけど、自分用にもう少し詳しくメモ

[ Windows 10 (64bit) / Ubuntu 18.04.4 LTS / Apache 2.4.29 ]

WSLでApache2をインストールして起動したら、Failed to enable APR_TCP_DEFER_ACCEPT という警告が出た。

$ sudo service apache2 start
 * Starting Apache httpd web server apache2                                                             [Sat Apr 04 14:32:20.262214 2020] [core:warn] [pid 1295:tid 140014090062784] (92)Protocol not available: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT

これは、Apacheの設定ファイル /etc/apache2/apache2.conf に以下の2行を追記すれば出なくなる。

/etc/apache2/apache2.conf
AcceptFilter http none
AcceptFilter https none

設定後、一応 sudo service apache2 restart でサービスを再起動しておくこと。

この方法は以下の記事を参考にさせていただいた。

で、どうしてこれで直るのかを少し調べる……

以下のWSLのGitHubのIssueを見ると、TCP_DEFER_ACCEPT がWindowsではサポートされていないから、この警告が出るらしい。

APR_TCP_DEFER_ACCEPT error when starting Apache2 · Issue #1953 · microsoft/WSL · GitHub
The TCP_DEFER_ACCEPT socket option is not natively supported by Windows.
WSL team are working with Windows networking team on this issue, but fix likely won't make it in RS3.
Doesn't block Apache2 from starting, just a warning. Pile-on below if otherwise.

でも TCP_DEFER_ACCEPT が何なのかは、片手間に調べた程度では理解できなかった。

雰囲気では、Linuxで使われている、TCP周りの何かを効率良くするためのオプションらしい。

そしてApacheの AcceptFilter が何なのかというと……

core - Apache HTTP サーバ バージョン 2.4
Listen しているソケットに対して、OS が固有に持っているプロトコルについての最適化を 有効にするディレクティブです。
(略)
none 以外の値で TCP_DEFER_ACCEPT が有効になります。

AcceptFilternone 以外を設定した場合、そのプロトコルで TCP_DEFER_ACCEPT が有効になると。

また、Linuxでの初期値は以下の通りらしい。

AcceptFilter http data
AcceptFilter https data

しかしWindowsではそもそも TCP_DEFER_ACCEPT に対応してないから、none を設定してあげないと警告が出た……ということだと思う。