Apacheはすべてのポートで起動を拒否します。

Apacheはすべてのポートで起動を拒否します。

どのポートでもApacheを起動できないようです。常にエラーが発生します。

apache2(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80

netstat -plant|grep 80私は実行に問題がないことを確認するためにポート80で何も実行されていないことを確認しました。sudo nc -l 80私はこれが権限の問題かもしれないと思いました(initscriptから始める必要があるので、それは必要ありません)。そのため、Apacheの受信ポートを8080を除いて8080に変更しましたが、同じエラーが発生しました(何も実行されませんでした)。ポート)。それらのアドレスとポートが表示されることを除いて、ほとんど同じエラーが発生するように設定しようとしましたが、ports.confまだ発生します。Listen 127.0.0.1:80Listen 127.0.0.1:8080

私はDebian Unstableを使用していることを指摘したいと思います。

この時点では、何をさらに確認するのかわかりません。

答え1

あなたのstraceファイルであなたの質問は次のとおりです。

[pid 23020] setsockopt(5, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
[pid 23020] setsockopt(5, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
[pid 23020] setsockopt(5, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
[pid 23020] setsockopt(5, SOL_TCP, TCP_NODELAY, [1], 4) = 0
[pid 23020] bind(5, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
[pid 23020] listen(5, 511)              = 0
[pid 23020] setsockopt(7, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
[pid 23020] setsockopt(7, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
[pid 23020] setsockopt(7, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
[pid 23020] setsockopt(7, SOL_TCP, TCP_NODELAY, [1], 4) = 0
[pid 23020] bind(7, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 EADDRINUSE (Address already in use)
[pid 23020] write(2, "(98)Address already in use: AH00"..., 82(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
) = 82

bindあなたはそれが呼び出されていることがわかります二重。初めて動作します。 2番目は、アドレスがすでに使用されていたので失敗しました。つまり、ちょうどバインドされたからです。

Listen 80私のApache設定(DebianのApache 2.4テスト/不安定)では、2つの設定でこれを達成できることがわかりました。私はあなたも同じことをしたか、非常に似たようなことをしたと思います。

答え2

あなたの問題は、IPV4ではなくIPV6アドレスをバインドする試みに関連しているようです。はい Apache は IPv6 を構成していないため、::1 と 127.0.0.1 にバインドしようとします。つまり、127.0.0.1に2回バインドしようとします。解決策:

  • localhostがIPv4 IP(getentホストlocalhost)であることを確認してください。

  • IPv6(特にlocalhostアドレス)を使用していない場合は、/ etc / hostsを確認してすべてのIPv6アドレスを削除してください。

更新できない場合は、名前の代わりにIPを/etc/hosts変更httpd.confまたはバインドします(127.0.0.1:80で受信)。ports.conf

答え3

エラーメッセージであると判断した場合、ApacheはIPv6を使用してバインドを試みています。ホストでIPv6が有効になっていますか?

関連情報