Не вижу Apache работает в Netstat

10

Я просто играю с Apache, и я получил его на работу, то есть я могу подключиться к серверу, просмотрев http://127.0.0.1и http://192.168.1.5я не использую IPv6

Все же это результат netstat

$ sudo service apache2 status
 * apache2 is running
$ netstat -an | grep :80
tcp6       0      0 :::80                   :::*                    LISTEN

$ wget 127.0.0.1
--2014-06-26 01:32:15--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11510 (11K) [text/html]
Saving to: ‘index.html’

100%[=====================================================================================================>] 11,510      --.-K/s   in 0s      

2014-06-26 01:32:15 (161 MB/s) - ‘index.html’ saved [11510/11510]

Я ожидал увидеть, как он слушает обычный TCP, что он явно делает !?

Редактировать:

$ netstat -a | grep LISTEN
tcp        0      0 localhost:ipp           *:*                     LISTEN     
tcp        0      0 localhost:mysql         *:*                     LISTEN     
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN     
tcp6       0      0 [::]:https              [::]:*                  LISTEN     
tcp6       0      0 [::]:http               [::]:*                  LISTEN     

Edit2: почему голосование против? Чего мне не хватает, может кто-нибудь уточнить?

meccooll
источник
попробуйте netstat -a | grep LISTEN и публикация результатов
Lety
Опубликовал результаты
meccooll
Пробовал netstat -p?
Муру
две последние строки относятся к apache, который прослушивает порты 80 и 443. попробуйте предложение muru для просмотра процесса / pid.
Лети
@ Letizia верно, но в первом столбце написано tcp6 и :: для ip, который является IPv6, но я подключаюсь к нему по IPv4 ???
meccooll

Ответы:

17

TL; DR

Apache делает появится в вашем netstatвыходе, и он будет запущен. Вот почему ваш wgetзвонок работает. Однако он привязан к вашему IPv6-адресу, а не к IPv4-адресу. Адресное сопоставление обрабатывает перевод при необходимости.

Идя за документами

Очевидно, здесь есть какой-то механизм отката IPv6-IPv4. На самом деле, я еще не использую IPv6 в своей локальной сети:

$ netstat -tunla | grep LISTEN | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN

Важно отметить, что независимо от того, как вы обращаетесь к своей машине, в конечном итоге это все тот же сервис и порт. Остальное в основном зависит от вашего браузера и службы разрешения DNS. Однако для получения дополнительной информации о том, как Apache справляется с этим, вы можете посмотреть их документацию :

Одним из усложняющих факторов для администраторов Apache является то, может ли сокет IPv6 обрабатывать как соединения IPv4, так и соединения IPv6. При обработке соединений IPv4 с сокетом IPv6 используются IPv4-сопоставленные адреса IPv6, которые по умолчанию разрешены на большинстве платформ, но по умолчанию запрещены в FreeBSD, NetBSD и OpenBSD, чтобы соответствовать общесистемной политике на этих платформах. В системах, где это запрещено по умолчанию, специальный параметр конфигурации может изменить это поведение для Apache.

По сути, речь идет об обработке сокетов IPv4 и IPv6 таким образом, чтобы избежать большинства проблем, связанных с кроссплатформенной совместимостью и обработкой сокетов. Как вы можете прочитать, на платформах Linux, таких как Ubuntu, эта проблема решается с использованием IPv4-сопоставленных адресов IPv6 . В документации также говорится:

Если вы хотите, чтобы Apache обрабатывал только IPv4-соединения, независимо от того, что будет поддерживать ваша платформа и APR, укажите IPv4-адрес во всех директивах Listen.

Что бы дать что-то вроде этого в ports.confфайле:

Listen 0.0.0.0:80 # Or...
Listen 127.0.0.1:80 # Or...
Listen 192.0.2.1:80

В результате один из следующих netstatвыводов ...

$ netstat -tunla | grep LISTEN | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN 
$ netstat -tunla | grep LISTEN | grep 80
tcp        0      127.0.0.1:80              127.0.0.1:80            LISTEN
$ netstat -tunla | grep LISTEN | grep 80
tcp        0      192.0.2.1:80              192.0.2.1:80            LISTEN 

Красивый, но не готовый к прослушиванию IPv6. Вышеуказанная настройка обычно устанавливается в /etc/apache2/ports.conf(или непосредственно в apache2.confболее старых версиях). Значением по умолчанию является то Listen 80, которое выполняет автоматическое связывание, то есть соответствует спецификациям IPv6, приведенным в документации.

Джон У. Смит
источник
1
Ха не знал о сопоставлении адресов, поэтому я должен следить за открытыми портами на IPv6 и IPv4.
Мекколл
присоединился к "Askubuntu", чтобы поднять этот вопрос и ответить !!!
Прем