web-dev-qa-db-ja.com

Apache2はIPv4 tcpポートで実行されません

私のDebian 7サーバーでApache2を実行する必要があります。ただし、tcpv6ポートでのみ実行され、tcpv4ポートでは実行されません。 apt-get installでインストールしました。 localhost、127.0.0.1、またはサーバーのIPv4アドレスにアクセスすると、Webサイトが表示されません。

俺の /etc/Apache2/ports.conf

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/Apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/Apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
 # If you add NameVirtualHost *:443 here, you will also have to change
 # the VirtualHost statement in /etc/Apache2/sites-available/default-ssl
 # to <VirtualHost *:443>
 # Server Name Indication for SSL named virtual hosts is currently not
 # supported by MSIE on Windows XP.
 Listen 443
</IfModule>

<IfModule mod_gnutls.c>
 Listen 443
</IfModule>

netstat -plntu

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3558/sshd       
tcp        0      0 0.0.0.0:3466            0.0.0.0:*               LISTEN      2820/mysqld     
tcp6       0      0 :::80                   :::*                    LISTEN      2097/Apache2    
tcp6       0      0 :::22                   :::*                    LISTEN      3558/sshd       
24
Mato

ここでnetstatがtcp6のみを表示することは問題ではありません。リッスンするアドレスを指定しない場合、Apacheは単一のソケットを使用して、サポートされているすべてのアドレスファミリをリッスンします(設計上の理由により、sshdはアドレスおよびアドレスファミリごとに一意のソケットを使用するため、netstat出力に2回表示されます)。

これは私のシステムの1つで、Apacheがtcp6ソケットしか持っていないにもかかわらず、IPv4とIPv6の両方で正常に動作しています。

woodpecker ~ # netstat -anp |grep Apache
tcp6       0      0 :::80    :::*       LISTEN      1637/Apache2        
tcp6       0      0 :::443   :::*       LISTEN      1637/Apache2        
woodpecker ~ # wget http://127.0.0.1/ -O /dev/null
--2013-12-25 08:52:38--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...
# wget http://[::1]/ -O /dev/null
--2013-12-25 08:53:00--  http://[::1]/
Connecting to [::1]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...

サーバーでwget http://127.0.0.1/ -O -を実行するとどうなりますか?接続に成功しましたか?期待どおりにWebサイトの生のHTMLを返しますか?

33
robbat2

これはIPV4接続のみを処理します。

Listen 0.0.0.0:80
Listen 192.0.2.1:80 

https://httpd.Apache.org/docs/2.2/bind.html#ipv6

3
wzs1989
  1. 127.0.0.1はマシンにのみローカルです。ローカルループバックIP /アドレスを使用するには、ブラウザでサーバー自体にアクセスする必要があります。

  2. ファイアウォールでポートをブロックしている可能性があります。

  3. Apacheが実行中で適切に機能していることを確認し、エラーログを確認してください。

  4. すべてのApache構成を再確認してください。

  5. ルートwwwまたはユーザーpublic_htmlディレクトリからホスティングしていますか?

  6. 所有者と権限を再確認してください。


ほぼ2019年(未来へようこそ):

  • デフォルトでは、世界のほとんどがipv6を使用し、失敗した場合はipv4にフォールバックします。

  • これで、ipv6上にipv4トンネルがあり、その逆もありました。

  • ほとんどのOS、プログラム、クライアント、サーバーは、現在ほとんどこれを行っています。

  • もはやNATのない世界へようこそ。今すぐデバイスのファイアウォール/フィルターに依存する必要があります。

  • システムをすべてデュアルスタックにして、ipv4とipv6の両方を同時にサポートすることをお勧めします。これにより、マジックスイッチが発生しても、引き続き稼働しています。私のOS、ネットワーク、そしてISPでさえ、エンドツーエンドのデュアルスタックです。必要に応じてipv4を完全にオフにすることもできますが、ipv4からipv6に戻るトンネルが存在しない場合、機能しない可能性があります。

1
cdmlb