Apache2 не работает на TCP-порту IPv4


23

Мне нужно запустить Apache2 на моем сервере Debian 7. Но он работает только на порту tcpv6, а не на порту tcpv4. Я установил его с помощью apt-get install. Если я захожу на localhost или 127.0.0.1 или на мой IPv4-адрес сервера, он не отображает никакой веб-сайт.

Мой /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       

3
Попробуйте изменить Listen 80To Listen 0.0.0.0:80. Вы можете обратиться к документации httpd.apache.org/docs/2.2/bind.html для получения дополнительной информации.
pradeepchhetri

@pradeepchhetri Спасибо. Оно работает. Я могу получить доступ к своему адресу сервера с любого компьютера, на котором отображается содержимое (IP-адрес / some.php), но я не получаю доступ к some.php с этого сервера. Я пробовал localhost, 127.0.0.1 и внешний IP: номер порта, который работает с другого ПК ... Но он не работает.
Мато

1
Можете ли вы опубликовать вывод sudo iptables -nvLи sudo sestatus? Я думаю, что у вас есть локальный брандмауэр, который мешает.
Прадипчхетри

@ Что нужно уточнить, когда он показывает контент, но не работает, вы имеете в виду, что он показывает ваш сырой PHP вместо того, чтобы его запускать? Если это так, вам нужно включить модуль PHP. Я думаю, a2enmod php5должен сделать это для вас.
robbat2

3
Машины с Linux обычно скрывают сокет с двумя стеками IPv4 + IPv6 за прослушиванием адреса IPv6 ::.
Павел Шимерда

Ответы:


32

Тот факт, что netstat показывает только tcp6, здесь не является проблемой. Если вы не укажете адрес для прослушивания, apache будет прослушивать все поддерживаемые семейства адресов, используя один сокет (по соображениям проектирования sshd использует уникальный сокет для каждого адреса и семейства адресов, следовательно, дважды отображается в выводе netstat).

Вот одна из моих систем, показывающая 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 -на сервере, что происходит? Это успешно соединяется? Возвращает ли он сырой HTML для вашего сайта, как ожидалось?


спасибо, теперь это работает, но у меня есть только одна маленькая проблема. Я написал об этом выше.
Мато

Вы знаете, сумасшедшая вещь, это всегда был мой опыт. Естественно. Как сетевой программист, я хорошо знаю о INADDR_ANYи IN6ADDR_ANY_INIT. Но сегодня я видел действительно странное поведение. Никаких изменений брандмауэра, никаких изменений Apache, но каким-то образом удаленные хосты могут подключаться только через IPv6 - что является проблемой для тех, у кого до сих пор нет IPv6. Это, конечно, то, над чем я буду работать, но вы абсолютно правы (хотя вызов, который вы даете, не применим в моем случае, к сожалению).
Прифтан


1
  1. 127.0.0.1 является локальным только для компьютера, вы должны находиться на самом сервере в браузере, чтобы использовать локальный IP-адрес обратной связи;

  2. У вас может быть брандмауэр, блокирующий порты;

  3. Убедитесь, что apache работает и работает правильно, проверьте журналы ошибок;

  4. Дважды проверьте все ваши настройки Apache;

  5. Вы хостинг от корня www или пользовательского каталога public_html?

  6. Дважды проверьте владельца и разрешения.


Почти 2019 год (добро пожаловать в будущее):

  • По умолчанию большая часть мира использует ipv6, а в случае неудачи возвращается к ipv4;

  • Теперь у нас есть туннели ipv4 поверх ipv6 и наоборот;

  • Большинство ОС, программ, клиентов и серверов в основном делают это сейчас;

  • Добро пожаловать в мир, где больше нет NAT, и теперь вам нужно зависеть от брандмауэра / фильтров прямо на вашем устройстве;

  • Я бы порекомендовал попытаться сохранить все ваши системы двойными, поддерживая одновременно ipv4 и ipv6, поэтому, когда происходит магическое переключение, вы все еще работаете. Моя ОС, сеть, даже мой интернет-провайдер - это два стека в конец. Я мог бы полностью отключить ipv4, если бы захотел, но что там может больше не работать, если не существует туннелей обратно в ipv6 из ipv4.


Я был в затруднительном положении, чтобы дать вам +1 или нет - так как вы использовали слово «папка». Но идея не отключать IPv6 так важна, как и убедиться, что ваш брандмауэр правильно настроен для IPv6. Я знаю, что многие думают, что NAT - это безопасность, но в большинстве случаев это иллюзия (это также проблема для многих сервисов). Это и другие ваши очки действительны, поэтому имейте +1.
Прифтан

Извините, я имел в виду каталог :-P
cdmlb

Ну за это я бы дал тебе еще +1, если бы мог. Я довольно удивлен и также смирен, что вы измените это. Я пурист, я думаю, что все, что я могу сказать. Меня смущает и раздражает, что в какой-то компании это исправляли, а потом меняли на «папку». Ну, может быть, это делает его более «дружелюбным» к людям, но тогда, кажется, оно было принято как правильное слово для тех, кто должен знать лучше. Я не знаю. В любом случае, весь ваш список - это то, что я действительно хочу, чтобы больше людей поняли! Увы, многие не ...
Прифтан

-1

*

wget http://127.0.0.1/ -O / dev / null

* представляет соединение с локальным сервером без обработки IPv4 или IPv6. Если вы измените localhost (или 127.0.0.1) на реальный IPv4-адрес этого сервера, вы ничего не сможете получить, так как отказали в соединении.

Попробуйте описать ваш IP в конфигурационных файлах: NameVirtualHost: 80 Прослушать: 80

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.