Почему Apache 2.4 доступен, но отклоняет соединение? [закрыто]

Вопрос или проблема

Среда:

  • Mac OS X EL Capitan 64 bit
  • Apache 2.4.25 (Unix)

ping

ping 127.0.0.1
возвращает:
>64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.081 ms  
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.111 ms  
...

telnet:

telnet 127.0.0.1 80
возвращает:
>Попытка подключения к 127.0.0.1...  
telnet: подключение к адресу 127.0.0.1 отказано  
telnet: не удается подключиться к удаленному хосту 

scutil:

scutil -r localhost

Возвращает:

Доступен

configtest:

apachectl configtest

Возвращает:

Синтаксис в порядке

$PATH

/usr/local/bin
/usr/bin
/bin
/usr/local/sbin
/usr/sbin
/sbin

Несколько apachectl restart и полные перезапуски системы без успеха!

В чем проблема с моей установкой Apache?


Обновление 1

curl

curl -v http://127.0.0.1

Возвращает:

URL перестроен: http://127.0.0.1/  
Попытка подключения к 127.0.0.1...  
подключение к 127.0.0.1 порту 80 не удалось: подключение отказано  
не удалось подключиться к 127.0.0.1 порту 80: подключение отказано  
Закрытие соединения 0  
curl: (7) Не удалось подключиться к 127.0.0.1 порту 80: подключение отказано  

Обновление 2

lsof

lsof -i:80

Возвращает:

COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Google    349 peyman  126u  IPv4 0x23528848eb5fe4db      0t0  TCP 192.168.1.102:49238->ec2-54-197-238-119.compute-1.amazonaws.com:http ( УСТАНОВЛЕНО)
Google    349 peyman  147u  IPv4 0x23528848ec35769b      0t0  TCP 192.168.1.102:49286->151.101.193.69:http ( УСТАНОВЛЕНО)
Google    349 peyman  164u  IPv4 0x23528848ebfa413b      0t0  TCP 192.168.1.102:49290->ec2-23-23-98-233.compute-1.amazonaws.com:http ( УСТАНОВЛЕНО)
Google    349 peyman  170u  IPv4 0x23528848ebfa031b      0t0  TCP 192.168.1.102:49242->pixel.quantserve.com:http ( УСТАНОВЛЕНО)
Google    349 peyman  188u  IPv4 0x23528848ec330dbb      0t0  TCP 192.168.1.102:49248->151.101.65.69:http ( УСТАНОВЛЕНО)
Google    349 peyman  189u  IPv4 0x23528848ebe7185b      0t0  TCP 192.168.1.102:49308->ec2-23-21-110-0.compute-1.amazonaws.com:http ( УСТАНОВЛЕНО)
Google    349 peyman  208u  IPv4 0x23528848ec35885b      0t0  TCP 192.168.1.102:49272->a72-247-178-186.deploy.akamaitechnologies.com:http ( УСТАНОВЛЕНО)

Я не вижу никаких свидетельств в том, что вы опубликовали, и что Apache даже слушает на порту 80; я вижу только исходящие подключения к порту 80 на других системах. Команда telnet 127.0.0.1 80 не показывает, что Apache доступен; вы увидите те же результаты, если используете порт 81, 85, 800 и т. д. Введите команду netstat -a | grep http | grep LISTEN; вы должны увидеть строку с “*.http” и “LISTEN” в конце строки, если Apache действительно слушает соединения на порту 80. Например, см. Запуск веб-сервера Apache под OS X El Capitan.

Если вы не видите строки вывода, указывающей, что он слушает на порту 80, но просто возвращаетесь к подсказке Bash shell, то введите команду sudo apachectl start, затем введите команду netstat снова. Если теперь вы видите, что процесс слушает порт 80, вы можете попробовать свою команду telnet снова. Если Apache отвечает на порту 80, вы должны увидеть Escape character is '^]'. В этот момент вы можете ввести команду HEAD / HTTP/1.0 и затем нажать клавишу ввода несколько раз. Вы должны увидеть, что Apache отвечает с выводом, подобным следующему:

$ telnet 127.0.0.1 80
Попытка подключения к 127.0.0.1...
Подключено к localhost.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sat, 11 Mar 2017 01:44:13 GMT
Server: Apache/2.4.18 (Unix) PHP/5.5.38
Last-Modified: Fri, 03 Feb 2017 21:44:57 GMT
ETag: "a8-547a7315f6840"
Accept-Ranges: bytes
Content-Length: 168
Connection: close
Content-Type: text/html

.

Ответ или решение

Теория

Причина, по которой Apache 2.4 может быть доступным, но отказывать в подключении, заключается в том, что веб-сервер Apache, вероятно, не слушает на порту 80, что предотвращает успешное подключение. Это может быть связано как с неправильно сконфигурированным Apache, так и с несоответствующим запуском службы. Другая причина может заключаться в конфликте с другой программой, которая использует порт 80.

Пример

В предоставленном описании проблемы вызов команды telnet 127.0.0.1 80 возвращает «Connection refused», что является признаком того, что на порту 80 не слушает никакая программа. Кроме того, команда lsof -i:80 не показывает никаких процессов, занимающих этот порт, а это подтверждает, что Apache не запущен или неправильно сконфигурирован.

Применение

Чтобы решить эту проблему, выполните следующие шаги:

  1. Проверка статуса Apache: Убедитесь, что Apache запущен, используя команду sudo apachectl start. Это стартует Apache, если он не был запущен.

  2. Проверка прослушивания порта: Введите netstat -a | grep http | grep LISTEN, чтобы проверить, слушает ли Apache на порту 80. Должна появиться строка с *.http и LISTEN.

  3. Конфигурация Apache: Убедитесь, что конфигурационный файл Apache настроен для прослушивания на порту 80. Найдите файл httpd.conf и проверьте, содержится ли строка Listen 80.

  4. Проверка наличия конфликтов портов: Убедитесь, что ни одна другая программа или служба не использует порт 80. Для этого снова используйте lsof -i:80 и убедитесь, что нет других процессов.

Если указанные шаги решат проблему, telnet или curl должны успешно подключиться к 127.0.0.1 на порту 80, получая стандартный ответ Apache.

Оцените материал
Добавить комментарий

Капча загружается...